私は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
以内に発生した場合に
しかし、チームシティーは間違って、すべてが正常に実行されたと主張している:
「成功」ビルドの対応するビルドログを以下に示します。上のスクリーンショットは:あなたが見ることができるように
、エラーがbuild.cake
タスク内でスローされました。このエラーはbuild.ps1
のtrap
句では認識されないため、TeamCityはビルドの失敗を通知されませんでした。
私は(句はInformation(@"Some error message\n##teamcity[buildStatus status='FAILURE']]"
に似たものを含みます))build.cake
にすべての私のタスクにOnError
句を追加することを考えたが、これは重複したコードの恐ろしい量につながります。
build.ps1
のtrap
句に、build.cake
のタスク内でスローされたエラーが確実に捕捉されるようにする簡潔な方法はありますか?
私たちの設定の下に
スクリーンショットを.ps1というの実行あなたは間違った木を吠えるかもしれません。 'trap'の修正はPowershellスクリプトが例外を投げている場合にのみ役立ちます。ケーキを使用する場合、PSスクリプトはケーキの実行可能ファイルを呼び出し、終了コードを返すだけです。Cakeは返します。 Cakeはタスクからスローされた例外を処理します。実際、あなたのビルドログには「プロセスがコード1で終了しました」というメッセージが表示されます。これは、PSスクリプトが正しいコードを返していると言いますが、ビルドステップはエラーを示すために終了コードを使用していません。 TeamCityのビルドステップを確認したいと思います。 – heavyd
@heavydご返信ありがとうございます!私のTeamCityビルドステップでは、パラメータ ''標準エラー出力形式は ''警告''に設定されています。これは、TeamCityがビルドを成功と表示する理由を説明できますか? –
申し訳ありませんが、元のコメントに間違いがあります。設定は個々のビルドステップではなく、ビルド構成の「失敗条件」セクションにあります。 [こちらのドキュメントをご覧ください](https://confluence.jetbrains.com/display/TCD10/Build+Failure+Conditions)。ビルドプロセスの終了コードがゼロでないことを確認します。 – heavyd