通过脚本创建迭代 AWS AMI 以在 Jenkins 中使用
Create iterative AWS AMIs via script for use in Jenkins
我正在编写 Jenkins 管道作业,它将 Jenkins 备份到 AWS AMI,然后更新插件。我可以毫无问题地创建 AMI,但理想情况下,我想存储其中的上限数量,删除最旧的,以便一次保留三个。
这是一个双管齐下的问题;
有没有一种方法可以通过 Groovy 捕获和分类 AMI? (或 shell 脚本,然后可以将其集成到 Groovy。)我们存储了数十个 AMI,因此我需要能够筛选那些以某种方式命名的 AMI,然后按以下方式对它们进行排序日期,然后是版本号。我正在想象一个类似于 yyyymmdd_jenkinsbkup_##
的命名系统,其中 ## 是版本号(01、02 等)
假设是,我可以在创建下一个 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"
您可以通过向 ec2:describeImages 提供过滤器来对 AMI 进行排序。
在你的例子中,你可能会按名称过滤,然后按日期排序(我没有把它放在名称中,因为 createdDate 已经是 属性),创建最新的快照,然后删除ami 和最老的快照。您可能希望在删除之前用 ami id 标记快照,这样如果您在设法删除它之前被打扰了,您可以清理它,因为如果 ami 存在则快照无法删除,并且不会如果它消失了,显示与 AMI 的关系。
我不知道如何在 jenkins 的 groovy 中执行此操作,但必须有某种执行 ec2 命令的方法,如果不是 groovy,则可能是 java sdk .或者,如果您愿意,可以在 lambda 中实现它,然后调用 lambda,如果这样更好的话。如果除了更新前的快照之外,您还想要其他时间的快照或其他系统的快照,那将很有吸引力。
我正在编写 Jenkins 管道作业,它将 Jenkins 备份到 AWS AMI,然后更新插件。我可以毫无问题地创建 AMI,但理想情况下,我想存储其中的上限数量,删除最旧的,以便一次保留三个。
这是一个双管齐下的问题;
有没有一种方法可以通过 Groovy 捕获和分类 AMI? (或 shell 脚本,然后可以将其集成到 Groovy。)我们存储了数十个 AMI,因此我需要能够筛选那些以某种方式命名的 AMI,然后按以下方式对它们进行排序日期,然后是版本号。我正在想象一个类似于
yyyymmdd_jenkinsbkup_##
的命名系统,其中 ## 是版本号(01、02 等)假设是,我可以在创建下一个 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"
您可以通过向 ec2:describeImages 提供过滤器来对 AMI 进行排序。
在你的例子中,你可能会按名称过滤,然后按日期排序(我没有把它放在名称中,因为 createdDate 已经是 属性),创建最新的快照,然后删除ami 和最老的快照。您可能希望在删除之前用 ami id 标记快照,这样如果您在设法删除它之前被打扰了,您可以清理它,因为如果 ami 存在则快照无法删除,并且不会如果它消失了,显示与 AMI 的关系。
我不知道如何在 jenkins 的 groovy 中执行此操作,但必须有某种执行 ec2 命令的方法,如果不是 groovy,则可能是 java sdk .或者,如果您愿意,可以在 lambda 中实现它,然后调用 lambda,如果这样更好的话。如果除了更新前的快照之外,您还想要其他时间的快照或其他系统的快照,那将很有吸引力。