如何为删除AWS ECR镜像的Jenkins任务添加选择删除项的下拉列表?
给Jenkins ECR镜像删除任务添加下拉选择功能
完全可以实现,你可以通过Jenkins流水线的input步骤,动态拉取ECR仓库中的镜像列表生成下拉选项,让你选择要删除的具体镜像。以下是修改后的流水线代码:
pipeline { agent any environment { AWS_ACCOUNT_ID="0000000021764" AWS_DEFAULT_REGION="us-east-1" REPOSITORY_NAME = "testio" ECR_REGISTRY = "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com" } stages{ stage('获取镜像列表并选择要删除的项') { steps { script { // 拉取ECR仓库中所有镜像的ID(包含标签和镜像摘要) def imageIdsJson = sh( script: "aws ecr list-images --repository-name ${REPOSITORY_NAME} --query 'imageIds[*]' --output json", returnStdout: true ).trim() // 解析JSON,生成下拉选项:将镜像标签或摘要作为显示文本,保留完整imageId结构作为值 def imageList = readJSON text: imageIdsJson def choices = imageList.collect { imageId -> def displayText = imageId.imageTag ? "Tag: ${imageId.imageTag}" : "Digest: ${imageId.imageDigest.split(':')[1].take(12)}" ["${displayText}": groovy.json.JsonOutput.toJson(imageId)] }.sum() // 弹出输入框让用户选择要删除的镜像(支持单选,需多选可改为multiChoice参数) selectedImages = input( id: 'imageSelection', message: '选择要删除的镜像:', parameters: [ choice( name: 'TARGET_IMAGES', choices: choices.keySet().sort(), description: '选择需要删除的镜像项' ) ] ) // 将选中的选项转换回imageIds格式的JSON数组 selectedImageIds = "[${choices[selectedImages]}]" } } } stage('删除选中的镜像') { steps { script{ docker.withRegistry("https://${ECR_REGISTRY}") { sh """ aws ecr batch-delete-image \ --repository-name ${REPOSITORY_NAME} \ --image-ids '${selectedImageIds}' """ } } } } } }
关键说明:
- 动态生成选项:通过
aws ecr list-images拉取仓库内所有镜像的ID信息,解析后生成易识别的显示文本(优先显示标签,无标签则显示镜像摘要的前12位)。 - 用户选择交互:使用
input步骤弹出下拉选择框,默认单选,若需要多选可将参数改为multiChoice。 - 镜像删除:将用户选中的镜像ID转换为AWS CLI要求的JSON格式,执行
batch-delete-image命令完成删除。
注意事项:
- 确保运行Jenkins任务的节点已配置AWS权限(通过IAM角色、环境变量或凭证),能正常调用ECR API。
- 如果仓库内镜像数量极多,下拉列表会过长,可考虑添加过滤逻辑(比如只显示近30天的镜像)或改用文本输入匹配标签。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

