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

如何在Azure Pipeline中添加条件步骤实现Kubernetes部署回滚?

Azure Pipeline部署Kubernetes失败自动回滚方案

核心逻辑

借助Azure Pipeline的任务条件控制,让回滚操作仅在流水线出现失败时触发,同时确保两个部署对象都能回滚到之前的稳定版本。

分步实现

1. 提前记录当前部署版本(可选但推荐)

在部署前先把两个Deployment的当前版本号存为Pipeline变量,后续回滚时精准指定版本,避免误回滚。新增一个Kubernetes CLI任务,执行以下命令:

# 获取两个部署的当前revision
DEPLOY1_REV=$(kubectl get deploy <你的部署1名称> -o jsonpath='{.metadata.annotations.deployment\.kubernetes\.io/revision}')
DEPLOY2_REV=$(kubectl get deploy <你的部署2名称> -o jsonpath='{.metadata.annotations.deployment\.kubernetes\.io/revision}')

# 将版本号输出为Pipeline变量,供后续任务调用
echo "##vso[task.setvariable variable=DEPLOY1_REV;isOutput=true]$DEPLOY1_REV"
echo "##vso[task.setvariable variable=DEPLOY2_REV;isOutput=true]$DEPLOY2_REV"

给这个任务命名为记录当前部署版本,确保它在所有部署任务之前执行。

2. 部署任务保持原有逻辑

继续用两个独立的Kubernetes CLI任务分别部署两个清单文件:
第一个部署任务执行:

kubectl apply -f <部署1清单文件路径>

第二个部署任务执行:

kubectl apply -f <部署2清单文件路径>

3. 配置回滚任务的触发条件

新增一个Kubernetes CLI任务专门处理回滚,关键是设置任务执行条件为「仅当前面任务失败时运行」。

回滚命令用之前记录的版本号:

# 回滚部署1到之前的稳定版本
kubectl rollout undo deploy <你的部署1名称> --to-revision=$(DEPLOY1_REV)
# 回滚部署2到之前的稳定版本
kubectl rollout undo deploy <你的部署2名称> --to-revision=$(DEPLOY2_REV)

如果没提前记录版本,也可以用默认回滚命令:kubectl rollout undo deploy <部署名称>,会自动回滚到上一个版本,但提前记录版本更可控。

在Azure Pipeline的任务设置中,找到「控制选项」→「运行此任务」,选择「仅当前面的任务失败时」(对应表达式failed())。

4. 额外注意点

  • 确保AKS集群的服务账号拥有rollout undo的权限,权限不足会导致回滚失败,可通过RBAC配置调整。
  • 如果部署的是StatefulSet等其他资源,要对应修改回滚命令,比如kubectl rollout undo statefulset <资源名称>。
  • 可以给回滚任务开启「出错时继续」,避免回滚本身失败导致流水线状态混乱,但建议先测试回滚逻辑确保稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:40:27