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

构建流水线中应用构建/测试失败时,如何回滚已部署的IaC基础设施?

基础设施回滚方案(针对构建/测试失败场景)

核心逻辑

既然基础设施部署在应用构建、测试之前,一旦后续环节失败,就得把刚部署的基础设施回退到之前的稳定状态——核心是靠Terraform的状态管理和代码版本控制来落地。

具体实现步骤

1. 提前留存稳定基准

每次基础设施部署成功后,做好两个绑定:

  • 用Git标签标记当前的IaC代码版本,比如infra-stable-202405201430
  • 把当前的terraform.tfstate状态文件备份到可靠存储(比如对象存储),文件名和标签对应

2. 流水线中加回滚触发分支

当阶段2(构建)或阶段3(测试)失败时,自动触发回滚步骤:

  • 拉取最近的稳定IaC版本:git checkout infra-stable-202405201430
  • 恢复对应的状态文件:把备份的稳定状态文件替换当前的terraform.tfstate
  • 执行回滚:terraform apply -auto-approve,这会根据稳定状态和代码,把基础设施还原到之前的状态

3. 规避回滚风险

  • 回滚前先跑terraform plan确认变更内容,避免误操作
  • 如果只是新增了基础设施资源,也可以直接用terraform destroy销毁刚创建的资源,但只适合纯新增的场景,不适合修改现有资源的情况

4. 流水线配置示例(伪代码)

stages:
  - 部署基础设施
  - 构建应用
  - 运行测试
  - 部署应用
  - 回滚基础设施

部署基础设施:
  script:
    - terraform init
    - terraform apply -auto-approve
    - STABLE_TAG=infra-stable-$(date +%Y%m%d%H%M)
    - git tag -a $STABLE_TAG -m "部署成功后的稳定基础设施版本"
    - cp terraform.tfstate s3://我的基础设施备份桶/$STABLE_TAG.tfstate

构建应用:
  script: npm run build
  allow_failure: false

运行测试:
  script: npm run test
  allow_failure: false

部署应用:
  script: # 应用部署命令
  needs: [构建应用, 运行测试]

回滚基础设施:
  script:
    - LATEST_STABLE_TAG=$(git describe --abbrev=0 --tags --match "infra-stable-*")
    - git checkout $LATEST_STABLE_TAG
    - cp s3://我的基础设施备份桶/$LATEST_STABLE_TAG.tfstate terraform.tfstate
    - terraform init
    - terraform apply -auto-approve
  when: on_failure
  needs: [部署基础设施]

额外注意点

  • 状态文件要做好权限管控,防止未授权修改
  • 回滚操作要留存日志,方便后续排查
  • 如果涉及有状态资源(比如数据库),回滚前要确认数据是否需要备份,避免丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:35:27