2017-10-02 7 views
3

私はCAKE 0.22.0とTeamCity 9.xを使用します。TeamCityの概要に表示されないCAKEタスクのエラー

TeamCityには、build.ps1を呼び出すビルドステップが1つしかありません。次に、build.cakeを実行します。 build.ps1

、私は次のように追加しました:

trap 
{ 
    write-output $_ 
    ##teamcity[buildStatus status='FAILURE' ] 
    exit 1 
} 

理由はa known PowerShell bugを回避することである(場合、それはいけない、すなわち、-fileでスクリプトを実行すると、0の終了コードを返します)。

例外が build.ps1内スローされ

は、チームシティーは正しくビルドの失敗が表示されます。エラーがbuild.cake以内に発生した場合に

enter image description here

しかし、チームシティーは間違って、すべてが正常に実行されたと主張している:

enter image description here

「成功」ビルドの対応するビルドログを以下に示します。上のスクリーンショットは:あなたが見ることができるように

enter image description here

、エラーがbuild.cakeタスク内でスローされました。このエラーはbuild.ps1trap句では認識されないため、TeamCityはビルドの失敗を通知されませんでした。

私は(句はInformation(@"Some error message\n##teamcity[buildStatus status='FAILURE']]"に似たものを含みます))build.cakeにすべての私のタスクにOnError句を追加することを考えたが、これは重複したコードの恐ろしい量につながります。

build.ps1trap句に、build.cakeのタスク内でスローされたエラーが確実に捕捉されるようにする簡潔な方法はありますか?

+1

私たちの設定の下に

スクリーンショットを.ps1というの実行あなたは間違った木を吠えるかもしれません。 'trap'の修正はPowershellスクリプトが例外を投げている場合にのみ役立ちます。ケーキを使用する場合、PSスクリプトはケーキの実行可能ファイルを呼び出し、終了コードを返すだけです。Cakeは返します。 Cakeはタスクからスローされた例外を処理します。実際、あなたのビルドログには「プロセスがコード1で終了しました」というメッセージが表示されます。これは、PSスクリプトが正しいコードを返していると言いますが、ビルドステップはエラーを示すために終了コードを使用していません。 TeamCityのビルドステップを確認したいと思います。 – heavyd

+0

@heavydご返信ありがとうございます!私のTeamCityビルドステップでは、パラメータ ''標準エラー出力形式は ''警告''に設定されています。これは、TeamCityがビルドを成功と表示する理由を説明できますか? –

+1

申し訳ありませんが、元のコメントに間違いがあります。設定は個々のビルドステップではなく、ビルド構成の「失敗条件」セクションにあります。 [こちらのドキュメントをご覧ください](https://confluence.jetbrains.com/display/TCD10/Build+Failure+Conditions)。ビルドプロセスの終了コードがゼロでないことを確認します。 – heavyd

答えて

3

Cake自体はビルドステップの設定でTeamCity上にビルドされ、Cakeスクリプトがビルドの失敗を報告するとビルドに失敗します。

ランナータイプ: PowerShellの

ステップ名: 3:以前のすべてのステップが正常に

PowerShellのバージョンを終了した場合:ビルドケーキ

ステップを実行します。0

プラットフォーム:オート

版:デスクトップ

フォーマットの標準エラー出力として:警告

作業ディレクトリ:

スクリプト:ソースコード

スクリプトソース:

.\build.ps1 
exit $LASTEXITCODE 

スクリプトの実行モード:私は思う外部ファイルから

enter image description here

+0

あなたの返事ありがとう!私はあなたの提案を受け入れ、次回のビルドに失敗したときに報告します - 失敗が正しく表示されたら、私はあなたの答えを受け入れます。 :-) –

+1

よく分かり次第ビルド;) – devlead

+0

こんにちは、残念ながら、TeamCityは失敗したビルドが成功したと主張し続けます。しかし、* stderrの出力形式を*から "warning"から "error"に変更した後は、私が望む結果を達成することができました。 TeamCityのドキュメンテーション(https://confluence.jetbrains.com/display/TCD9/PowerShell)によると、**「ビルドランナーによって「エラーメッセージが記録された場合にビルドに失敗する」(ビルドの失敗条件を参照)には、デフォルトエラー出力セレクタの警告からエラーへの設定」** TeamCityのドキュメントに合わせて回答を更新した場合は、再承諾します:-)ありがとうございます! –

関連する問題