Jenkins - simply robocopy in Jenkins finishes marks build with failure

天涯浪子 提交于 2019-12-03 10:29:40

robocopy returns a bit map

For details see here: http://ss64.com/nt/robocopy-exit.html

In summary: All exit codes up to '3' are fine.

This is the batch file code I usually use:

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

You could also do a "goto" and not exit.

Jenkins marks a build as failed when the exist code of a batch script is not 0. If robocopy is the last command in your script, the robocopy exit code will be taken.

Robocopy does not adhere to the standard that an exit code other then 0 means a failed build. You need to evaluate the robocopy exit code and end your script with exit 0 or exit 1 depending on the success of robocopy.

Have a look at the robocopy exit codes.

Updating this question for jenkins pipelines - this works for me:

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

Alternatively, you may want to look at the File Operations Plugin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!