web-dev-qa-db-ja.com

Jenkins-Jenkinsでのrobocopyは、マークのビルドを失敗で終了します

エラーをゼロに返す単純なWindowsバッチコマンド(robocopy)がありますが、Jenkinsでは常に失敗としてマークされています。理由を知りたいのですが?

D:\ Jenkins\jobs\Jenkins Config Backup \ワークスペース>終了1ビルドステップ「Windowsバッチコマンドの実行」ビルドを失敗としてマーク終了:失敗

19
user2860244

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」を実行して終了しないこともできます。

20
Robert Fey

バッチスクリプトの既存のコードが0でない場合、Jenkinsはビルドを失敗としてマークします。robocopyがスクリプトの最後のコマンドである場合、robocopyの終了コードが使用されます。

Robocopyは、0以外の終了コードがビルドの失敗を意味するという標準に準拠していません。 robocopyの終了コードを評価し、robocopyの成功に応じて、スクリプトをexit 0またはexit 1で終了する必要があります。

robocopy終了コード を見てください。

12
Peter Schuetze

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")
        }
    }

または、 ファイル操作プラグイン を確認することもできます。

6
GaspardP