GitLab CI中能否设置两个仅允许执行其一的手动任务?
GitLab CI实现二选一手动任务方案
可以通过GitLab CI的rules结合job状态判断来实现同一阶段两个手动任务二选一,执行其中一个后锁定另一个,且不会取消整个流水线。
核心思路是利用GitLab CI对其他job状态的引用能力,让每个手动任务仅在另一个任务未成功执行时才允许触发;当其中一个任务成功完成后,另一个任务会自动变为不可触发的跳过状态。
示例配置如下:
stages: - build - test - deploy # 前置的build、test任务根据实际业务需求定义 promote: stage: deploy script: - echo "执行promote部署逻辑" when: manual rules: # 仅当publish任务未成功时,才显示该手动任务 - if: 'job:publish.status != "success"' - when: manual publish: stage: deploy script: - echo "执行publish部署逻辑" when: manual rules: # 仅当promote任务未成功时,才显示该手动任务 - if: 'job:promote.status != "success"' - when: manual
注意事项:
- 该方案要求GitLab版本在13.12及以上,因为从这个版本开始支持在
rules中引用其他job的状态(job:<job_name>.status语法)。 - 初始状态下,两个手动任务都会显示在流水线界面中,用户可选择触发任意一个;当其中一个任务执行成功后,另一个任务的规则条件不再满足,会被标记为
skipped,无法再触发。 - 如果需要限制两个任务不能并行执行,可额外添加
resource_group配置,将两个任务放入同一资源组,同一时间仅允许执行一个任务,但仍需配合上述rules判断来实现“执行一个后锁定另一个”的效果。
内容的提问来源于stack exchange,提问作者user23508983
相关产品推荐
相关产品推荐

