Java client is built on the top of jclouds for working with Jenkins REST API.
Client's can be built like so:
JenkinsClient client = JenkinsClient.builder()
.endPoint("http://127.0.0.1:8080") // Optional. Defaults to http://127.0.0.1:8080
.credentials("admin:password") // Optional.
.build();
SystemInfo systemInfo = client.api().systemApi().systemInfo();
assertTrue(systemInfo.jenkinsVersion().equals("1.642.4"));
Can be found in maven like so:
<dependency>
<groupId>io.github.cdancy</groupId>
<artifactId>jenkins-rest</artifactId>
<version>X.Y.Z</version>
<classifier>sources|tests|javadoc|all</classifier> (Optional)
</dependency>
Client instances do NOT need to supply the endPoint or credentials as a part of instantiating the JenkinsClient object. Instead one can supply them through system properties, environment variables, or a combination of the two. System properties will be searched first and if not found, will attempt to query the environment.
Setting the endpoint
can be done with any of the following (searched in order):
jenkins.rest.endpoint
jenkinsRestEndpoint
JENKINS_REST_ENDPOINT
When none is found, the endpoint is set to http://localhost:8080
.
Setting the credentials
can be done with any of the following (searched in order):
jenkins.rest.api.token
jenkinsRestApiToken
JENKINS_REST_API_TOKEN
jenkins.rest.credentials
jenkinsRestCredentials
JENKINS_REST_CREDENTIALS
When none is found, no authentication is used (anonymous).
jenkins-rest credentials can take 1 of 3 forms:
JenkinsClient.builder().apiToken("admin:apiToken")
JenkinsClient.builder().credentials("admin:password")
JenkinsClient.builder().credentials("YWRtaW46cGFzc3dvcmQ=")
JenkinsClient.builder().apiToken("YWRtaW46YXBpVG9rZW4=")
The Jenkins crumb is automatically requested when POSTing using the anonymous and the username:password authentication methods. It is not requested when you use the apiToken as it is not needed in this case. For more details, see
The mock and live tests provide many examples that you can use in your own code.
Running mock tests can be done like so:
./gradlew clean build mockTest
Running integration tests require an existing jenkins instance which can be obtained with docker:
docker build -t jenkins-rest/jenkins src/main/docker
docker run -d --rm -p 8080:8080 --name jenkins-rest jenkins-rest/jenkins
./gradlew clean build integTest
If you use the provided docker instance, there is no other preparation necessary. If you wish to run integration tests against your own Jenkins server, the requirements are outlined in the next section.
admin
user (credentials used by the tests can be changed in the gradle.properties file) with ADMIN
role (required as the tests install plugins)java.lang.NoClassDefFoundError: com/cloudbees/hudson/plugins/folder/properties/FolderCredentialsProvider
Safe HTML
This project provides instructions to setup a pre-configured Docker container
gradle.properties
filecredentials
(username:password) authentication method but this can be changed to use the API Token. See the gradle.properties
file.integTest
gradle task sets various System Properties