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

如何部署已有的Gitlab release且无需重新构建项目?

GitLab CI 旧版本回滚高效实现方案

方案1:全局规则控制,仅需修改少量配置

你之前的变量控制思路是可行的,但完全不需要逐个给Job加规则,只需要做两步修改即可:

  1. 先给所有非部署类Job统一继承一个公共隐藏模板,仅给这个模板加1次规则即可,不用逐个调整Job配置:
# 原有配置顶部新增公共模板
.default_non_deploy_job:
  rules:
    - if: $DEPLOY_OLD_RELEASE
      when: never
    - when: on_success

# 原有所有构建、测试、Release类Job都新增一行继承该模板,原有业务逻辑完全不用改,示例如下:
unit_test:
  extends: .default_non_deploy_job
  # 原有配置保留
build_image:
  extends: .default_non_deploy_job
  # 原有配置保留
  1. 补充全局workflow规则,确保触发回滚流水线时参数正常传递:
workflow:
  rules:
    - if: $DEPLOY_OLD_RELEASE
      variables:
        TARGET_RELEASE_VERSION: $TARGET_RELEASE_VERSION
    - when: always

触发回滚时只要在「运行流水线」页面填写DEPLOY_OLD_RELEASE=true和要回滚的版本号变量,就只会跑部署类Job,完全跳过所有构建测试环节。后续新增非部署Job只要继承.default_non_deploy_job模板即可,维护成本极低。

方案2:原生环境回滚功能,零配置修改

如果你的现有部署Job已经配置了environment字段关联对应环境,完全不需要改任何现有配置,直接用GitLab自带的回滚能力即可:

  • 进入项目左侧菜单栏「部署」→「环境」
  • 找到你要回滚的目标环境,点击进入部署历史列表
  • 找到需要回滚的历史版本,点击右侧的「回滚」按钮
    GitLab会自动重跑对应版本的部署Job,只要你的部署Job逻辑是直接拉取对应版本的已发布制品(而非依赖当前流水线的构建产物),就可以直接完成回滚,不需要跑任何前置的构建测试Job。

方案3:新增手动触发的回滚专属Job

你可以直接在现有配置最后加一组对应各环境的回滚Job,设置为仅手动触发,完全不影响原有流水线逻辑:

stages:
  # 原有5个stage保留,最后新增一个回滚stage
  - rollback

rollback_to_prod:
  stage: rollback
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual
      allow_failure: true
  variables:
    # 运行时手动填写要回滚的版本号
    TARGET_RELEASE_VERSION: ""
  script:
    # 直接复用你原有部署Job的部署逻辑,拉取指定版本的制品部署即可
    - ./deploy_script.sh $TARGET_RELEASE_VERSION production

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:21:00