有没有办法强制使用 AWS CodeDeploy 进行全新部署?

Is there a way to force a clean slate deployment with AWS CodeDeploy?

如果我使用 AWS CodeDeploy 执行部署,但 ApplicationStop 挂钩脚本不正确(失败),我似乎根本无法进行新部署,因为之前(失败)部署的 ApplicationStop 挂钩是 运行 而不是新的,它总是失败。

除了删除和重新创建应用程序 and/or 部署组之外,还有什么方法可以让代码部署像全新部署一样进行部署,而不是 运行 ApplicationStop 挂钩?

相关的,是否可以忽略 ApplicationStop 中的错误?

是的,可以忽略 ApplicationStop 中的错误。 CreateDeployment API 调用有一个标志“ignoreApplicationStopFailures”[1],可以在这种情况下使用。

如果失败的原因是上次成功部署的脚本永远不会 运行 成功,请创建一个新部署(您也可以复制一个部署)并指定 ApplicationStop 失败应该是忽略。您可以通过两种方式执行此操作:

  1. 使用 AWS CodeDeploy 控制台创建部署。在 Create deployment 页面上的 ApplicationStop lifecycle event failure 下,选择 Don't fail the deployment to an instance if this lifecycle event on the instance fails。

  2. 使用 AWS CLI 调用创建部署命令并包含 --ignore-application-stop-failures 选项。

当您再次部署应用程序修订时,即使 ApplicationStop 生命周期脚本失败,部署也会继续。如果新修订包括 ApplicationStop 生命周期事件的固定脚本,则未来的部署无需应用此修复即可成功。

参考文献:

[1]https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_CreateDeployment.html#CodeDeploy-CreateDeployment-request-ignoreApplicationStopFailures

[2]https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting-deployments.html#troubleshooting-deployments-lifecycle-event-failures