Я пытался выяснить, как правильно получить крошку Дженкинса, и сделать вызов для сборки в Дженкинсе с Python.
Недавно мы обновили Jenkins, и теперь для выполнения запросов POST требуется крошка Jenkins.
На основании всей прочитанной документации я делаю это правильно.
Я могу переписать всю свою базу кода для использования библиотек jenkinsapi, но я надеялся выяснить, что я делаю здесь неправильно.
До обновления мне нужно было только включить заголовок Basi c Auth, и запрос POST был бы успешным.
Единственное, о чем я могу думать, это может вызывать проблемы могут заключаться в том, что все наши серверы связаны с неподписанными сертификатами, но я игнорирую эти предупреждения, и снова это работало раньше, игнорируя предупреждения.
Любая помощь будет принята с благодарностью.
Код:
import requests
import json
headers = {'Authorization': 'Basic #########################'}
crumbdata = requests.get('https://jenkinsserver/crumbIssuer/api/json', headers=headers, verify=False)
print(crumbdata.json())
headers[crumbdata.json()['crumbRequestField'].encode('utf-8')]=crumbdata.json()['crumb'].encode('utf-8')
url = "https://jenkinsserver/view/all/job/my-job-name/build"
jsonData = "{'json': {'parameter' : {'Task_Type' : 'status'}}}"
print("Headers = " + str(headers))
print("Json Data = " + jsonData)
response = requests.post(url, jsonData, headers=headers, verify=False)
print("Status Code = " + response.status_code)
print(response.text)
Выход:
{u'crumbRequestField': u'Jenkins-Crumb', u'_class': u'hudson.security.csrf.DefaultCrumbIssuer', u'crumb': u'17a053554314a1612e0f24b2d1ce49262fa5923a280072b3309d63879d031fb5'}
Headers = {'Jenkins-Crumb': '17a053554314a1612e0f24b2d1ce49262fa5923a280072b3309d63879d031fb5', 'Authorization': 'Basic ampib3ludDE6VE0kRmVocyYzNg=='}
Json Data = {'json': {'parameter' : {'Task_Type' : 'status'}}}
Status Code = 403
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body><h2>HTTP ERROR 403 No valid crumb was included in the request</h2>
<table>
<tr><th>URI:</th><td>/view/all/job/my-job-name/build</td></tr>
<tr><th>STATUS:</th><td>403</td></tr>
<tr><th>MESSAGE:</th><td>No valid crumb was included in the request</td></tr>
<tr><th>SERVLET:</th><td>Stapler</td></tr>
</table>
<hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.27.v20200227</a><hr/>
</body>
</html>