我正在使用Gitlab CI,所以一直在研究一个相当复杂的.gitlab-ci.yml
文件。该文件有一个after_script
部分,当主要任务完成时运行,或者主要任务以某种方式失败。问题:我需要根据主任务是成功还是失败进行不同的清理,但我找不到任何指示主任务结果的Gitlab CI variable。
在after_script
部分,我如何判断主要任务是成功还是失败?
我没有确定after_script
中任务是成功还是失败,而是建议定义另一个阶段,并使用when语法,您可以使用when: on_failure
或when: on_success
。
文档中的示例:
stages:
- build
- cleanup_build
- test
- deploy
- cleanup
build_job:
stage: build
script:
- make build
cleanup_build_job:
stage: cleanup_build
script:
- cleanup build when failed
when: on_failure
test_job:
stage: test
script:
- make test
deploy_job:
stage: deploy
script:
- make deploy
when: manual
cleanup_job:
stage: cleanup
script:
- cleanup after jobs
when: always
接受的答案可能适用于大多数情况,但它不回答原始问题,只有在每个阶段只有一个工作时才会有效。
注意:目前有一个功能请求打开(issues/3116)来处理on_failure
中的on_success
和after_script
。
可以使用变量将作业状态传递给after_script
脚本,但这也有一个功能请求(issues/1926)打开,以便能够在before_script
,script
和after_script
之间共享变量。
一种解决方法是写入将在after_script
块期间访问的临时文件。
test_job:
stage: test
before_script:
- echo "FAIL" > .job_status
script:
- exit 1
- echo "SUCCESS" > .job_status
after_script:
- echo "$(cat .job_status)"