Seb*_*asH 19 bash continuous-integration exit-code gitlab gitlab-ci
我正在尝试设置一个 GitLab 管道,以便某些exit_codes对于我正在执行的脚本来说是可以的。我尝试过 shell 和 ruby 脚本,但两者似乎都有相同的行为。
test_job:
stage: build
image: ruby:3.0
script:
- chmod +x ci/wrap.sh
- ./ci/wrap.sh
allow_failure:
exit_codes:
- 64
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我只是执行脚本,仅此而已,我的期望是,最后执行的脚本用作作业的退出状态。
在脚本中,我只调用exit 64,在这种情况下这应该是“允许的失败”,但是管道日志表示作业由于退出代码 1 而失败:
如何让 GitLab 接受此(或 ruby)脚本的退出代码作为作业退出代码?
Seb*_*asH 20
我找到了解决这个问题的方法。显然,Gitlab Runner 使用该-e标志,这意味着任何非零退出代码都将取消该作业。可以使用 进行更新set +e,但您仍然需要捕获作业的实际退出代码。
$?在配置的两个不同行中使用是行不通的,因为 Gitlab 会echo在它们之间进行调用。
所以需要直接捕获退出代码,例如:
script:
- set +e
- ruby "ci/example.rb" || EXIT_CODE=$?
- exit $EXIT_CODE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22746 次 |
| 最近记录: |