Jenkins使用Active Choice插件拉取AWS ECR镜像标签按日期排序问题咨询
ECR镜像标签按日期排序的解决代码
你当前使用的listImages接口仅返回镜像ID信息,不含镜像推送时间元数据,因此无法实现按日期排序,改用describeImages接口拉取完整镜像属性后排序即可,修改后的完整代码如下:
import com.amazonaws.services.ecr.AmazonECR; import com.amazonaws.services.ecr.model.DescribeImagesRequest; import com.amazonaws.services.ecr.model.DescribeImagesResult; import com.amazonaws.services.ecr.AmazonECRClientBuilder; import com.amazonaws.regions.Regions; import jenkins.model.*; AmazonECR client = AmazonECRClientBuilder.standard().withRegion("eu-west-1").build(); DescribeImagesRequest request = new DescribeImagesRequest().withRepositoryName("super-hero-repo"); DescribeImagesResult res = client.describeImages(request); // 构建标签与推送时间的映射,过滤无标签镜像 def tagTimeMap = [:] res.getImageDetails().each { imageDetail -> def tags = imageDetail.getImageTags() if (tags) { tags.each { tag -> tagTimeMap[tag] = imageDetail.getImagePushedAt().getTime() } } } // 按推送时间倒序排列,最新标签排在最前,如需正序将闭包内的负号删除即可 def sortedTags = tagTimeMap.sort { -it.value }.keySet() as List return sortedTags
原有Jenkins Active Choices插件配置无需调整:
参数说明:
"eu-west-1"为ECR仓库所在区域,可替换为实际使用的区域"super-hero-repo"为目标ECR仓库名称,可替换为实际的仓库名
补充说明:如果仓库内镜像总量超过100个,需要通过返回结果中的
nextToken循环拉取全量镜像数据,否则仅会返回前100个镜像的标签。
内容的提问来源于stack exchange,提问作者Dmitrii Kalashnikov
相关产品推荐
相关产品推荐

