GitLab CI如何实现debug/release专属分支流水线路径?
GitLab CI配置方案:实现互斥的debug/release发布路径
以下是满足需求的完整CI配置,通过rules、needs和手动触发控制,实现两条互斥的发布路径:
stages: - publish debug: stage: publish script: - # 写入你的debug版本发布脚本 - echo "发布debug版本" rules: # 仅当release作业未被执行时,显示该手动作业 - if: '!exists(job: "release")' when: manual allow_failure: false release: stage: publish script: - # 写入你的release版本发布脚本 - echo "发布release版本" rules: # 仅当debug作业未被执行时,显示该手动作业 - if: '!exists(job: "debug")' when: manual allow_failure: false dbg2release: stage: publish script: - # 写入基于最新debug版本发布release的脚本 - echo "基于debug版本发布release" rules: # 仅当debug作业成功完成后,显示该手动作业 - if: 'exists(job: "debug") && job.status == "success"' when: manual allow_failure: false needs: ["debug"]
配置逻辑说明:
- 初始可见性:流水线创建时,
debug和release作业均为手动触发状态并可见,dbg2release因依赖条件未满足,初始不可见。 - debug完成后触发dbg2release:
debug作业成功执行后,dbg2release的规则条件自动满足,变为可用状态;needs: ["debug"]确保该作业仅能在debug完成后触发。 - 流水线状态标记:
release或dbg2release作业完成后,因allow_failure: false且为流水线最终作业,流水线会被标记为"Passed"。 - 互斥路径控制:
- 若先触发
release作业,debug作业的规则条件(!exists(job: "release"))不再成立,会自动隐藏,实现"release完成后其他作业不可用"。 - 若先触发
debug作业,release作业的规则条件(!exists(job: "debug"))不再成立,自动隐藏,实现"debug完成后release作业不可用"。
- 若先触发
补充说明:
exists(job: "<job_name>")是GitLab CI内置函数,用于检查流水线中是否存在指定名称的作业。allow_failure: false确保作业失败时流水线标记为失败,符合发布流程的严谨性。- 所有作业放在同一
publish阶段即可,无需拆分多阶段,通过规则和依赖控制执行顺序。
内容的提问来源于stack exchange,提问作者cboittin
相关产品推荐
相关产品推荐

