如何提前退出 gitlab 管道而不会失败?

时间:2021-04-26 15:04:26

标签: gitlab gitlab-ci

我有一个 gitlab .gitlab-ci.yml 管道,其中第一个作业决定是否执行其余作业。这两种选择都不是“发送电子邮件并提醒所有人”意义上的“失败”。只是在那个时候做或不需要做。

我正在寻找 allow_failure: true 的反面,它允许管道继续,而不管作业的退出状态如何。相反,我想确定继续状态。

有没有简单或通用的方法来做到这一点?还是我再一次坚持生成 yaml 文件?

2 个答案:

答案 0 :(得分:2)

目前似乎无法以“简单”的方式做到这一点,请参阅相关问题:

我个人建议使用 needs:artifacts 使用 DAG 路线,但我实际上喜欢 Elan Ruusamäe 方法,使用 dotenv 在阶段之间传递变量。这是他的例子:

<块引用>

这给了我一个想法,也许结合 dotenv 和 if $SOME_VARIABLE,您可以运行/跳过作业。但它可能无法工作,如果 所有评估都在管道创建时执行。这 片段未经测试。

https://docs.gitlab.com/ee/ci/variables/#inherit-cicd-variables

build:
  stage: build
  script:
    - echo "SKIP_BUILD=true" >> .env.skip
  artifacts:
    reports:
      dotenv: .env.skip

docker build:
  script: echo yadayada
  rules:
    - if: '$SKIP_BUILD != "true"'

这仍然需要检查下游管道中以前的状态,看起来很hacky,但至少不像grepping一些文本文件那么hacky。

由于 dotenv 可能无法在 rules 部分工作,因此必须将之前的内容转换为:

build:
  stage: build
  script:
    - echo "SKIP_BUILD=true" >> .env.skip
  artifacts:
    reports:
      dotenv: .env.skip

docker build:
  script:
    - [ "$SKIP_BUILD" = true ] && exit 0
    - your_stuff_here
  dependencies:
    - build

另见:https://docs.gitlab.com/ee/ci/variables/README.html#pass-an-environment-variable-to-another-job

答案 1 :(得分:0)

我不关心变量方法有两个原因。首先,所有这些作业仍然被安排和运行。其次,由于它们已被调度和​​运行,因此 UI 没有任何视觉区别。

我最终做的是将管道分成两个通道。第一遍做出决定,并(可选)通过 curl 调用第二遍,并使用局部变量来区分它们。

它有向管道 UI 页面添加额外管道的缺点,但它们都在正常用例中成功。因此无需向公司发送额外的电子邮件。

我还发布了一个功能请求,以使其成为正常用例。

相关问题