How to implement a remote Jenkins build trigger with a URL
The ability to implement a remote Jenkins build trigger is a common requirement for many continuous integration and continuous delivery pipelines. Not surprisingly, this capability is baked into every Jenkins job you create.
However, developers need to click the right buttons in the Jenkins admin console to enable the trigger, and provide the correct credentials to not encounter a 403 error.
Create a remote Jenkins build trigger in three steps
Developers can follow these three steps to implement a remote Jenkins build trigger:
- Create 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.
- Note: A username and password are required to avoid a 403 error
Avoid remote Jenkins build 403 errors
Developers will need to provide someone’s username and password with rights to invoke the Jenkins build job to avoid a 403 error. They can accomplish this by prepending the username and password to the URL.
http://user:[email protected]/job/RemoteTriggerExample/build?token=abc-123
However, any network sniffer can see these unencrypted credentials. In a production facility, you’ll be required to use SSL and HTTPS.
Your intro to GitHub Actions training course |
---|
Here’s how to get started with GitHub Actions:
Follow these tutorials to learn GitHub Actions fast. |
Test a remote Jenkins build trigger
There are multiple ways to test a remote Jenkins build trigger. The easiest way is to paste the remote Jenkins build trigger URL into a web browser’s address bar. Once this is done, a developer will see a new build initiated in the Jenkins console.
Another way is by script. A developer can invoke the following CURL command to test the build URL:
$ curl -I http://user:[email protected]/job/RemoteTriggerExample/build?token=abc-123
Jenkins and the Java HttpClient
For even more control over how and when a remote Jenkins build job is triggered, a full stack developer might want to invoke the build URL as part of a Java or Groovy program. Use the following code to invoke a Jenkins build in Java through the HttpClient class:
package com.mcnz.jenkins; import java.net.URI; import java.net.http.*; import java.net.http.HttpResponse.BodyHandlers; /* Trigger builds remotely in JenkinsCI with Java Example */ public class JenkinsTrigger { public static void main(String[] args) throws Exception { /* Prepend credentials to fix the Jenkins remote build 403 error */ String JENKINS_URL = "http://user:[email protected]/job/RemoteTriggerExample/build?token=abc-123"; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(JENKINS_URL)).build(); HttpResponse<String> response = client.send(request, BodyHandlers.ofString()); System.out.println(response.toString()); } }
Jenkins and GitHub remote build triggers
However, one way that developers shouldn’t use is GitHub. If a developer uses GitHub to invoke a Jenkins job it will result in the following error:
403 No valid crumb was included in the request
You can work around this program, however. Install the Jenkins GitHub plugin and use the Jenkins GitHub webhook to integrate Jenkins and GitHub.