[英]Looping through groovy object(List) using each{it} and pass the the elements into a json payload in Jenkins
我在 groovy Jenkinsfile 中有一個包含工作區名稱的列表。 我編寫了一個 each() 循環來遍歷列表,並使用下面端點中的名稱從 api 響應中獲取工作區 ID。
def getWorkspaceId() {
def result = []
Listworkspace.each{
def response = httpRequest(
customHeaders: [
[ name: "Authorization", value: "Bearer " + env.BEARER_TOKEN ],
[ name: "Content-Type", value: "application/vnd.api+json" ]
],
url: "https://app.terraform.io/api/v2/organizations/${TF_ORGNAME}/workspaces/$it
)
def data = new JsonSlurper().parseText(response.content)
println ("Workspace Id: " + data.data.id)
result << data.data.id
}
return result
}
獲取 ID 后,我想將它們作為 json 負載的一部分進行傳遞。
def buildPayload() {
def workspaceID = new JsonSlurper().parseText(getWorkspaceId())
workspaceID.each{
def payload = """
{
"data": {
"attributes": {
"is-destroy":false,
"message":
},
"type":"runs",
"relationships": {
"workspace": {
"data": [
{"id": "$it", "type": "workspaces"}
]
}
}
}
}
}
"""
return payload
}
有沒有一種方法可以遍歷返回的 ID 列表和 append 每個 json object 迭代后的鍵“數據”。 看下面的代碼
"relationships": {
"workspace": {
"data": [
{"id": "id1", "type": "workspaces"},
{"id": "id2", "type": "workspaces"},
{"id": "id3", "type": "workspaces"}
]
進行 api 調用時,它會拋出400 Bad request error
。 我嘗試打印有效載荷,但發現它將整個 ID 列表附加到有效載荷。 任何建議將不勝感激。 謝謝你。
def buildPayload() {
def workspaceID = new JsonSlurper().parseText(getWorkspaceId())
workspaceID.each{
def payload = """
{
"data": {
"attributes": {
"is-destroy":false,
"message":
},
"type":"runs",
"relationships": {
"workspace": {
"data": [
[id1, id2, id3]
]
}
}
}
}
}
"""
return payload
}
我建議使用 JsonOutput class 讓您的生活更輕松。 本質上,只要您的getWorkspaceId()
方法返回一個 ID 列表,您就可以執行如下操作:
import groovy.json.JsonOutput
def buildPayload(def ids) {
def payload = [
data: [
attributes: [
"is-destroy": false,
"message" : "",
],
type: "runs",
relationships: [
workspace: [
data: ids.collect {
return [id: it, type: "workspaces"]
}
]
]
]
]
return JsonOutput.toJson(payload)
}
這將獲取您的 ids 列表中的每個 id,並構建一個 map,其中每個 id 由其編號和 type: workspaces 密鑰對標識。 這一切都包含在更大的有效載荷中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.