【问题标题】:How to stop robocopy from exiting the build?如何阻止 robocopy 退出构建?
【发布时间】:2017-06-12 16:53:42
【问题描述】:

我正在使用 Gitlab 8.15.4 和该版本的最新运行程序。由于我们的防火墙,我无法运行 npm install,所以我将节点模块从另一个位置复制到构建文件夹中。跑步者在 Windows 7 机器上。

我的第一次尝试: (.gitlab-ci.yml)

before_script:
- robocopy S:\Storage\GitLab-Runner\Assets\node_modules .\node_modules /s
build:
  stage: build
  script:
    - echo starting
    - gulp
    - echo done
  artifacts:
    paths:
    - deploy.zip   

构建失败并出现错误:

错误:作业失败:退出状态 1

我的第二次(第 n 次)尝试将 robocopy 放入脚本文件并从那里执行:

(.gitlab-ci.yml)

before_script:
- S:\Storage\GitLab-Runner\Scripts\CopyAssets.bat
build:
  stage: build
  script:
    - echo starting
    - gulp
    - echo done
  artifacts:
    paths:
    - deploy.zip   

(CopyAssets.bat)

robocopy S:\Storage\GitLab-Runner\Assets\node_modules .\node_modules /s
set/A errlev="%ERRORLEVEL% & 24"
exit/B %errlev%     

通过但不执行任何其他步骤。

如何防止 RoboCopy 在构建完成后退出?

【问题讨论】:

    标签: gitlab-ci gitlab-ci-runner


    【解决方案1】:

    您和许多其他人在 CI 部署中遇到了 robocopy 的这个问题。由于我发现这个问题已经有一段时间没有答案了,并且其他答案与在 robocopy 之后继续执行脚本不兼容,我想在这里分享解决方案。

    如果你想让 robocopy 忽略 8 以下的所有返回码(>= 8 表示复制错误),你需要一个直接跟在命令后面并改变错误级别的条件。

    (robocopy src dst) ^& IF %ERRORLEVEL% LSS 8 SET ERRORLEVEL = 0
    

    【讨论】:

    • 使用 Windows Server 2008 和 gitlab-runner 10.4 成功测试
    • 它对我不起作用。我使用基于 Windows Server Core 2019 的 Docker 映像收到错误“表达式或语句中出现意外的令牌 '^'”。
    • 命令不是powershell,而是普通终端/cmd
    • 请记住,成功复制会返回退出代码 1。退出代码 2/4/8/10 是警告/错误。
    【解决方案2】:

    对于 powershell 用户:

    (robocopy src dst) ; if ($lastexitcode -lt 8) { $global:LASTEXITCODE = $null }
    

    cmd /c (robocopy src dst) ^& IF %ERRORLEVEL% LEQ 1 exit 0
    

    我已经使用 GitLab Runner powershell 在 GitLab 13.12 上进行了测试,效果很好。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 2012-03-10
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多