我有一个 gitlab .gitlab-ci.yml
管道,其中第一个作业决定是否执行其余作业。这两种选择都不是“发送电子邮件并提醒所有人”意义上的“失败”。只是在那个时候做或不需要做。
我正在寻找 allow_failure: true
的反面,它允许管道继续,而不管作业的退出状态如何。相反,我想确定继续状态。
有没有简单或通用的方法来做到这一点?还是我再一次坚持生成 yaml 文件?
答案 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 页面添加额外管道的缺点,但它们都在正常用例中成功。因此无需向公司发送额外的电子邮件。
我还发布了一个功能请求,以使其成为正常用例。