通过脚本创建迭代AWS AMI以在Jenkins中使用

时间:2016-12-15 18:38:08

标签: amazon-web-services jenkins groovy ami

我正在编写Jenkins管道作业,将Jenkins备份到AWS AMI,然后更新插件。我可以创建AMI没有问题,但理想情况下我想存储一个上限数量的这些,删除最旧的,以保持,比如说,任何时候三个。

这是一个双管齐下的问题;

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

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

    20161201_jenkinsbkup_08
    20161204_jenkinsbkup_09
    20161212_jenkinsbkup_10
    

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

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

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

1 个答案:

答案 0 :(得分:0)

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

我不知道如何在jenkins的groovy中做到这一点,但必须有一些方法来执行ec2命令,如果不是groovy,也许是java sdk。或者如果你想要你可以在lambda中实现它并且只是调用lambda,如果那样更好。如果您需要其他时间的快照或除了更新前快照之外的其他系统,这将是有吸引力的。