Jenkins Groovy流水线脚本批量删除指定AWS负载均衡器问题
解决Jenkins Groovy流水线遍历删除负载均衡器的问题
直接修正查询逻辑并实现遍历删除,步骤如下:
1. 修正负载均衡器ARN查询
你当前的jq输出存在键名错误(应为LoadBalancerARN而非LoadBalancerName),建议直接提取ARN数组简化后续处理:
def loadBalancerArnsOutput = sh( returnStdout: true, script: """ aws elbv2 describe-load-balancers | jq -r '[.LoadBalancers[] | select(.LoadBalancerName | startswith("loadbalancer-alb-")) | .LoadBalancerARN]' """ ).trim()
-r参数让jq输出原始字符串,避免JSON引号干扰;trim()去除输出首尾换行和空格,确保JSON解析正常。
2. 将JSON字符串转为Groovy可遍历对象
有两种实现方式可选:
方法一:使用Jenkins内置readJSON(推荐)
需先安装Pipeline Utility Steps插件:
def arnList = readJSON(text: loadBalancerArnsOutput)
方法二:使用Groovy原生JsonSlurper(无需插件)
import groovy.json.JsonSlurper def jsonSlurper = new JsonSlurper() def arnList = jsonSlurper.parseText(loadBalancerArnsOutput)
3. 遍历执行删除操作
循环遍历ARN列表,逐个执行删除命令:
arnList.each { arn -> sh """ aws elbv2 delete-load-balancer \ --load-balancer-arn "${arn}" """ echo "已删除负载均衡器:${arn}" }
完整流水线代码示例
pipeline { agent any stages { stage('Delete Target Load Balancers') { steps { script { // 查询目标负载均衡器ARN数组 def loadBalancerArnsOutput = sh( returnStdout: true, script: """ aws elbv2 describe-load-balancers | jq -r '[.LoadBalancers[] | select(.LoadBalancerName | startswith("loadbalancer-alb-")) | .LoadBalancerARN]' """ ).trim() // 解析为Groovy列表 def arnList = readJSON(text: loadBalancerArnsOutput) // 遍历删除 if (arnList.isEmpty()) { echo "未找到符合条件的负载均衡器" } else { arnList.each { arn -> sh """ aws elbv2 delete-load-balancer \ --load-balancer-arn "${arn}" """ echo "已删除负载均衡器ARN:${arn}" } } } } } } }
关键注意点
- 确保Jenkins节点已配置AWS凭证,且拥有
elbv2:DescribeLoadBalancers和elbv2:DeleteLoadBalancer权限 - 若节点未安装jq,可改用AWS CLI原生
--query参数替代:script: """ aws elbv2 describe-load-balancers --query 'LoadBalancers[?starts_with(LoadBalancerName, `loadbalancer-alb-`)].LoadBalancerARN' --output json """
内容的提问来源于stack exchange,提问作者Kerbol
相关产品推荐
相关产品推荐

