我有一个生产升级测试管道,在每个 PR 上运行,它将部署生产副本到测试帐户,然后使用功能分支上的内容进行升级。这样做是为了确保生产升级始终成功。步骤是:
\ngit checkout master
cdk bootstrap --force aws://unknown-account/ap-southeast-2
cdk deploy --all --require-approval never --change-set-name "ci-${GITHUB_RUN_ID}"
git checkout feature
cdk bootstrap aws://unknown-account/ap-southeast-2
cdk deploy --all --require-approval never --change-set-name "ci-${GITHUB_RUN_ID}"
昨天,我们在将 aws-cdk 升级到 1.108.0 时遇到了问题。上述第二步部署失败,但该步骤仍成功将 AWS 账户引导至版本 6。(5 -> 6)
\n当第二次重新运行作业时,我们在管道中运行第一步时收到如下问题:
\n \xe2\x9d\x8c Environment aws://unknown-account/ap-southeast-2 failed bootstrapping: Error: Not downgrading existing bootstrap stack from version \'6\' to version \'5\'. Use --force to force.\n
Run Code Online (Sandbox Code Playgroud)\n我们通过--force
在管道第一步引导时使用该标志来解决此错误,以便在我们的测试帐户中完全重新创建生产环境。
但现在因为我们正在使用--force
,我们每次运行管道时都会引导帐户,这无意中在我们的测试帐户中的所有并发 PR 和引导堆栈之间创建了竞争条件,每当 2 个测试作业时都会收到如下错误同时运行。
\xe2\x9d\x8c Environment aws://unknown-account/ap-southeast-2 failed bootstrapping: InvalidChangeSetStatus: Cannot delete ChangeSet in status CREATE_IN_PROGRESS\n
Run Code Online (Sandbox Code Playgroud)\n最好的方法是什么
\n--force
标志我们已经研究过也许使用--qualifier
cdk bootstrap 上的标志为每个测试运行创建一个引导程序,但认为由于未实现https://github.com/aws/aws-cdk/issues/986这可能不会真是个好主意。
小智 1
我们通过向|| true
脚本添加 a 来解决这个问题,这样即使脚本返回错误,该步骤也会成功。
如果新帐户中的新设置确实发生了真正的错误,那么接下来的cdk deploy
步骤无论如何都会失败,因为引导的上一步已经失败,这确实允许我们从日志中调查问题。
归档时间: |
|
查看次数: |
1570 次 |
最近记录: |