gitlab - 有没有办法动态选择作业是否在 Gitlab CI 管道中运行?

标签 gitlab gitlab-ci gitlab-ci-runner gitlab-api

我正在尝试让一项作业检查配置文件中是否存在单词,并确定后续触发作业是否发生...

就像这样...

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/

相关文章:

ssh - Gitlab不推送分支,访问被拒绝?

asp.net - Gitlab-ci运行构建然后移交到单独的机器上测试

linux - 如何在 gitlab ci :bad substitution 中修复 bash

node.js - 找不到 Docker Node flow-bin libelf.so.1 (gitlab ci)

git - 使用 GitLab CI 在一个存储库中运行多个 Maven 项目

git - 在不克隆的情况下比较两个 Git 分支

ubuntu - ssh/known_hosts : No such file or directory

android - Gitlab CI gradle 依赖缓存

docker - 如何将变量从 .gitlab.ci.yml 传递到 Dockerfile

docker - 在 docker 中使用 gitlab-ci 构建 .NET Core 项目