Title mostly says it. How can you trigger a Jenkins multibranch pipeline project build from a remote git repository?
The "Trigger builds remotely" build trigger option does not seem to work, since no tokens that you set are saved.
Create a remote Jenkins build trigger in three stepsCreate a Jenkins build job and enable the Trigger builds remotely checkbox. Provide an authentication token; This can be any text string of your choice. Invoke the Jenkins build URL to remotely trigger the build job.
Install Generic Webhook Trigger plugin. Select generic webhook trigger in build trigger actions. Generate a random string and paste in token. Now your job can be triggered with a http request to the following url.
In the new Jenkins Pipeline, under Build Triggers, select the checkbox Trigger builds remotely (e.g., from scripts). Then give Jenkins a token that will be required when triggering the build.
At the moment (Jenkins 2.22) the "Trigger builds remotely" build trigger option is visible in the multibranch pipeline job configuration, but does not work (if you check it and specify a token, it gets reset after saving anyway). According to this, it is intentional that the trigger cannot be set, but a bug that it appears as an option at all.
In the same thread they explain how to trigger builds for each individual project (branch) in a multibranch pipeline project. What I needed was a dynamic setup that would work for branches created after setting up the trigger, so rather than the suggested endpoint from the thread (/job/project-name/job-name/build
, which should have been /job/job-name/project-name/build
, since projects are created from branches in a job), I found that the endpoint to use is /job/job-name/build
. In order for that to work you have to create a user with an API token (go to Manage Jenkins -> Manage Users -> Gear icon -> Show API Token), and use those as username and password in your request.
The solution might be obvious for those used to working with Jenkins REST API, but when you are new to both multibranch pipeline projects and the REST API, it doesn't hurt to be explicit.
I couldn't get the API token as described in the accepted answer because there is no such link called "Manage Users" even though I log in as admin. Instead, I got the token as described in the Jenkins Wiki:
The API token is available in your personal configuration page. Click your name on the top right corner on every page, then click "Configure" to see your API token
Once you have the token, the following curl request will trigger a new build for a multibranch pipeline (Replace placeholders starting with $
)
curl -X POST -u "$jenkins_username:$api_token" "http://$jenkins_url/job/$my-pipeline/job/$branch_name/build?token=BUILD_TOKEN"
Notes:
/
becomes %252F
.token
query parameter is optional.Without disabling the Cross Site Request Forgery (CSRF) protection, the commands you can make use of are
crumb=$(curl -s 'http://USERNAME:API_TOKEN@JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -X POST -H "$crumb" "http://USERNAME:API_TOKEN@JENKINS_URL/job/JOB_NAME/build"
Replace the capital letters with the appropriate values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With