GitLab如何配置SUB项目的gitlab-ci.yml以触发MAIN项目流水线
实现SUB仓库提交触发MAIN仓库流水线的配置方法
前置准备
- 首先在MAIN仓库生成具有流水线触发权限的访问令牌:进入MAIN仓库 → 「设置」→ 「访问令牌」,勾选
api权限,生成后保存好令牌值 - 将上述令牌配置为SUB仓库的CI变量:进入SUB仓库 → 「设置」→ 「CI/CD」→ 「变量」,新增变量名为
MAIN_TRIGGER_TOKEN,值为刚才生成的令牌,勾选「掩码变量」避免令牌在日志中泄露
SUB项目gitlab-ci.yml配置方案
方案1:curl调用API触发(灵活支持传自定义参数)
trigger_main_pipeline: stage: trigger # 可根据需求调整为你现有流水线的任意阶段,比如最后一个阶段 image: curlimages/curl:latest variables: MAIN_PROJECT_ID: "123456" # 替换为MAIN仓库的项目ID,可在MAIN仓库主页名称下方查看 MAIN_TARGET_BRANCH: "main" # 替换为要触发的MAIN仓库目标分支 script: - | curl --request POST \ --form token=$MAIN_TRIGGER_TOKEN \ --form ref=$MAIN_TARGET_BRANCH \ --form "variables[SUB_COMMIT_SHA]=$CI_COMMIT_SHA" \ # 可选:将SUB仓库的提交SHA传入MAIN流水线作为参数,不需要可删除 "https://你的GitLab服务域名/api/v4/projects/$MAIN_PROJECT_ID/trigger/pipeline" rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # 触发规则可自定义,比如仅推送到SUB默认分支时触发,需要全分支触发可改为 - when: always
方案2:GitLab原生trigger关键字触发(写法更简洁)
适合不需要传递复杂自定义参数的场景:
trigger_main_pipeline: stage: trigger trigger: project: 你的分组路径/main # 替换为MAIN仓库的完整项目路径 branch: main # 替换为MAIN仓库的目标分支 rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # 触发规则可按需调整
注意:使用该方案需要提前配置权限,在MAIN仓库的「设置」→「CI/CD」→「流水线权限」中,允许SUB仓库所属的用户/组拥有触发MAIN流水线的权限。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

