Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PowerShell exit code is always 0 in TeamCity 8 build step

We are using TeamCity Enterprise 8.0.5.

I have a TeamCity build step which runs a PowerShell (.ps1) script, which looks like this:

try
{
    # Break something
    $a = 1 / 0
}
catch
{
    Exit 1
}

Despite this, in the build log, the step succeeds and exits with code 0.

[10:02:18][Step 2/3] Process exited with code 0

I want the step to fail if there are any failures in the script. How can I make this happen?

like image 292
tom redfern Avatar asked Sep 16 '15 09:09

tom redfern


Video Answer


1 Answers

I have just discovered this post:

PowerShell runner - script fails but the build succeeds - 'Process exited with code 0'

There is a bug in TeamCity which means that non-zero PowerShell return codes are not picked up.

The solution suggested is to create a build failure condition on detection of certain text output into the build log.

However, my solution involved something different.

In the catch block you only have to use the Write-Error cmdlet:

catch
{
    Write-Error -Exception $_.Exception
}

Then you must ensure that two things are set correctly in TeamCity:

Firstly, the build step Error Output should be set to error, and not warning:

Enter image description here

Secondly, in the build failure conditions screen, make sure an error message is logged by build runner is checked:

Enter image description here

like image 126
tom redfern Avatar answered Sep 27 '22 21:09

tom redfern