groovy Jenkins管道-读取yaml并附加到列表

pgccezyw  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(353)

我有下面的模板yaml在我的github

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

我试图在Jenkins管道中解析这个yaml文件,并将值附加到如下占位符。

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

我可以使用下面的代码将yaml作为对象读取

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

无法将多个IP地址附加到列表

extEpData.metadata.name = serviceName
 extEpData.metadata.namespace = namespace
 extEpData.subsets[0].ports[0].port = servicePort as int
 for (int i=0; i<=addressList.size(); i++) {
           echo addressList[i]
           extEpData.subsets[0].addresses[0].ip = addressList[i]
  }
  writeYaml file: 'external-ep.yaml', data: extEpData, overwrite: true

addressList数组保存了ip列表。上面的代码没有附加多个ip地址。它只对一个ip地址有效。我做错了什么?

34gzjxbg

34gzjxbg1#

如果在每次迭代中更新嵌套数组/列表中被访问的元素索引,那么就可以开始了:

for (int i=0; i<=addressList.size(); i++) {
  extEpData.subsets[0].addresses[i].ip = addressList[i]
}

但是,这仅在占位符的元素数等于插入的元素数时才成立。这不一定总是成立的,因此您应该按Map而不是按与Map键关联的值追加:

for (int i=0; i<=addressList.size(); i++) {
  extEpData.subsets[0].addresses[i] = ['ip': addressList[i]]
}

相关问题