Octopus.Script exported 2016-09-15 by Grendizr belongs to ‘ClickOnce’ category.
Create binaries manifest & CO application and sign them with given code sign certificate … using mage.exe.
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Deploy step to read binaries from
DeployStepName
Name of the previous step used to deploy binaries that will be packed in CO package
Path to the directory where to deploy the ClickOnce package
DestinationPath = \\MyServer\MyClickOnceRepo\#{Octopus.Project.Name}\#{Octopus.Environment.Name}
Path to the target directory for the ClickOnce package. This will contain the created *.application file and the “Application Files” folder
Name of the target executable file
ExeFileName
Name of the executable file of the application to pack
Publisher name
Publisher = MyCompany
Publisher name to use when creating the CO package
Path to the certification file
SignCertFilePath = \\MyServer\Auth\cert\my-cert.pfx
Path to the certification pfx file
Password of the certification file
SignCertPassword =
null
Path to mage.exe
MageExePath = \\MyServer\Tools\Octopus\Tentacles\mage.exe
Path to mage.exe which is used to update manifest and .application files and sign them.
Icon filename
IconFile
Name of icon file in the package, eg. ApplicationIcon.ico
Application display name
DisplayName
Name which appears in the Start Menu
Script body
Steps based on this template will execute the following PowerShell script.
Write-Host "Building clickonce application ..."
function Validate-Parameter([REF]$f, $name, $value) {
if (!$value) {
throw ('Missing required value for parameter ''{0}''.' -f $name)
}
$f.Value = $value
Write-Host "Parameters [$name] has been initialized with : [$value]"
}
### Parameters
$deployStepName = $null
$appName = $null
$exeFileName = $null
$destinationPath = $null
$certFilePath = $null
$certPassword = $null
$publisher = $null
$mageExe = $null
$version = $null
$binariesFolderPath = $null
$coAppName = $null
$iconFile = $null
Validate-Parameter ([REF]$deployStepName) 'Deploy step name to read binaries from' $OctopusParameters['DeployStepName']
Validate-Parameter ([REF]$appName) 'Project name' $OctopusParameters['Octopus.Project.Name']
Validate-Parameter ([REF]$coAppName) 'Application display name' $OctopusParameters['DisplayName']
Validate-Parameter ([REF]$exeFileName) 'Executable file name' $OctopusParameters['ExeFileName']
Validate-Parameter ([REF]$destinationPath) 'Path to the directory where to deploy the ClickOnce package' $OctopusParameters['DestinationPath']
Validate-Parameter ([REF]$certFilePath) 'Path to the certification file' $OctopusParameters['SignCertFilePath']
Validate-Parameter ([REF]$certPassword) 'Password of the certification file' $OctopusParameters['SignCertPassword']
Validate-Parameter ([REF]$publisher) 'Publisher name' $OctopusParameters['Publisher']
Validate-Parameter ([REF]$mageExe) 'Path to the mage.exe' $OctopusParameters['MageExePath']
Validate-Parameter ([REF]$iconFile) 'Icon file' $OctopusParameters['IconFile']
### end of parameters
Validate-Parameter ([REF]$version) 'Version number (from release)' $OctopusParameters['Octopus.Release.Number']
$binariesFolderParameter = -join("Octopus.Action[",$deployStepName,"].Output.Package.InstallationDirectoryPath")
Write-Host "Trying to get Installation folder parameter value for : [$binariesFolderParameter]"
$binariesFolderPath = $OctopusParameters[$binariesFolderParameter]
if(!$binariesFolderPath){
throw ('Unable to retrieve binaries path from previous step execution for step with name ''{0}''.' -f $deployStepName)
}
$appVersionAndNumber = -join($appName, "_", $version)
$packageDestinationSubDirectory = -join ("Application_Files/", $appVersionAndNumber)
$packageDestinationPath = -join ($destinationPath, "/", $packageDestinationSubDirectory)
$appManifestRelativePath = -join ("Application_Files/",$appVersionAndNumber, "/", $exeFileName, ".manifest")
$appManifestFilePath = -join ($binariesFolderPath, "/", $exeFileName, ".manifest")
$coAppFilePath = -join($binariesFolderPath, "\", $appName, ".application")
$coAppFilePathServer = -join($destinationPath, "\", $appName, ".application")
### Create Application manifest
Write-Host "Creating application manifest at "$appManifestFilePath
& $mageExe -New Application -t "$appManifestFilePath" -n "$coAppName" -v $version -p msil -fd "$binariesFolderPath" -tr FullTrust -a sha256RSA -if $iconFile
Write-Host "Signing application manifest ..."
& $mageExe -Sign "$appManifestFilePath" -cf $certFilePath -pwd $certPassword
### Create Deployment application
Write-Host "Creating CO application [$coAppName] at "$coAppFilePath
& $mageExe -New Deployment -t "$coAppFilePath" -n "$coAppName" -v $version -p msil -appm $appManifestFilePath -ip true -i true -um true -pub $publisher -pu "$coAppFilePathServer" -appc $appManifestRelativePath -a sha256RSA
Write-Host "Updating minimum version to force auto-update"
& $mageExe -Update $coAppFilePath -mv $version -pub $publisher -a sha256RSA
Write-Host "Changing expiration max age => before application startup (hacking xml) of "$coAppFilePath
$content = Get-Content $coAppFilePath
$content -replace "<expiration maximumAge=`"0`" unit=`"days`" />", "<beforeApplicationStartup />" | set-content $coAppFilePath
Write-Host "Signing CO application [$coAppName] ..."
& $mageExe -Sign "$coAppFilePath" -cf $certFilePath -pwd $certPassword
Write-Host "Copying binaries from "$binariesFolderPath
Write-Host "to destination "$packageDestinationPath
### Remove any existing files from the package destination folder
Remove-Item $packageDestinationPath -Recurse -ErrorAction SilentlyContinue
### Ensure target directory exists in order not to fail the copy
New-Item $packageDestinationPath -ItemType directory > $null
### Copy binaries to destination folder
Copy-Item $binariesFolderPath"/*" $packageDestinationPath -recurse -Force > $null
Copy-Item $coAppFilePath $destinationPath -Force > $null
Write-Host "Building clickonce application script completed."
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "1b7909be-4870-4f81-8957-8357b9342c0f",
"Name": "ClickOnce - Create from deployed package",
"Description": "Create binaries manifest & CO application and sign them with given code sign certificate ... using mage.exe.",
"Version": 28,
"ExportedAt": "2016-09-15T06:53:27.970+00:00",
"ActionType": "Octopus.Script",
"Author": "Grendizr",
"Parameters": [
{
"Name": "DeployStepName",
"Label": "Deploy step to read binaries from",
"HelpText": "Name of the previous step used to deploy binaries that will be packed in CO package",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "StepName"
}
},
{
"Name": "DestinationPath",
"Label": "Path to the directory where to deploy the ClickOnce package",
"HelpText": "Path to the target directory for the ClickOnce package. This will contain the created *.application file and the \"Application Files\" folder",
"DefaultValue": "\\\\MyServer\\MyClickOnceRepo\\#{Octopus.Project.Name}\\#{Octopus.Environment.Name}",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "ExeFileName",
"Label": "Name of the target executable file",
"HelpText": "Name of the executable file of the application to pack",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "Publisher",
"Label": "Publisher name",
"HelpText": "Publisher name to use when creating the CO package",
"DefaultValue": "MyCompany",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SignCertFilePath",
"Label": "Path to the certification file",
"HelpText": "Path to the certification pfx file",
"DefaultValue": "\\\\MyServer\\Auth\\cert\\my-cert.pfx",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SignCertPassword",
"Label": "Password of the certification file",
"HelpText": null,
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "Sensitive"
}
},
{
"Name": "MageExePath",
"Label": "Path to mage.exe",
"HelpText": "Path to mage.exe which is used to update manifest and .application files and sign them.",
"DefaultValue": "\\\\MyServer\\Tools\\Octopus\\Tentacles\\mage.exe",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "IconFile",
"Label": "Icon filename",
"HelpText": "Name of icon file in the package, eg. ApplicationIcon.ico",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "DisplayName",
"Label": "Application display name",
"HelpText": "Name which appears in the Start Menu",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.ScriptBody": "Write-Host \"Building clickonce application ...\"\n\nfunction Validate-Parameter([REF]$f, $name, $value) {\n if (!$value) {\n throw ('Missing required value for parameter ''{0}''.' -f $name)\n }\n \n $f.Value = $value\n Write-Host \"Parameters [$name] has been initialized with : [$value]\"\n}\n\n### Parameters\n$deployStepName = $null\n$appName = $null\n$exeFileName = $null\n$destinationPath = $null\n$certFilePath = $null\n$certPassword = $null\n$publisher = $null\n$mageExe = $null\n$version = $null\n$binariesFolderPath = $null\n$coAppName = $null\n$iconFile = $null\n\nValidate-Parameter ([REF]$deployStepName) 'Deploy step name to read binaries from' $OctopusParameters['DeployStepName']\nValidate-Parameter ([REF]$appName) 'Project name' $OctopusParameters['Octopus.Project.Name']\nValidate-Parameter ([REF]$coAppName) 'Application display name' $OctopusParameters['DisplayName']\n\nValidate-Parameter ([REF]$exeFileName) 'Executable file name' $OctopusParameters['ExeFileName']\nValidate-Parameter ([REF]$destinationPath) 'Path to the directory where to deploy the ClickOnce package' $OctopusParameters['DestinationPath']\nValidate-Parameter ([REF]$certFilePath) 'Path to the certification file' $OctopusParameters['SignCertFilePath']\nValidate-Parameter ([REF]$certPassword) 'Password of the certification file' $OctopusParameters['SignCertPassword']\nValidate-Parameter ([REF]$publisher) 'Publisher name' $OctopusParameters['Publisher']\nValidate-Parameter ([REF]$mageExe) 'Path to the mage.exe' $OctopusParameters['MageExePath']\nValidate-Parameter ([REF]$iconFile) 'Icon file' $OctopusParameters['IconFile']\n\n### end of parameters\n\nValidate-Parameter ([REF]$version) 'Version number (from release)' $OctopusParameters['Octopus.Release.Number']\n\n$binariesFolderParameter = -join(\"Octopus.Action[\",$deployStepName,\"].Output.Package.InstallationDirectoryPath\")\nWrite-Host \"Trying to get Installation folder parameter value for : [$binariesFolderParameter]\"\n\n$binariesFolderPath = $OctopusParameters[$binariesFolderParameter]\nif(!$binariesFolderPath){\n throw ('Unable to retrieve binaries path from previous step execution for step with name ''{0}''.' -f $deployStepName)\n}\n\n$appVersionAndNumber = -join($appName, \"_\", $version)\n$packageDestinationSubDirectory = -join (\"Application_Files/\", $appVersionAndNumber)\n$packageDestinationPath = -join ($destinationPath, \"/\", $packageDestinationSubDirectory) \n$appManifestRelativePath = -join (\"Application_Files/\",$appVersionAndNumber, \"/\", $exeFileName, \".manifest\")\n$appManifestFilePath = -join ($binariesFolderPath, \"/\", $exeFileName, \".manifest\")\n\n$coAppFilePath = -join($binariesFolderPath, \"\\\", $appName, \".application\")\n$coAppFilePathServer = -join($destinationPath, \"\\\", $appName, \".application\")\n\n### Create Application manifest\nWrite-Host \"Creating application manifest at \"$appManifestFilePath\n& $mageExe -New Application -t \"$appManifestFilePath\" -n \"$coAppName\" -v $version -p msil -fd \"$binariesFolderPath\" -tr FullTrust -a sha256RSA -if $iconFile\nWrite-Host \"Signing application manifest ...\"\n& $mageExe -Sign \"$appManifestFilePath\" -cf $certFilePath -pwd $certPassword\n\n### Create Deployment application\nWrite-Host \"Creating CO application [$coAppName] at \"$coAppFilePath\n& $mageExe -New Deployment -t \"$coAppFilePath\" -n \"$coAppName\" -v $version -p msil -appm $appManifestFilePath -ip true -i true -um true -pub $publisher -pu \"$coAppFilePathServer\" -appc $appManifestRelativePath -a sha256RSA\n\nWrite-Host \"Updating minimum version to force auto-update\"\n& $mageExe -Update $coAppFilePath -mv $version -pub $publisher -a sha256RSA\n\nWrite-Host \"Changing expiration max age => before application startup (hacking xml) of \"$coAppFilePath\n$content = Get-Content $coAppFilePath\n$content -replace \"<expiration maximumAge=`\"0`\" unit=`\"days`\" />\", \"<beforeApplicationStartup />\" | set-content $coAppFilePath\n\nWrite-Host \"Signing CO application [$coAppName] ...\"\n& $mageExe -Sign \"$coAppFilePath\" -cf $certFilePath -pwd $certPassword\n\n\nWrite-Host \"Copying binaries from \"$binariesFolderPath\nWrite-Host \"to destination \"$packageDestinationPath\n\n### Remove any existing files from the package destination folder\nRemove-Item $packageDestinationPath -Recurse -ErrorAction SilentlyContinue\n\n### Ensure target directory exists in order not to fail the copy\nNew-Item $packageDestinationPath -ItemType directory > $null\n\n### Copy binaries to destination folder\nCopy-Item $binariesFolderPath\"/*\" $packageDestinationPath -recurse -Force > $null\nCopy-Item $coAppFilePath $destinationPath -Force > $null\n\nWrite-Host \"Building clickonce application script completed.\"\n",
"Octopus.Action.Script.ScriptFileName": null,
"Octopus.Action.Package.NuGetFeedId": null,
"Octopus.Action.Package.NuGetPackageId": null
},
"Category": "ClickOnce",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/clickonce-from-deployed-package.json",
"Website": "/step-templates/1b7909be-4870-4f81-8957-8357b9342c0f",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Thursday, September 15, 2016