6

我已按照此说明在 aws 中获得了一个非常基本的 ci 工作流程。它完美无缺,但我想要一个额外的功能,回滚。首先我虽然它可以“开箱即用”,但在我的情况下,如果我在 CodeBuild 中选择我想要回滚到的上一个作业并点击“重试”,我会收到以下错误消息:“错误使用工件类型 CodePipelines 时必须设置 ArtifactsOverride。我还尝试使用管道历史页面再次重新运行整个管道,但它只是一个没有任何功能的构建列表。

我的问题是:如何在我的工作流程中添加回滚功能。它不必在同一个管道中等。但它不应该触及 git。

4

1 回答 1

6

AWS CloudFormation现在支持基于 CloudWatch 警报的回滚

我会在您的 S3 存储桶前面放置一个 CloudFront 分配,并将源路径设置为该存储桶中的一个文件夹。每次从 CodeBuild 部署到 S3 时,都会部署到一个随机的新 S3 文件夹。

然后,您将 JSON 文件中的文件夹名称作为 CodeBuild 步骤的输出项目传递。您可以将此工件用作由管道中的 CloudFormation 操作更新的CloudFormation 模板的参数。

CloudFormation模板会将 CloudFront 分配的OriginPath 字段更新为包含新部署的文件夹。

如果警报触发,则 CloudFormation 模板将回滚并翻转回旧文件夹。

这种方法有几个优点:

  • 客户应该只在部署期间看到新版本或旧版本,而不是在部署运行时看到可能混合的文件。
  • 部署逻辑更简单,因为您每次都上传一组新文件,而不是确定哪些文件是新文件,哪些文件需要删除。
  • 回滚非常简单,因为您要返回到仍然存在的文件,而不是重新部署旧文件。

您的管道需要同时包含 CodeBuild 和顺序 CloudFormation 操作。

于 2017-09-05T22:53:16.403 回答