22

我有一个简单的 Windows 批处理命令(robocopy),它返回零错误,但在 Jenkins 中总是被标记为失败。我想知道为什么?

D:\Jenkins\jobs\Jenkins Config Backup\workspace>exit 1 Build step 'Execute Windows batch command' 将构建标记为失败 Finished: FAILURE

4

3 回答 3

27

robocopy 返回位图

有关详细信息,请参见此处:http ://ss64.com/nt/robocopy-exit.html

总结:直到“3”的所有退出代码都可以。

这是我通常使用的批处理文件代码:

set SOURCE= ...
set DESTINATION= ...

robocopy /MIR %SOURCE% %DESTINATION%
@echo robocopy exit code: %ERRORLEVEL%
@if %ERRORLEVEL% GTR 3 ( echo robocopy ERROR )
@if %ERRORLEVEL% GTR 3 ( exit %ERRORLEVEL% )
@set ERRORLEVEL=0

您也可以执行“goto”而不退出。

于 2014-11-27T08:27:34.573 回答
14

当批处理脚本的现有代码不为 0 时,Jenkins 将构建标记为失败。如果 robocopy 是脚本中的最后一个命令,则将采用 robocopy 退出代码。

Robocopy 不遵守标准,即 0 以外的退出代码表示构建失败。您需要评估 robocopy 退出代码并以exit 0exit 1取决于 robocopy 的成功结束脚本。

看看robocopy 退出代码

于 2013-10-09T14:45:17.307 回答
8

为詹金斯管道更新这个问题 - 这对我有用:

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

或者,您可能想查看文件操作插件

于 2017-09-01T15:26:34.153 回答