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

问题描述 投票:0回答:5

我正在使用 bitbucket 的 codeDeploy 插件,通过 AWS codeDeploy 将我的代码直接从 Bitbucket Git 存储库部署到我的 EC2 实例。然而,过了一段时间,我的 codeDeploy 控制台中有很多修订,这些修订存储在一个 S3 存储桶中。那么我应该怎样做才能避免我的 S3 存储保留旧的 codeDeploy 修订版本?

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

修改成功次数有X次可以自动删除吗?例如,如果我们有三个新的成功修订版,则删除旧修订版。

amazon-web-services amazon-s3 bitbucket continuous-deployment aws-code-deploy
5个回答
2
投票

CodeDeploy 保留 BitBucket 的每个修订,因为该服务始终需要最后一次成功的修订来实现 AutoRollback 等不同类型的功能。因此,在进行部署时,我们目前无法轻松覆盖以前的修订版。但对于早于上次成功修订的所有修订,可以将其删除。


1
投票

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


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


0
投票

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

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

另一方面,当您有尖峰活动或更糟糕的是在指定的 S3 过期延迟期间根本没有部署时,此解决方案效率较低:在上一次部署 12 个月后部署的情况下,当此部署失败时,Code Deploy 将不会能够继续回滚,因为之前的工件在 S3 中不再可用。

作为缓解措施,我建议您使用智能分层,它可以将 S3 成本除以 4,而不会干扰 CodeDeploy 功能。您还可以将过期时间设置为 12 个月来删除古代文物。

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


0
投票
如果您不介意保留以前的修订版本,则可以在上传和部署时将 VERSION_LABEL 变量覆盖为非动态文件名(例如“my-application”)。请参阅

https://bitbucket.org/atlassian/aws-code-deploy/src/master

这将导致上一个修订版被下一个修订版覆盖,因此 S3 存储桶中一次仅存储一个修订版。

如果您也想在部署后删除此修订版,您可以在安装后脚本中使用简单的 AWS CLI 命令来执行此操作,该脚本通过 appspec.yml 文件中的挂钩包含 (

https://docs.aws.amazon .com/codedeploy/latest/userguide/reference-appspec-file-struct-hooks.html):

aws s3 rm s3://bucket-name/my-application <-- The name of your revision goes here
    
© www.soinside.com 2019 - 2024. All rights reserved.