【问题标题】:Jenkins - simply robocopy in Jenkins finishes marks build with failureJenkins - 简单地 Jenkins 中的 robocopy 完成标记构建失败
【发布时间】:2013-10-15 23:28:33
【问题描述】:

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

D:\Jenkins\jobs\Jenkins 配置备份\workspace>exit 1 构建步骤“执行 Windows 批处理命令”将构建标记为失败 完成:失败

【问题讨论】:

    标签: batch-file jenkins exit-code robocopy


    【解决方案1】:

    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”而不退出。

    【讨论】:

      【解决方案2】:

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

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

      看看robocopy exit codes

      【讨论】:

      • 我在我的 robocopy 脚本末尾使用了这个,它返回了一个好的构建 - 如果 ERRORLEVEL 1 设置 ERRORLEVEL=0 谢谢!
      • 您的解决方案相当于将exit 0放在脚本末尾。由于您使用的 if 语句,如果 ERRORLEVEL 为 1 或更大,则该语句为真。您应该在其上方有以下声明if ERRORLEVEL 4 exit 1
      【解决方案3】:

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

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

      或者,您可能想查看File Operations Plugin

      【讨论】:

        猜你喜欢
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        相关资源
        最近更新 更多