我有一个简单的 Windows 批处理命令(robocopy),它返回零错误,但在 Jenkins 中总是被标记为失败。我想知道为什么?
D:\Jenkins\jobs\Jenkins Config Backup\workspace>exit 1 Build step 'Execute Windows batch command' 将构建标记为失败 Finished: FAILURE
我有一个简单的 Windows 批处理命令(robocopy),它返回零错误,但在 Jenkins 中总是被标记为失败。我想知道为什么?
D:\Jenkins\jobs\Jenkins Config Backup\workspace>exit 1 Build step 'Execute Windows batch command' 将构建标记为失败 Finished: FAILURE
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”而不退出。
当批处理脚本的现有代码不为 0 时,Jenkins 将构建标记为失败。如果 robocopy 是脚本中的最后一个命令,则将采用 robocopy 退出代码。
Robocopy 不遵守标准,即 0 以外的退出代码表示构建失败。您需要评估 robocopy 退出代码并以exit 0
或exit 1
取决于 robocopy 的成功结束脚本。
为詹金斯管道更新这个问题 - 这对我有用:
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")
}
}
或者,您可能想查看文件操作插件