如何将POST请求主体中的参数传递给Jenkins远程触发的作业?

wgeznvg7  于 2023-06-21  发布在  Jenkins
关注(0)|答案(2)|浏览(196)

我已经创建了一个Jenkins作业,可以通过POST API调用(即buildWithParameters端点)。
如果我在URL中编码参数,它就可以正常工作。请参见下面的示例:

http://localhost:80/job/remote-job-2/buildWithParameters?token=password123&org=example.com

但是,我想在这个POST请求的主体中传递参数,如下所示:

{
"token": "password123"
"org" : "example.com"
}

注:我能找到的最接近的答案是What is the format of the JSON for a Jenkins REST buildWithParameters to override the default parameters values。不幸的是,当我在postman上运行这个时,这对我不起作用。失败,出现+500服务器错误。

vc6uscn9

vc6uscn91#

经过多次测试,发送了一个json:

'{
  "parameter": [
                 {"name":"token", "value":"password123"}, 
                 {"name":"org", "value":"example.com"}
               ]
}'

'{
   {"name":"token", "value":"password123"},
   {"name":"org", "value":"example.com"}
}'

许多其他的组合只有通过将参数作为标准的html表单字段发送才能对我起作用。
例如在java/spring/restTemplate中:

MultiValueMap<String, String> jobParams= new LinkedMultiValueMap<>();
jobParams.add("token", "password123");
jobParams.add("org", "example.com");
return restTemplate.exchange(jarvisUri, HttpMethod.POST, new HttpEntity<>(jobParams, headers), String.class).getBody();
tf7tbtn2

tf7tbtn22#

在python中,我被逼疯了,直到我看到为了发布 form data,我必须传递一个字典给“data=",而不是一个json字符串。下面是一个例子:

r = requests.post('http://localhost:8080/job/Test/job/WithParams/buildWithParameters', auth = ('a_username', 'a_password'), data = { "delay": "0","Weight": "32", "Height": "14"})

“延迟”:“0”也将立即构建,忽略Jenkins作业上设置的任何“静默期”。

相关问题