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

如何在CodePipeline审批拒绝时触发回滚阶段?实现分支流程

CodePipeline蓝绿部署:回滚实现与审批关联条件阶段方案

一、编程方式从最终阶段执行回滚

完全可以实现,核心是结合AWS API、DynamoDB的蓝绿标志和Lambda函数触发回滚流程:

  • 在最终审批阶段后添加Lambda动作,读取DynamoDB中存储的旧版本元数据(比如旧ECS堆栈ARN、API Gateway旧集成配置参数)
  • 通过AWS SDK/CLI调用对应服务API完成回滚:
    • 用aws apigateway update-integration将API集成恢复到旧ECS堆栈端点
    • 若旧ECS堆栈未被删除,直接调用aws cloudformation update-stack恢复旧配置;若已标记待删,可取消删除并重新激活
  • 回滚完成后更新DynamoDB的蓝绿标志,保证部署状态一致性

二、关联审批结果的条件阶段配置

可以实现,关键是利用CodePipeline的审批输出变量和阶段过渡条件关联审批动作与后续分支:

  1. 配置审批阶段输出变量:
    创建审批动作时(控制台或Terraform),开启输出变量功能,将审批结果(Approved/Rejected)存入自定义变量,比如命名为ApprovalDecision
  2. 创建两个分支阶段:
    • 一个阶段负责「移除旧ECS堆栈与API配置」
    • 另一个阶段负责「部署旧配置(回滚)」
  3. 设置阶段过渡条件:
    • 给「移除旧堆栈」阶段设置过渡条件:#{最终审批阶段名.ApprovalDecision} == Approved
    • 给「回滚旧配置」阶段设置过渡条件:#{最终审批阶段名.ApprovalDecision} == Rejected
  4. 权限与语法注意:
    • 确保CodePipeline服务角色拥有读取审批阶段输出变量的权限
    • 条件表达式必须使用#{阶段名.输出变量名}格式,变量名需和审批动作中定义的完全一致

实操补充

若用Terraform定义CodePipeline,需在aws_codepipeline_stage的action块中配置output_variables,示例:

action {
  name             = "Final-Approval"
  category         = "Approval"
  owner            = "AWS"
  provider         = "Manual"
  version          = "1"
  output_variables = {
    ApprovalDecision = "$(ApprovalDecision)"
  }
}

后续阶段的transition块中设置condition:

transition {
  from_stage = "Final-Approval"
  condition  = "#{Final-Approval.ApprovalDecision} == Approved"
}
  • 回滚用的Lambda函数需配置最小权限IAM角色,仅授予操作API Gateway、CloudFormation/ECS、DynamoDB的必要权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:10:26