Groovy / Jenkins-如何在http请求正文中使用for循环

我正在尝试动态读取数组(每个元素是一个字符串),并使用这些字符串值替换当前的硬编码用户名。这是用于在Bitbucket中创建拉取请求。

下面的#1和#2都属于同一类BitbucketUtil.groovy

1:

    def createPullRequest(projectSlug, repoSlug, title, description, sourceBranch, targetBranch) {

//this is reading in the array with the user names

def names = BitbutkcetUtil.getGroupUsers(teamName, activeOnly)

def prResponse = this.steps.httpRequest(

acceptType: 'APPLICATION_JSON',

authentication: this.userId,

contentType: 'APPLICATION_JSON',

httpMode: 'POST',

ignoreSslErrors: true,

quiet: true,

requestBody: """

{

"title": "${title}",

"description": "${description}",

"state": "OPEN",

"open": true,

"closed": false,

"fromRef": { "id": "${sourceBranch}" },

"toRef": { "id": "${targetBranch}" },

"locked": false,

"reviewers": [

//I want to replace this hardcoded names with the string values inside the array `names`

{ "user": { "name": "HardCoded1" } },

{ "user": { "name": "HardCoded2" } },

{ "user": { "name": "HardCoded3" } },

{ "user": { "name": "HardCoded4" } }

]

}

""",

responseHandle: 'STRING',

url: "https://bitbucket.absolute.com/rest/api/latest/projects/${projectSlug}/repos/${repoSlug}/pull-requests",

validResponseCodes: '200:299')

def pullRequest = this.steps.readJSON(text: prResponse.content)

prResponse.close()

return pullRequest['id']

}

2:

   def getGroupUsers(groupName, activeOnly) {

def getUsersResponse = this.steps.httpRequest(

acceptType: 'APPLICATION_JSON',

authentication: this.userId,

ignoreSslErrors: true,

quiet: true,

responseHandle: 'STRING',

url: "https://bitbucket.absolute.com/rest/api/latest/admin/groups/more-members?context=pd-teamthunderbird",

validResponseCodes: '200:299')

def usersPayload = this.steps.readJSON(text: getUsersResponse.content)['values']

getUsersResponse.close()

def users = []

usersPayload.each { user ->

if (!activeOnly || (activeOnly && user['active'])) {

users.add(user['name'])

}

}

return users

//this is returning an array with string elements inside

}

我猜想使用该函数getGroupUsersgroupName参数为teamName),我可以替换函数"reviewers"内部的硬编码字符串createPullRequest。但是我不确定如何在“审阅者”下使用for循环,以便可以动态地输入值:

 "reviewers": [

//I want to replace this hardcoded names with the string values inside the array `names`

{ "user": { "name": "HardCoded1" } },

{ "user": { "name": "HardCoded2" } },

{ "user": { "name": "HardCoded3" } },

{ "user": { "name": "HardCoded4" } }

]

}

任何帮助将不胜感激。

回答:

如果定义了您的姓名,并且您的最终目标是在其中包含所有名称的地方创建一个地图列表,那么您可以仅从collect名称中选择地图。例如

def names = ["HardCoded1", "HardCoded2"]

println([reviewers: names.collect{ [user: [name: it]] }])

// => [reviewers:[[user:[name:HardCoded1]], [user:[name:HardCoded2]]]]

如果您的目标是创建JSON正文,请不要连接字符串。使用Groovy提供的功能来创建JSON。例如

groovy.json.JsonOutput.toJson([

title: title,

state: "OPEN",

reviewers: names.collect{ [user: [name: it]] }],

// ...

])

以上是 Groovy / Jenkins-如何在http请求正文中使用for循环 的全部内容, 来源链接: utcz.com/qa/410219.html

回到顶部