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

多环境GitLab Pipeline如何配置Rollback Job仅在对应Test Job失败时执行

GitLab Pipeline 按环境匹配触发Rollback Job配置方案

核心实现逻辑

要实现仅对应环境Test Job失败时才触发该环境Rollback Job的需求,核心是切断Rollback Job和其他非关联Job的状态联动:

  • 每个Rollback Job通过needs关键字明确绑定仅对应环境的Test Job,完全隔离其他环境、其他阶段Job的状态影响
  • 配置触发规则仅在绑定的Test Job失败时执行,其余场景全部跳过

完整示例配置

stages:
  - Build
  - Deploy
  - Test
  - Rollback

# 环境A任务链
Job-1-Build-A:
  stage: Build
  script:
    - echo "构建环境A业务镜像"

Job-2-Deploy-A:
  stage: Deploy
  needs: ["Job-1-Build-A"]
  script:
    - echo "部署镜像到环境A独立VM"

Job-3-Test-A:
  stage: Test
  needs: ["Job-2-Deploy-A"]
  script:
    - echo "执行环境A功能、接口测试"

Job-4-Rollback-A:
  stage: Rollback
  # 仅绑定环境A的Test Job,和其他所有Job无依赖关系
  needs: ["Job-3-Test-A"]
  script:
    - echo "回滚环境A到上一个稳定部署版本"
  rules:
    # 仅当绑定的Job-3-Test-A失败时触发
    - if: $CI_JOB_STATUS == 'failed' && $CI_NEEDS_JOB_NAME == 'Job-3-Test-A'
      when: on_failure
    # 其余所有场景都不执行
    - when: never

# 环境B任务链
Job-1-Build-B:
  stage: Build
  script:
    - echo "构建环境B业务镜像"

Job-2-Deploy-B:
  stage: Deploy
  needs: ["Job-1-Build-B"]
  script:
    - echo "部署镜像到环境B独立VM"

Job-3-Test-B:
  stage: Test
  needs: ["Job-2-Deploy-B"]
  script:
    - echo "执行环境B功能、接口测试"

Job-4-Rollback-B:
  stage: Rollback
  needs: ["Job-3-Test-B"]
  script:
    - echo "回滚环境B到上一个稳定部署版本"
  rules:
    - if: $CI_JOB_STATUS == 'failed' && $CI_NEEDS_JOB_NAME == 'Job-3-Test-B'
      when: on_failure
    - when: never

注意事项

如果你使用的GitLab版本低于14.3,不支持CI_NEEDS_JOB_NAME内置变量,可直接简化Rollback Job配置:因为needs已经限定了当前Job的唯一依赖是对应环境的Test Job,只要Test Job没有进入失败状态(包括Test未执行、Test成功、其他Job失败),when: on_failure都不会触发当前Rollback Job,直接去掉rules块,仅保留when: on_failure即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:08