成功部署后从S3删除AWS codeDeploy修订

时间:2016-09-07 06:43:41

标签: amazon-web-services amazon-s3 bitbucket continuous-deployment aws-code-deploy

我正在使用codebeploy addon for bitbucket将我的代码直接从Bitbucket Git存储库部署到我的EC2实例,通过AWS codeDeploy。但是,过了一段时间,我在codeDeploy控制台中进行了很多修改,这些修改存储在一个S3存储桶中。那么我该如何保存我的S3存储以防止旧的codeDeploy修订?

成功部署后是否可以自动删除这些修订?

如果X号成功修改,是否可以自动删除它们?例如,如果我们有三个新的成功修订,则删除旧版本。

4 个答案:

答案 0 :(得分:2)

CodeDeploy保留BitBucket的每个修订版本是因为,该服务需要为AutoRollback等不同类型的功能提供上次成功修订。因此,在进行部署时,我们暂时无法轻松覆盖以前的修订版。但是对于早于上次成功修订的所有修订,可以删除它们。

答案 1 :(得分:1)

不幸的是,CodeDeploy目前没有一种优秀/优雅的方式来处理那些过时的修订版。如果在bitbucket推送到S3时有一个覆盖选项,那就太好了。

答案 2 :(得分:1)

CodeDeploy纯粹是一种部署工具,它无法处理S3存储桶中的修订。

我建议你研究一下"生命周期管理"对于S3。由于您使用的是版本控制的存储桶(我假设),因此总会有一个最新版本和0到多个过时版本。您可以设置类型" NoncurrentVersionExpiration"的生命周期配置。以便在几天后删除过时的版本。

此方法仍无法维持固定数量的部署,因为AWS仅允许以天数指定生命周期。但它可能是您用例的最佳替代方案。

[1] http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-set-lifecycle-configuration-intro.html [2] http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html

答案 3 :(得分:0)

CodeDeploy 不处理像 Jenkins 示例这样的功能:“保持最后 X [成功与否] 运行”。 但是,使用 S3 Lifecycle,您可以在 3 个月后自动使 S3 对象过期(删除)示例。

一方面,通过确保 CodeDeploy 的自动回滚过程并降低 S3 成本,当在到期窗口(至少 3 次部署)期间存在持续活动时,该解决方案是一个不错的 FinOps 操作。

另一方面,当您在指定的 S3 到期延迟期间有尖峰活动或更糟根本没有部署时,此解决方案效率较低:在上次部署 12 个月之后的情况下,当此部署失败时,代码部署将无法进行回滚,因为之前的工件在 S3 中不再可用。

作为缓解措施,我建议您使用 Intelligent Tiering 它可以在不干扰 CodeDeploy 功能的情况下分摊 S3 成本 4。您也可以将过期时间设置为 12 个月以删除古代文物。

最后一个解决方案是编写一个由每周 Cloudwatch Events 安排的 Lambda,这将:

  • List deplyments 使用您自己的标准成功/失败状态
  • Get deployment details 每个
  • 使用您的标准(日期、用户、..)再次过滤掉此部署
  • 使用部署详细信息删除 S3 对象