Issue
I would like to be able to create a job remotely using the Jenkins REST API and cURL. This provides a workaround for JENKINS-12543, that doesn’t require SSH Key Authentication.
Resolution
First, create a job using the UI. This job can be used to create a base config that can be used to create new jobs.
To retrieve the job config.xml that you made via the UI, to use for creating new jobs:
curl -X GET https://example.com/job/test/config.xml -u username:API_TOKEN -o mylocalconfig.xml
Replace:
-
username:API_TOKENwith your username and password/API_Token -
example.comwith your Jenkins URL -
testwith the name of the job that you created via the UI -
mylocalconfig.xmlwith the name and optionally path of this config file, which is generated locally.
You can now modify this config file locally to suit for needs as required.
Once ready, to use this config to create a new job:
curl -s -X POST 'https://example.com/createItem?name=yourJobName' -u username:API_TOKEN --data-binary @mylocalconfig.xml -H "Content-Type:text/xml"
Replace:
-
username:API_TOKENwith your username:password -
example.comwith your Jenkins URL -
yourJobNamewith the name you would like to give the new job name -
mylocalconfig.xmlwith the name and path to your local config file.
If the output message is an error message like
Error 403 No valid crumb was included in the request
means that the CSRF Protection is enabled in the Jenkins instance, thus the curl command requires the crumb field. In that case, try this:
CRUMB=$(curl -s 'https://example.com/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' -u username:API_TOKEN) curl -s -XPOST 'https://example.com/createItem?name=yourJobName' -u username:API_TOKEN --data-binary @mylocalconfig.xml -H "$CRUMB" -H "Content-Type:text/xml"
Jobs created though the REST API are subjected to migration by the RunIdMigrator on the next Jenkins startup. Please have a look at Jenkins Startup logs show RunIdMigrator logs.
|
See Remote Access API for more.