Azure DevOps Environments环境下如何实现Kubernetes部署回滚?
解决方案
以下是三种适配你当前使用场景的回滚方案,均可实现低风险、快速回滚的需求:
方案1:直接复用环境部署历史的重新部署功能(最贴合原有使用习惯)
该方案和经典Release流水线选旧构件重跑的逻辑完全一致,无需修改现有配置:
- 进入Azure DevOps的「环境」页面,选择你要回滚的目标环境(比如生产环境)
- 切换到「部署历史」标签,找到你需要回滚到的已成功执行的旧部署记录
- 点击该记录右侧的更多操作按钮(三个点),选择「重新部署」即可
该操作会直接复用该次部署对应的所有上下文(包括当时的镜像版本、K8s配置清单、变量值),仅执行部署阶段逻辑,不会重新触发CI构建。
方案2:优化YAML配置,支持手动指定镜像Tag快速回滚
适合需要灵活指定任意历史版本回滚的场景,仅需对现有YAML做少量调整:
- 在YAML顶部新增可选参数:
parameters: - name: rollbackImageTag type: string default: '' displayName: 回滚指定镜像Tag(留空则执行正常构建部署流程)
- 调整变量逻辑,适配回滚场景:
variables: azureContainerRegistry: <registryUrl> azureContainerRegistryServiceConnection: <serviceConnection> kubernetesConfigPath: kubernetes kubernetesNamespace: <my-namespace> major: 0 # 新增镜像Tag判断逻辑 ${{ if ne(parameters.rollbackImageTag, '') }}: imageName: "$(azureContainerRegistry)/<my-app>:${{ parameters.rollbackImageTag }}" ${{ else }}: buildNumber: $(major).$(Build.BuildId) imageName: "$(azureContainerRegistry)/<my-app>:$(buildNumber)"
- 给Bake构建阶段加执行条件,回滚场景下跳过构建:
- stage: Bake displayName: "Build and Push image" # 仅未指定回滚Tag时执行构建 condition: eq('${{ parameters.rollbackImageTag }}', '') jobs: # 原有构建逻辑保持不变
配置完成后,回滚时只需要手动运行流水线,填写要回滚的历史镜像Tag即可,无需修改代码、无需选择历史commit。
方案3:适配Kubernetes原生回滚能力(紧急故障场景极速回滚)
适合生产环境出故障需要最快速度恢复的场景,有两种实现方式:
- 直接在环境的「Kubernetes资源」视图中找到对应的Deployment,点击操作按钮选择「回滚」,即可一键回到上一个成功的部署版本
- 也可以在YAML中新增一个手动触发的回滚阶段,默认不执行,需要时手动触发即可,核心逻辑如下:
- stage: RollbackProd displayName: "回滚生产环境到上一版本" dependsOn: DeployProd # 仅手动触发时执行 condition: false jobs: - deployment: Rollback environment: <my-prod-env>.$(kubernetesNamespace) pool: name: "Docker" strategy: runOnce: deploy: steps: - task: Kubernetes@1 displayName: "执行回滚" inputs: namespace: $(kubernetesNamespace) command: rollout arguments: "undo deployment/<my-app>"
内容的提问来源于stack exchange,提问作者mchristos
相关产品推荐
相关产品推荐

