簡體   English   中英

TeamCity 8 構建步驟中的 PowerShell 退出代碼始終為 0

[英]PowerShell exit code is always 0 in TeamCity 8 build step

我們正在使用 TeamCity Enterprise 8.0.5。

我有一個運行 PowerShell (.ps1) 腳本的 TeamCity 構建步驟,如下所示:

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

盡管如此,在構建日志中,該步驟成功並以代碼 0 退出。

[10:02:18][步驟 2/3] 進程退出,代碼為 0

如果腳本中有任何失敗,我希望該步驟失敗。 我怎樣才能做到這一點?

我剛剛發現了這個帖子:

PowerShell 運行程序 - 腳本失敗但構建成功 - '進程退出,代碼為 0'

TeamCity 中存在一個錯誤,這意味着不會拾取非零的 PowerShell 返回代碼。

建議的解決方案是在檢測到某些文本輸出到構建日志時創建構建失敗條件。

但是,我的解決方案涉及不同的東西。

在 catch 塊中,您只需使用Write-Error cmdlet:

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

然后您必須確保在 TeamCity 中正確設置了兩件事:

首先,構建步驟Error Output應該設置為error ,而不是warning

在此處輸入圖片說明

其次,在構建失敗條件屏幕中,確保檢查構建運行器記錄的錯誤消息

在此處輸入圖片說明

假設您正在使用psake,並且您的目標是在構建腳本失敗時使構建失敗。 導入 psake 模塊並調用構建腳本的腳本不會失敗,因此 TeamCity 將其視為成功構建。

將此代碼添加到您的第一個腳本中,如果第二個腳本失敗,則構建失敗。

Import-Module .\psake\psake.psm1

Invoke-Psake .\build-steps.ps1 @args

if($psake.build_success -eq $false){
    Write-Host "There was an error running psake script"
    exit 1
}
Remove-Module psake

不要在if語句之前刪除模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM