概要
when: on_failure を使います
ジョブごとに失敗した場合の挙動を指定したい場合は needs と組み合わせます
環境
- RaspberryPi4 8GRAM
- RaspberryPiOS 5.10.17 armv7l
- Gitlab Runner 14.5.0
サンプル .gitlab-ci.yml
cleanup_build_job が何かしらのジョブが失敗した場合にコールされるジョブになります
when: on_failure が指定されていることがわかります
stages:
- stage1
- cleanup
.echo1_script: &echo1_script
- "export MSG=hello"
- "echo ${MSG} >> msg.txt"
- "export MSG=HELLO"
.echo2_script: &echo2_script
- "hoge"
- "echo ${MSG} >> msg.txt"
cleanup_build_job:
stage: cleanup
script:
- "echo 'Succeed cleanup.' >> msg.txt"
when: on_failure
artifacts:
paths:
- msg.txt
echo:
stage: stage1
script:
- *echo1_script
- *echo2_script
artifacts:
paths:
- msg.txt
ジョブごとに失敗した場合の挙動を設定する場合
needs と組み合わせます
これを失敗した場合に実行するジョブごとに指定してあげることでそれぞれで失敗した場合の挙動を変えることができます
stages:
- stage1
- stage2
- cleanup
.echo1_script: &echo1_script
- "export MSG=hello"
- "echo ${MSG} >> msg.txt"
- "export MSG=HELLO"
.echo2_script: &echo2_script
- "hoge"
- "echo ${MSG} >> msg.txt"
cleanup_build_job_for_echo1:
stage: cleanup
script:
- "echo 'Succeed cleanup by echo1.' >> msg.txt"
when: on_failure
needs: ["echo1"]
artifacts:
paths:
- msg.txt
cleanup_build_job_for_echo2:
stage: cleanup
script:
- "echo 'Succeed cleanup by echo2.' >> msg.txt"
when: on_failure
needs: ["echo2"]
artifacts:
paths:
- msg.txt
echo1:
stage: stage1
script:
- *echo1_script
artifacts:
paths:
- msg.txt
echo2:
stage: stage2
script:
- *echo2_script
artifacts:
paths:
- msg.txt
ジョブの流れは以下のようになります
echo2 が失敗した場合には cleanup_build_job_for_echo2 だけが実行されています
echo2 も常に実行したい場合には
ただこの場合だと以下のように echo2 は実行されないので echo2 も常に実行したほしい場合には when: always を指定します
stages:
- stage1
- stage2
- cleanup
.echo1_script: &echo1_script
- "hoge"
- "export MSG=hello"
- "echo ${MSG} >> msg.txt"
- "export MSG=HELLO"
.echo2_script: &echo2_script
- "echo ${MSG} >> msg.txt"
cleanup_build_job_for_echo1:
stage: cleanup
script:
- "echo 'Succeed cleanup by echo1.' >> msg.txt"
when: on_failure
needs: ["echo1"]
artifacts:
paths:
- msg.txt
cleanup_build_job_for_echo2:
stage: cleanup
script:
- "echo 'Succeed cleanup by echo2.' >> msg.txt"
when: on_failure
needs: ["echo2"]
artifacts:
paths:
- msg.txt
echo1:
stage: stage1
script:
- *echo1_script
artifacts:
paths:
- msg.txt
echo2:
stage: stage2
script:
- *echo2_script
when: always
artifacts:
paths:
- msg.txt
こんな感じで echo1 が失敗しても echo2 が実行されていることがわかります
最後に
これで失敗した場合にも特定のスクリプトを実行することができるようになりました
また調べてみると expected_stage_fail や on_failure_script と言った書き方もでてきたのですが expected_stage_fail や on_failure_script はどうやら使えないようです
https://gitlab.com/gitlab-org/gitlab/-/issues/19400
0 件のコメント:
コメントを投稿