GitLab CI/CD从ProjectB触发ProjectA流水线时如何仅运行指定job
实现方案
步骤1:修改ProjectB的触发配置,增加来源标识变量
在ProjectB的触发job中新增variables字段,传递自定义变量标识触发来源为ProjectB:
stages: - deploy staging: stage: deploy trigger: project: projectA branch: main # 新增变量标识触发来源 variables: TRIGGER_SOURCE: "projectB"
步骤2:修改ProjectA的job规则,按来源控制运行逻辑
给build阶段的三个job分别添加rules规则,实现ProjectB触发时仅运行fromprojectB:
image: docker:19.03.13 stages: - build - staging fromprojectB: stage: build script: # 保留原有脚本内容 .............. rules: # 检测到是ProjectB触发时运行该job - if: $TRIGGER_SOURCE == "projectB" when: always # 其他触发场景下的运行规则可按需补充,比如需要本地push也运行该job就加下面这句,不需要则去掉 - if: $CI_PIPELINE_SOURCE == "push" when: on_success fromprojectC: stage: build script: # 保留原有脚本内容 .............. rules: # ProjectB触发时跳过该job - if: $TRIGGER_SOURCE == "projectB" when: never # 保留原有触发逻辑,按需调整 - when: on_success fromprojectD: stage: build script: # 保留原有脚本内容 .............. rules: # ProjectB触发时跳过该job - if: $TRIGGER_SOURCE == "projectB" when: never # 保留原有触发逻辑,按需调整 - when: on_success deploy-to-stage: stage: staging script: # 保留原有脚本内容 ............
规则说明
- 跨项目触发流水线时传递的
TRIGGER_SOURCE变量会自动带入ProjectA的流水线上下文,可直接用于规则判断 - 如果你原有job已经配置了
only/except触发规则,将上述规则合并到原有配置中即可,优先推荐使用GitLab官方建议的rules替代旧版的only/except - 可以根据实际业务需求调整非ProjectB触发场景下的job运行规则,不会影响原有的流水线逻辑
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

