问题
就我而言,我想构建一个具有以下要求的 CI/CD 管道(使用 github 操作):
- 每个 git 推送都会触发一个工作流程(= 管道)
- 每个工作流程都会为当前分支创建/更新多个堆栈(因此每个分支都有自己的部署和独立的堆栈)
- 如果分支的堆栈已部署,则会更新堆栈
cdk部署
命令用于创建/更新堆栈
只要您不在较短的时间内多次推送新更改,这一切都可以正常工作。如果您第一次推送,它将按预期触发 cdk 部署
。
但如果您不久之后再次推送,它将触发 cdk 部署
,该部署会失败,因为之前的 cdk 部署
已将堆栈放入 CREATE_IN_PROGRESS
> 或 UPDATE_IN_PROGRESS
状态。不幸的是,因为只有最新的推送以及最新的 cdk 部署才是相关的。
问题
如何优雅地取消 cdk 部署
,以便它开始回滚部署,并且后续的 cdk 部署
能够成功?
我尝试过
对我来说,理想的解决方案是使用 Ctrl+C
中断 cdk deploy
命令来取消部署。但这种情况并非如此。它将继续部署。是否有另一种解决方案,不太复杂?
最佳答案
这个问题是非常固执的,你的问题的解决方案可能根本不是使用 CDK。您无法 100% 确定即使在强制取消 cdk deploy 命令后它也会完美回滚。如果堆栈第一次部署并创建 s3 存储桶,该怎么办?在这种情况下即使您取消部署。 S3 存储桶不会被删除。
解决您的问题的一个直接解决方案是在 CI 服务器中实现顺序管道。因此,如果 1 个管道正在为给定队列或存储库工作,则其他管道应该在队列中等待。通过这样做,您的基础设施更改将逐步部署。这是一个更干净、更可靠的解决方案,可以实现您想要做的事情。
这个 ^ 解决方案并不像任何其他解决方案一样完美!它可能会导致整个解决方案变得很慢,因为与取消部署 -> 删除堆栈 -> 重新部署相比,顺序管道将花费更多时间。
关于amazon-web-services - 如何优雅地取消 cdk 部署?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70954488/