如何尽早退出 gitlab 管道而不失败?

aga*_*lue 16 gitlab gitlab-ci

我有一个gitlab.gitlab-ci.yml管道,其中第一个作业决定是否执行其余作业。这两种选择都不是 \xe2\x80\x9cfailure\xe2\x80\x9d 在 \xe2\x80\x9c 发送电子邮件并提醒每个人\xe2\x80\x9d 意义上。它只是当时需要或不需要\xe2\x80\x99t 完成。

\n

I\xe2\x80\x99m 寻找相反的allow_failure: true允许管道继续运行,无论作业的退出状态如何。相反,我想确定继续状态。

\n

有没有一种简单或常见的方法可以做到这一点?或者我是否再次陷入生成 yaml 文件的困境?

\n

And*_*rew 3

目前看来不可能以“简单”的方式做到这一点,请参阅相关问题:

\n\n

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

\n
\n

这给了我一个想法,也许结合 dotenv 和 if\n$SOME_VARIABLE,你可以运行/跳过一个作业。但如果所有评估都是在管道创建时执行,则它可能不起作用。此\ns片段未经测试。

\n

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

\n
\n
build:\n  stage: build\n  script:\n    - echo "SKIP_BUILD=true" >> .env.skip\n  artifacts:\n    reports:\n      dotenv: .env.skip\n\ndocker build:\n  script: echo yadayada\n  rules:\n    - if: \'$SKIP_BUILD != "true"\'\n
Run Code Online (Sandbox Code Playgroud)\n

这仍然需要检查下游管道中的先前状态,并且看起来相当老套,但至少不像 grep 某些文本文件那样老套。

\n

由于 dotenv 可能无法在rules部分中工作,因此前面的内容必须转换为类似以下内容:

\n
build:\n  stage: build\n  script:\n    - echo "SKIP_BUILD=true" >> .env.skip\n  artifacts:\n    reports:\n      dotenv: .env.skip\n\ndocker build:\n  script:\n    - [ "$SKIP_BUILD" = true ] && exit 0\n    - your_stuff_here\n  dependencies:\n    - build\n\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

  • 文档明确指出“您不能在规则中使用在作业脚本中创建的 dotenv 变量,因为在任何作业运行之前都会评估规则。”,我认为应该从答案中删除第一个示例。作为解决方法,您可以将 `[ "$SKIP_BUILD" = true ] && exit 0` 定义为“作业”,并使用 YAML 锚点在每个应跳过的作业中引用它。 (6认同)
  • 在 [GitLab 问题 #292816](https://gitlab.com/gitlab-org/gitlab/-/issues/292816#note_535041585) 中,它是[解释](https://gitlab.com/gitlab-org/gitlab //issues/292816#note_725574002)为什么这不起作用! (2认同)