【问题标题】:Create iterative AWS AMIs via script for use in Jenkins通过脚本创建迭代 AWS AMI 以在 Jenkins 中使用
【发布时间】:2016-12-17 11:10:39
【问题描述】:

我正在编写一个 Jenkins Pipeline 作业,它将 Jenkins 备份到 AWS AMI,然后更新插件。我可以毫无问题地创建 AMI,但理想情况下,我想存储其中的上限数量,删除最旧的以保留,例如,一次保留三个。

这是一个两方面的问题;

  1. 有没有办法通过 Groovy 捕获和分类 AMI ? (或者可以集成到 Groovy 中的 shell 脚本。)我们存储了几十个 AMI,所以我需要能够筛选出那些以某种方式命名的 AMI,然后按日期和版本号对它们进行排序。我正在想象一个类似于yyyymmdd_jenkinsbkup_## 的命名系统,其中## 是版本号(01、02 等)

  2. 假设是,我可以在创建下一个 AMI 时删除最旧的版本并迭代到下一个版本号吗?假设我保存了以下三个

    20161201_jenkinsbkup_08
    20161204_jenkinsbkup_09
    20161212_jenkinsbkup_10
    

    然后我可以以某种方式删除20161201_jenkinsbkup_08 并创建20161215_jenkinsbkup_11

我是一名 AWS 菜鸟,但在我的脚本中创建了一个图像。请注意,这是在更大的管道脚本中运行的。

sh "aws ec2 create-image --instance-id i-############# --name 'something to create the requested format' --region us-east-1 --no-reboot"

【问题讨论】:

    标签: amazon-web-services jenkins groovy amazon-ami


    【解决方案1】:

    您可以通过向ec2:describeImages 提供过滤器来对 AMI 进行排序。
    在您的示例中,您可能会按名称过滤,然后按日期对它们进行排序(我没有把它放在名称中,因为 createdDate 已经是一个属性),创建最新的快照,然后删除 ami 和最旧的快照。您可能希望在删除快照之前使用 ami id 对其进行标记,以便在您设法删除之前被中断时清理它,因为如果 ami 存在,则无法删除快照,并且不会如果它消失了,请显示与 AMI 的关系。

    我不知道如何在 jenkins 的 groovy 中执行此操作,但必须有某种方法可以执行 ec2 命令,如果不是 groovy,可能是 java sdk。或者,如果您愿意,您可以在 lambda 中实现它并调用 lambda,如果这样更好的话。如果除了更新前的快照之外,您还想要其他时间的快照或其他系统的快照,那将很有吸引力。

    【讨论】:

    • 仍在与此作斗争,但我想感谢你让我开始描述图像;感谢您的帮助!
    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多