Continuous integration gitlab中每个作业都有多个on_故障事件?

Continuous integration gitlab中每个作业都有多个on_故障事件?,continuous-integration,gitlab,gitlab-ci,gitlab-ci-runner,gitlab-api,Continuous Integration,Gitlab,Gitlab Ci,Gitlab Ci Runner,Gitlab Api,Gitlab ci提供了“何时:发生故障”错误处理程序。如果我想为每个作业指定不同的处理程序,该怎么办?因为如果任何前一个作业失败,则会触发on failure。基本上,如果我为每个作业设置处理程序,如果一个作业失败,那么所有处理程序都将启动。如何避免这种情况 我认为目前没有任何方法可以做到这一点,但gitlab repo上存在一个公开问题,要求提供一些类似的功能:。如果实现,它将允许您指定应该为哪个失败的步骤运行哪个步骤 但在此之前,控制错误处理的唯一方法是在步骤脚本中执行,如下所示: ./s

Gitlab ci提供了“何时:发生故障”错误处理程序。如果我想为每个作业指定不同的处理程序,该怎么办?因为如果任何前一个作业失败,则会触发on failure。基本上,如果我为每个作业设置处理程序,如果一个作业失败,那么所有处理程序都将启动。如何避免这种情况

我认为目前没有任何方法可以做到这一点,但gitlab repo上存在一个公开问题,要求提供一些类似的功能:。如果实现,它将允许您指定应该为哪个失败的步骤运行哪个步骤

但在此之前,控制错误处理的唯一方法是在步骤脚本中执行,如下所示:

./script_that_fails.sh || FAILED=true
if [ $FAILED ]; then
  ./error_handling_script.sh
fi

对于一个特定的工作失败,我只成功地处理了一个失败的工作

这有点棘手,我在失败时创建一个工件,在
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

希望能有所帮助。

谢谢您的选择!