You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline读取YAML并批量添加IP地址问题排查

问题分析与解决:Jenkins Pipeline批量生成Endpoints多IP配置

存储在GitHub的Endpoints模板YAML:

kind: Endpoints
apiVersion: v1
metadata:
 name: SERVICENAME
 namespace: NAMESPACE
subsets:
 - addresses:
     - ip: SERVICEADDRESS
   ports:
     - port: SERVICEPORT

期望生成的多IP Endpoints配置:

kind: Endpoints
apiVersion: v1
metadata:
 name: test
 namespace: testnamespace
subsets:
 - addresses:
     - ip: 10.22.33.22
     - ip: 10.22.11.33
   ports:
     - port: 1042

你当前代码只保留最后一个IP的问题出在两点:

  • 循环里一直修改extEpData.subsets[0].addresses[0].ip,本质是重复替换同一个地址对象的IP值,没有新增新的地址条目
  • 循环条件i<=addressList.size()会触发数组越界,因为数组索引范围是0到addressList.size()-1,当i等于列表长度时,addressList[i]会报错

修正后的完整代码

def extEpData = readYaml (file: 'external-ep.yaml')

// 替换元数据和端口信息
extEpData.metadata.name = serviceName
extEpData.metadata.namespace = namespace
extEpData.subsets[0].ports[0].port = servicePort as int

// 清空原有地址列表,批量添加新IP
extEpData.subsets[0].addresses = []
for (int i=0; i < addressList.size(); i++) {
    echo addressList[i]
    extEpData.subsets[0].addresses.add( [ip: addressList[i]] )
}

// 也可以用更简洁的写法直接生成地址列表
// extEpData.subsets[0].addresses = addressList.collect { [ip: it] }

writeYaml file: 'external-ep.yaml', data: extEpData, overwrite: true

内容的提问来源于stack exchange,提问作者Upen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:06:18