如何部署已有的Gitlab release且无需重新构建项目?
GitLab CI 旧版本回滚高效实现方案
方案1:全局规则控制,仅需修改少量配置
你之前的变量控制思路是可行的,但完全不需要逐个给Job加规则,只需要做两步修改即可:
- 先给所有非部署类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 # 原有配置保留
- 补充全局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
相关产品推荐
相关产品推荐

