You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何多次触发另一GitLab仓库流水线并传入不同变量?

触发GitLab外部流水线多次并传入不同变量的解决方案

你当前的配置只是在本地定义了三个job并输出日志,但并没有实际触发aap/gitlab-ci仓库的流水线——include关键字是把外部流水线的任务引入到当前流水线中执行,而非触发目标仓库的独立流水线,所以无法实现三次执行外部流水线的需求。

方案一:使用GitLab原生trigger关键字(推荐)

利用GitCI的trigger关键字直接触发目标仓库的流水线,每个trigger job会生成一个独立的外部流水线实例,并传入对应变量:

---
# 定义触发外部流水线的模板job,复用公共配置
.trigger-external:
  trigger:
    project: "aap/gitlab-ci"
    ref: "go-pipeline"
    strategy: depend  # 可选,若需等待外部流水线完成再继续当前流水线,保留此配置
  variables:
    GO_TEST: "true"

# 第一次触发:对应ice-gitops变量组
ice-gitops:
  extends: .trigger-external
  variables:
    IMAGE_NAME: "ice-gitops"
    DOCKERFILE_PATH: "${CI_PROJECT_DIR}/build/Dockerfile"

# 第二次触发:对应ice-gitops-ci变量组
ice-gitops-ci:
  extends: .trigger-external
  variables:
    IMAGE_NAME: "ice-gitops-ci"
    DOCKERFILE_PATH: "${CI_PROJECT_DIR}/build/Dockerfile.ci"

# 第三次触发:对应ice-gitops-ci-local变量组
ice-gitops-ci-local:
  extends: .trigger-external
  variables:
    IMAGE_NAME: "ice-gitops-ci-local"
    DOCKERFILE_PATH: "${CI_PROJECT_DIR}/build/Dockerfile.local"

方案二:通过GitLab API触发(灵活定制场景)

如果需要更灵活的触发逻辑,可以在script中调用GitLab API手动触发外部流水线:

trigger-multiple-pipelines:
  script:
    # 触发第一组变量的流水线
    - |
      curl --request POST \
        --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
        --form "variables[IMAGE_NAME]=ice-gitops" \
        --form "variables[GO_TEST]=true" \
        --form "variables[DOCKERFILE_PATH]=${CI_PROJECT_DIR}/build/Dockerfile" \
        "${CI_API_V4_URL}/projects/$(echo aap/gitlab-ci | sed 's/\//%2F/g')/trigger/pipeline?ref=go-pipeline"
    # 触发第二组变量的流水线
    - |
      curl --request POST \
        --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
        --form "variables[IMAGE_NAME]=ice-gitops-ci" \
        --form "variables[GO_TEST]=true" \
        --form "variables[DOCKERFILE_PATH]=${CI_PROJECT_DIR}/build/Dockerfile.ci" \
        "${CI_API_V4_URL}/projects/$(echo aap/gitlab-ci | sed 's/\//%2F/g')/trigger/pipeline?ref=go-pipeline"
    # 触发第三组变量的流水线
    - |
      curl --request POST \
        --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
        --form "variables[IMAGE_NAME]=ice-gitops-ci-local" \
        --form "variables[GO_TEST]=true" \
        --form "variables[DOCKERFILE_PATH]=${CI_PROJECT_DIR}/build/Dockerfile.local" \
        "${CI_API_V4_URL}/projects/$(echo aap/gitlab-ci | sed 's/\//%2F/g')/trigger/pipeline?ref=go-pipeline"
  variables:
    # 需在当前项目的CI/CD变量中配置此token,确保拥有触发目标流水线的权限
    GITLAB_API_TOKEN: "${GITLAB_API_TOKEN}"

注意事项

  • 方案一中的strategy: depend会让当前流水线等待外部流水线执行完成,若无需等待可移除该配置。
  • 方案二中的GITLAB_API_TOKEN需要具备目标仓库的流水线触发权限,建议通过项目CI/CD变量管理,避免硬编码。
  • 目标仓库aap/gitlab-ci需允许外部触发,可在仓库的「Settings -> CI/CD -> Pipeline triggers」中配置触发源,或确保API token拥有足够权限。

内容的提问来源于stack exchange,提问作者bjornvandijkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:08:10