簡體   English   中英

使用每個 {it} 遍歷 groovy 對象(列表)並將元素傳遞到 Jenkins 中的 json 有效載荷

[英]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.

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