Gitlab ci提供“ when:on_failure”错误处理程序。如果我想为每个工作使用不同的处理程序怎么办?因为如果任何先前的作业失败,就会触发失败。因此,基本上就是如果我为每个作业都设置了该处理程序,而一个作业将失败,那么所有处理程序都会启动。如何避免呢?
答案 0 :(得分:1)
我不认为目前有任何方法可以执行此操作,但是gitlab存储库上有一个未解决的问题,要求一些类似的功能:https://gitlab.com/gitlab-org/gitlab/issues/19400。如果实施,它将允许您指定应该为哪个失败的步骤运行哪个步骤。
但是,直到那时,您可以控制错误处理的唯一方法是在步骤脚本中执行以下操作:
./script_that_fails.sh || FAILED=true
if [ $FAILED ]; then
./error_handling_script.sh
fi
答案 1 :(得分:0)
对于一个特定的工作失败,我只能成功处理一个失败工作。
这有点棘手,我在失败时创建了一个工件,在on_failure
作业中,我尝试调用该工件并执行脚本来处理故障。如果工件不存在,那么我会回显一条简单的消息。我在最近10分钟内发现了此变通办法,因此可以对其进行优化,但确实可以完成工作。
因此,您可以拥有特定的on_failure
作业来处理不同作业的失败。
stages:
- stage1
- stage1:failure
- stage2
- stage2:failure
job1:
stage: stage1
script:
- echo "FAIL" > JOB1
- ...fail something
artifacts:
when: on_failure
paths:
- JOB1
job1:failure:
stage: stage2:failure
script:
- cat JOB1 && some_script_to_handle_failure || echo "Not a JOB1 Failure"
when: on_failure
job2:
stage: stage2
script:
- echo "FAIL" > JOB2
# Won't be execute since job1 fail
artifacts:
when: on_failure
paths:
- JOB2
job2:failure:
stage: stage2:failure
script:
- cat JOB2 && some_script_to_handle_failure || echo "Not a JOB2 Failure"
# Will echo "Not a JOB2 Failure" since JOB2 artifact doesn't exist.
when: on_failure
希望这会有所帮助。