我正在尝试使用Python Requests库(2.17.3和Python 3.6)启动一个绝对的Jenkins工作,但我遇到了问题。
我已经使用Curl进行了测试,它可以像我期望的那样启动Jenkins的工作。以下是我使用的curl命令的简化版本。
curl -X POST -H "$crumb" $jenkins_url/job/$job_name/build?token=$job_token \
--user $auth \
--data-urlencode json='
{"parameter":
[
{"name":"parameter1", "value":"test1"},
{"name":"parameter2", "value":"test2"},
{"name":"git_repo", "value":"'$my_repo'"},
{"name":"git_tag", "value":"'$git_tag'"}
]
}'
使用Python做同样的事情会导致问题。这是(基本上)我在Python中所做的事情。
import requests
job_url = JENKINS_URL + "/job/" + JOB_NAME + "/build?token=" + JOB_TOKEN
params = {
"parameter":
[
{"name":"parameter1", "value":"test1"},
{"name":"parameter2", "value":"test2"},
{"name":"git_repo", "value":"'$my_repo'"},
{"name":"git_tag", "value":"'$git_tag'"}
]
}
job = requests.post(job_url, headers=headers, auth=(JENKINS_USER, JENKINS_PASS), data=params)
当我检查回复时,我在返回的Error 400 This page expects a form submission
中得到job.content
。查看作业对象中的内容类型,我发现它设置为text/html
并且看起来不对,但我不知道它为什么不尊重标题应该被设定。
print(job.headers)
{'Server': 'nginx/1.10.0 (Ubuntu)', 'Date': 'Sat, 10 Jun 2017 01:57:04 GMT', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '392', 'Connection': 'keep-alive', 'X-Content-Type-Options': 'nosniff', 'Set-Cookie': 'JSESSIONIDXXX;Path=/;Secure;HttpOnly', 'Cache-Control': 'must-revalidate,no-cache,no-store'}
我已尝试在代码中手动设置Content-Type
标题,但它似乎没有什么区别。
headers['Content-Type'] = 'application/x-www-form-urlencoded'
我做错了什么或丢失了吗?
答案 0 :(得分:1)
在此答案中使用/buildWithParameters
代替/build
:https://stackoverflow.com/a/35913411/6090676。您可以在url中指定参数作为查询参数。你会爱上它的。 :)