簡體   English   中英

Jenkins 管道 - 將 yaml 和 append 讀取到列表

[英]Jenkins pipeline - Read yaml and append to a list

我的 github 中有以下模板 yaml

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

我正在嘗試將 Jenkins 管道中的 yaml 文件和 append 值解析為如下所示的占位符。

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 作為 object 讀取

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

無法將 append 多個 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 地址。 我究竟做錯了什么?

如果您在每次迭代時更新嵌套數組/列表中的訪問元素索引,那么您應該對 go 很好:

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

但是,僅當占位符的元素數量等於插入元素的數量時,這才是正確的。 這不一定總是正確的,因此您應該通過 Map 而不是通過與 Map 鍵關聯的值來 append :

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM