Powershell script as executable giving "wrong" giving return code -1 in Bamboo

3.3k views Asked by At

I have some simple PowerShell scripts that I have made into executables with Bamboo, by adding a path such as C:\build-scripts\bamboo-build-scripts\clear-directory.ps1 as the path for the executable for a new capacity in Bamboo.

However, several scripts, even ones that execute correctly in the build process when they are made as a "script" process, will fail when they are run in this way, by giving the return code -1. Here is an example from the build log:

simple  18-Jun-2015 13:14:06    Failing task since return code of [C:\build-scripts\bamboo-build-scripts\update-checker.ps1 GeometryClassLibrary] was -1 while expected 0

This occurs with multiple PowerShell scripts, and causes the rest of the build procecss to fail.

Here is an example PowerShell script, which I execute by passing the argument to a directory:

Remove-Item $args[0] -Force -Recurse
[io.directory]::CreateDirectory($args[0])

Is there something I need to add to the PowerShell script to make it exit with the correct code? Or am I not defining the executable properly in Bamboo?

2

There are 2 answers

4
briantist On

You can try a few things:

Execution Policy

It could be that the scripts aren't executing at all, perhaps because the policy is set not to execute them. Try invoking powershell.exe directly:

powershell.exe -ExecutionPolicy Bypass -File C:\build-scripts\bamboo-build-scripts\clear-directory.ps1

(see this answer for more switches)

Piping

NSClient++ used to have issues with invoking checks written in powershell due to problems with the exit code. Their solution looked like this:

cmd /c echo C:\build-scripts\bamboo-build-scripts\clear-directory.ps1; exit $LastExitCode | powershell.exe -Command -

Maybe that will give a more accurate code.

0
dgates82 On

I would recommend a few changes to your scripts to give better output to the Bamboo logs while they run to help narrow down the problem.

Put some simple output lines in so that you know the powershell script ran, and how far it made it

Write-Host "Running script blah"
Remove-Item $args[0] -Force -Recurse
Write-Host "Directories removed"
[io.directory]::CreateDirectory($args[0])
Write-Host "Directory $args[0] created"

Second, wrap everything in a try catch and write any exceptions

try {
Remove-Item $args[0] -Force -Recurse
[io.directory]::CreateDirectory($args[0])
{
catch {
Write-Host $_.Exception.GetType().FullName, $_.Exception.Message
}

As far as your script, you didn't post how you are calling it from Bamboo. I do most of my scripts inline, but I do have a couple that I've saved as .ps1 and uploaded with the repository and call with arguments. I'm not sure if the args[x] method would work for pulling args, but the suggested method that I followed was declaring params.

param(
[string]$SomeString
)
Write-Host "Param value: $SomeString"

Then call it from Bamboo as

SomeScript.ps1 -SomeString %BAMBOO_SOME_VARIABLE%