We are deploying a service. I want to store the current path of the service executable in a variable with the PreDeploy script and use it in the DeployFailed script. I’m new to Powershell and I have no idea how you’re really calling each script, so will a variable declared & set in PreDeploy be visible to DeployFailed? If not, how would I go about doing this. Thanks.
Hi Jeff,
No data is kept between calling each of the deployment scripts (though this is a useful feature we will add).
For now the simplest way to do this would be to write the values to a file and read them from deployfailed.
Regards,
Paul Stovell
Octopus Deploy
W: octopusdeploy.com | T: @octopusdeploy
I did a little more research and learned about the PowerShell global variable scope.
I put this code at the start of the PostDeploy script:
$service = Get-Service $ServiceName -ErrorAction SilentlyContinue
$global:OldRCEServicePath = $service.PathName
And this in the DeployFailed script and it seemed to work:
$service = Get-Service $ServiceName -ErrorAction SilentlyContinue
if ( $service.PathName -eq $global:OldRCEServicePath)
{
write-output "Deployment was halted before rollback was needed."
}
else
{
write-output "Rolling back deployment to"
write-output "Old RCE Service Path: " $global:OldRCEServicePath
# more code
}
I’ve run into a similar scenario where I need some data passed from Deploy to DeployFailed. However using the global scope did not work, anything I place there is null in DeployFailed.
Hi,
You can do this in Deploy.ps1:
Set-OctopusVariable -Name "Test" -Value "World!"
Then in DeployFailed.ps1, you can access it as $Test
or $OctopusParameters["Test"]
.
Paul
Am I missing something? I am following your recommendation above and am unable to pass variable between scripts, here is my workflow:
Predeploy.ps1:
Set-OctopusVariable -Name “Test2” -Value “World!”
Deploy.ps1:
write-host $OctopusParameters[“Test2”]
Nothing is being output in Deploy.ps1. Your help and insight would be much appreciated.
Sorry, I didn’t mean to close this. And sorry for not replying sooner. Those scripts are in the same NuGet package I assume? This should work.
I’ll look into why this doesn’t work and will make sure it works in Octopus 2.0. Thanks for the update.
Paul