Jenkins REST API Создать работу
Я создаю новую работу в Jenkins, используя REST API. Я попробовал приведенные ниже командные строки curl, но они выдают ошибку
curl -i -X POST --user "admin:<API token>" --data-binary "@C:\mylocalconfig.xml" -H "Content-Type: text/xml" http://localhost:8080/createItem?name=NewJob
curl -X POST -u <username>:<pass> -H "Content-Type:application/xml" -d "@C:\mylocalconfig.xml" "http://localhost:8080/createItem?name=AA_TEST_JOB3"
Ошибка:
HTTP/1.1 403 No valid crumb was included in the request
Date: Fri, 01 Jul 2016 05:25:59 GMT
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=ISO-8859-1
Cache-Control: must-revalidate,no-cache,no-store
Content-Length: 360
Server: Jetty(9.2.z-SNAPSHOT)
<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</h2>
<p>Problem accessing /createItem. Reason:
<pre> No valid crumb was included in the request</pre></p><hr><i><small>Power
ed by Jetty://</small></i><hr/>
</body>
</html>
Ответы
Ответ 1
По умолчанию в Jenkins включена защита CSRF, которая предотвращает атаки одним щелчком мыши. Чтобы вызвать запрос, вам нужно получить крошку из /crumbIssuer/api/xml
используя свои учетные данные, и включить ее в свой запрос.
Например:
CRUMB=$(curl -s 'http://USER:[email protected]:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
Затем вы можете создать задание (включив крошку в заголовок):
curl -X POST -H "$CRUMB" "http://USER:[email protected]:8080/createItem?name=NewJob"
Если вышеописанное не сработает, проверьте свою крошку (echo $CRUMB
) или запустите curl
с помощью -u USER:TOKEN
.
Для более подробного объяснения см.: Запуск заданий jenkins через командную строку.
Ответ 2
Если вы используете Postman для запуска запросов, используя приведенный выше пример @kenorb, получите крошку
Чтобы создать папку на корневом уровне, используя конечную точку createItem
Чтобы создать подпапку в папке, созданной выше, используя конечную точку createItem