エラーをゼロに返す単純なWindowsバッチコマンド(robocopy)がありますが、Jenkinsでは常に失敗としてマークされています。理由を知りたいのですが?
D:\ Jenkins\jobs\Jenkins Config Backup \ワークスペース>終了1ビルドステップ「Windowsバッチコマンドの実行」ビルドを失敗としてマーク終了:失敗
robocopyはビットマップを返します
詳細については、こちらを参照してください: http://ss64.com/nt/robocopy-exit.html
要約すると、「3」までのすべての終了コードで問題ありません。
これは私が通常使用するバッチファイルコードです:
set SOURCE= ...
set DESTINATION= ...
robocopy /MIR /LOG:example.robocopy.log.txt %SOURCE% %DESTINATION%
@echo robocopy exit code: %ERRORLEVEL%
@if %ERRORLEVEL% GTR 3 ( echo robocopy ERROR )
@if %ERRORLEVEL% GTR 3 ( exit %ERRORLEVEL% )
@set ERRORLEVEL=0
「goto」を実行して終了しないこともできます。
バッチスクリプトの既存のコードが0でない場合、Jenkinsはビルドを失敗としてマークします。robocopyがスクリプトの最後のコマンドである場合、robocopyの終了コードが使用されます。
Robocopyは、0以外の終了コードがビルドの失敗を意味するという標準に準拠していません。 robocopyの終了コードを評価し、robocopyの成功に応じて、スクリプトをexit 0
またはexit 1
で終了する必要があります。
robocopy終了コード を見てください。
Jenkinsパイプラインのこの質問を更新する-これは私にとってはうまくいきます:
def robocopy(cmd)
{
// robocopy uses non-zero exit code even on success, status below 3 is fine
def status = bat returnStatus: true, script: "ROBOCOPY ${cmd}"
println "ROBOCOPY returned ${status}"
if (status < 0 || status > 3)
{
error("ROBOCOPY failed")
}
}
または、 ファイル操作プラグイン を確認することもできます。