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
相关产品推荐
相关产品推荐

