如何阻止robocopy退出构建?

Mal*_*eki 5 gitlab-ci gitlab-ci-runner

我正在使用Gitlab 8.15.4和该版本的最新跑步者.由于我们的防火墙,我无法运行npm install,因此我将节点模块从另一个位置复制到build文件夹中.跑步者在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   
Run Code Online (Sandbox Code Playgroud)

使用错误导致构建失败:

错误:作业失败:退出状态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   
Run Code Online (Sandbox Code Playgroud)

(CopyAssets.bat)

robocopy S:\Storage\GitLab-Runner\Assets\node_modules .\node_modules /s
set/A errlev="%ERRORLEVEL% & 24"
exit/B %errlev%     
Run Code Online (Sandbox Code Playgroud)

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

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

Jam*_*ron 10

您和许多其他人在CI部署中遇到了robocopy的问题.由于我发现这个问题在一段时间内没有得到答复,而其他答案与robocopy之后继续编写脚本不兼容,我想在此处分享解决方案.

如果您希望robocopy忽略8下的所有返回代码(> = 8表示复制错误),则需要一个直接跟随命令的条件并更改错误级别.

(robocopy src dst) ^& IF %ERRORLEVEL% LSS 8 SET ERRORLEVEL = 0
Run Code Online (Sandbox Code Playgroud)


Mar*_*hoi 6

对于 powershell 用户:

(robocopy src dst) ; if ($lastexitcode -lt 8) { $global:LASTEXITCODE = $null }
Run Code Online (Sandbox Code Playgroud)

或者

cmd /c (robocopy src dst) ^& IF %ERRORLEVEL% LEQ 1 exit 0
Run Code Online (Sandbox Code Playgroud)

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