如何在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
相关产品推荐
相关产品推荐

