I'm using Gitlab CI, and so have been working on a fairly complex .gitlab-ci.yml
file. The file has an after_script
section which runs when the main task is complete, or the main task has failed somehow. Problem: I need to do different cleanup based on whether the main task succeeded or failed, but I can't find any Gitlab CI variable that indicates the result of the main task.
How can I tell, inside the after_script
section, whether the main task has succeeded or failed?
Instead of determining whether or not the task succeeded or failed in the after_script
, I would suggest defining another stage, and using the when syntax, where you can use when: on_failure
or when: on_success
.
Example from the documentation:
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
The accepted answer may apply to most situations, but it doesn't answer the original question and will only work if you only have one job per stage.
Note: There currently a feature request opened (issues/3116) to handle on_failure
and on_success
in after_script
.
It could be possible to use variables to pass the job status to an after_script
script, but this also has a feature request (issues/1926) opened to be able to share variables between before_script
, script
and after_script
.
One workaround will be to write to a temporary file that will be accessed during the after_script
block.
test_job:
stage: test
before_script:
- echo "FAIL" > .job_status
script:
- exit 1
- echo "SUCCESS" > .job_status
after_script:
- echo "$(cat .job_status)"