我正在使用codebeploy addon for bitbucket将我的代码直接从Bitbucket Git存储库部署到我的EC2实例,通过AWS codeDeploy。但是,过了一段时间,我在codeDeploy控制台中进行了很多修改,这些修改存储在一个S3存储桶中。那么我该如何保存我的S3存储以防止旧的codeDeploy修订?
成功部署后是否可以自动删除这些修订?
如果X号成功修改,是否可以自动删除它们?例如,如果我们有三个新的成功修订,则删除旧版本。
答案 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,这将: