Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jenkins REST API Create job

Tags:

jenkins

I'm creating a new job in Jenkins using the REST API. I tried the below curl command lines, but they are throwing an error

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" 

Error:


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> 

like image 214
Roshan007 Avatar asked Jul 01 '16 05:07

Roshan007


People also ask

How create Jenkins job using config XML?

To create a new job, post config. xml to this URL with query parameter name=JOBNAME . You need to send a Content-Type: application/xml header. You'll get 200 status code if the creation is successful, or 4xx/5xx code if it fails.


1 Answers

Jenkins by default has CSRF Protection enabled which prevents one-click attacks. To invoke the request, you need to obtain the crumb from /crumbIssuer/api/xml using your credentials and include it into your request.

For example:

CRUMB=$(curl -s 'http://USER:TOKEN@localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') 

Then you can create a job (by including the crumb into your header):

curl -X POST -H "$CRUMB" "http://USER:TOKEN@localhost:8080/createItem?name=NewJob" 

If the above won't work, check your crumb (echo $CRUMB) or run curl with -u USER:TOKEN.

For a more detailed explanation, see: Running jenkins jobs via command line.

like image 132
kenorb Avatar answered Sep 21 '22 08:09

kenorb