我正在尝试让一项作业检查配置文件中是否存在单词,并确定后续触发作业是否发生...
就像这样...
stages:
- check
- trigger_pipeline
variables:
- TRIGGER_JOB : "0"
- CONFIG_FILE : "default.json"
check:
stage: check
script:
- |
if grep -q keyword "$CONFIG_FILE"; then
TRIGGER_JOB="1"
fi
- echo "TRIGGER_JOB=${TRIGGER_JOB}" >> variables.env
artifacts:
reports:
dotenv: "variables.env"
trigger_pipeline:
stage: trigger_pipeline
rules:
- if: '$TRIGGER_JOB == "1"'
trigger:
project: downstream/project
branch: staging
strategy: depend
needs: ["check"]
似乎我已经达到了 GitLab 的限制,因为由于管道使用 TRIGGER_JOB: "0"
初始化,所以 trigger_pipeline
作业甚至没有创建。 code> 因此,如果找到关键字,我执行此检查以稍后触发管道并不重要。
是否有任何方法可以动态决定是否创建此 trigger_pipeline
作业?
我会将其全部放在一项作业中,并通过 API 触发下游管道,但是当然,我不能依赖于下游状态,这也是我想要的(并且不可能做到)当通过 API 从我在文档中找到的所有内容触发时)。
如有任何建议,我们将不胜感激。谢谢!
最佳答案
与您所描述的最接近的是 dynamic child pipelines 。这将允许您在一项作业中动态创建管道配置,然后运行它。
generate-config:
stage: build
script: generate-ci-config > generated-config.yml
artifacts:
paths:
- generated-config.yml
child-pipeline:
stage: test
trigger:
include:
- artifact: generated-config.yml
job: generate-config
关于gitlab - 有没有办法动态选择作业是否在 Gitlab CI 管道中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70945822/