2017-11-07 4 views
2

Ich habe ein Powershell-Skript, das Invoke-MsBuild auf TeamCity ausführt. Während eines Builds sah ich ein "WARNING: FAILED to Build" eines der Projekte. Teamcity am Ende sagte jedoch, dass der Build erfolgreich war. Wie kann ich TC zwingen, mit einem Fehlercode zu beenden oder zumindest den Build-Fehler zu melden. Hier ist ein Teil des Build-Skripts.Team City Build fehlgeschlagen nicht zurück Fehlercode

Write-Host "Attempting to build $SolutionPath" 
$buildSucceeded = Invoke-MsBuild -Path $SolutionPath -MsBuildParameters $MSBuildParams -BuildLogDirectoryPath "$BuildPath\Logs" -KeepBuildLogOnSuccessfulBuilds 

Antwort

1

Teamcity ist nicht sehr gut zu fangen und Ausnahmen von Powershell geworfen berichten. Alle meine Powershell-Skripts sind mit etwas eingewickelt wie

Try { 
    Write-Host "Attempting to build $SolutionPath" 
    $buildSucceeded = Invoke-MsBuild -Path $SolutionPath -MsBuildParameters $MSBuildParams -BuildLogDirectoryPath "$BuildPath\Logs" -KeepBuildLogOnSuccessfulBuilds 
} 
Catch [Exception] { 
    Write-Error ('Failed: ' + $_.Exception.Message) 
    Exit 1 
} 

, die durch Austritt aus Nicht-Null für das Problem bildet.

Ich gebe zu, das ist ziemlich umständlich und etwas unbefriedigend. Ich vermute, dass etwas gewonnen werden kann, indem man den allgemeinen Parameter -ErrorAction verwendet, den die meisten (alle?) Powershell-Cmdlets unterstützen. (Nachdem ich das gesagt habe, bin ich mir nicht sicher, Invoke-MsBuild -ErrorAction Stop funktioniert.)

1

Sie können $ErrorActionPreference = "Stop" am Anfang Ihres Powershell-Skript hinzufügen, dies sollte Skriptausführung bei Fehler beenden und mit nicht-Null-Code beenden. Die Standardeinstellung $ErrorActionPreference ist Continue. Dies ist möglicherweise der Grund, warum Sie dieses Verhalten sehen. Sie können mehr lesen here.

Verwandte Themen