General
The following post is document how to invoke a job using Jersery client in Java on Jenkins
Assumptions
- You are familiar with Jenkins and have permissions to create a new job
 - I've used Jenkins version is 1.651.1 ( I'm guessing it will work on previous versions but I did not check)
 - You are familiar with Maven
 - You have IntelliJ ( I used Community Edition 2016.1)
 
Setup
Jenkins
Creating the job
- Connect your Jenknis
 - Click on New Item
 - In Item name type 'hello_world'
 - Select 'Freestyle project'
 - Press ok
 
Configuring the job
- Click on the job
 - Press on the configure link from the left
 - Check the 'This build is parameterized'
 - Click on 'Add Parameter'
 - Choose String Parameter
 - In the name type 'firstname' (Leave the Default value and description empty)
 - Scroll down to the Build section
 - Click on 'Add build step' and choose Execute shell
 - type 'echo ${firstname}'
 
Test the job
- Click on the 'Build with Parameters'
 - Fill in a name click on the build number (should be #1) in case this job is new
 - Click on Console Output
 - You should see something like this
 
+ echo checking
checking
Java
Creating the project
- Open IntelliJ
 - Click on 'Create New Project'
 - Choose maven and click next
 - GroupId: com.tzach.jenkins
 - ArtifactId: jerseyclient
 - Project name: jersey_client_jenkins
 - Open the pom.xml file
 - Add the following
 
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.22.2</version>
        </dependency>
    </dependencies>
- Click on Enable auto import
 - Click on Maven from the right and choose compile
 - On the bottom you should see 'Process finished with exit code 0'
 
Now let's write some code
you can see the class @ https://github.com/tzachs/JenkinsJerseyClient/
- Create a new class named JenkinsJerseyClient
 - Create the following method: Response invoke(String username, String password, String firstname)
 - Paste the following
 
String target = "http://myjenkins:8080/job/hello_world/buildWithParameters";
HttpAuthenticationFeature httpAuthenticationFeature = HttpAuthenticationFeature.basicBuilder()
                .credentials(username, password)
                .build();
ClientConfig clientConfig = new ClientConfig();
clientConfig.register(httpAuthenticationFeature);
Client client = ClientBuilder.newClient(clientConfig);
WebTarget webTarget = client.target(target);
// Parameters needed for the job
Form form = new Form();
form.param("firstname", firstname);
// Sending invoke as POST
return webTarget.request(MediaType.APPLICATION_JSON_TYPE)
   .post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
- Replace the URL of jenkins to your jenkins
 - Create a main method, and paste the following:
 
 System.out.println(new JenkinsJerseyClient().invoke("tzachs","tzachs_password","tzach").getStatus());
- Replace 'tzachs' with your username
 - Replace 'tzachs_password' with your password
 - Replace 'tzach' with the parameters you need
 - Full code looks like this:
 
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
 * Created by tzachs on 5/19/2016.
 */
public class JenkinsJerseyClient {
    public Response invoke(String username, String password, String firstname){
        String target = "http://myjenkins:8080/job/hello_world/buildWithParameters";
        HttpAuthenticationFeature httpAuthenticationFeature = HttpAuthenticationFeature.basicBuilder()
                .credentials(username, password)
                .build();
        ClientConfig clientConfig = new ClientConfig();
        clientConfig.register(httpAuthenticationFeature);
        Client client = ClientBuilder.newClient(clientConfig);
        WebTarget webTarget = client.target(target);
        Form form = new Form();
        form.param("firstname", firstname);
        return webTarget.request(MediaType.APPLICATION_JSON_TYPE)
                .post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
    }
    public static void main(String[] args) {
        System.out.println(new JenkinsJerseyClient().invoke("tzachs","tzachs_password","tzach").getStatus());
    }
}
Run
- Run the main, you should see in the console log 201. If you see it, it's working. Go to jeknins see you have a new build number
 
No comments:
Post a Comment