powershellteamcity

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?


Solution

  • 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