开始使用Jersey REST和JSON参数进行Jenkins参数化构建



我必须使用Jersey REST API以编程方式启动Jenkins参数化构建,参数的值必须作为JSON对象提供。欢迎任何提示或示例

所以,看起来你自己没有尝试过。我可以给你一个快速的5分钟解决方案,应该重新制作,以清楚,不那么难看,但它有效:)

import java.util.ArrayList;
import java.util.List;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

public class JenkinsJob {
    public static void main(String[] args) {
        runParamJob("http://jenkins.host/", "SOME_JOB", "{"object":"test"}");
    }
    public static String runParamJob(String url, String jobName, String paramsJSON) {
        String USERNAME = "user";
        String PASSWORD = "pass";
        Client client = Client.create();
        client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(USERNAME, PASSWORD));
        WebResource webResource = client.resource(url + jobName + "/buildWithParameters?PARAMETER=" + paramsJSON);
        ClientResponse response = webResource.type("application/json").get(ClientResponse.class, paramsJSON);
        String jsonResponse = response.getEntity(String.class);
        client.destroy();
        System.out.println("Server response:" + jsonResponse);
        return jsonResponse;
    }
}

为了使用rest API进行参数化构建,您应该使用POST而不是根据Jenkins wiki获取。这里有一个例子。确保您发送的json与文档中的指示一致。以以下json为例:
{"参数":[{"名称":"id","价值":" 123 "},{"名称":"冗长"、"价值":"高 "}]}

您有两个参数,每个参数都有名称和值。如果我将使用@stanjer在前一个答案中写的内容,json应该是这样的:{"参数":[{"名称":"对象","价值":"测试 "}]}

此外,这里有一个关于它的很好的讨论

我不建议使用USER:PASSWORD,而是使用可以在Jenkins作业UI中配置的令牌。这是一个实现带/不带参数的构建器模式的类。

import java.util.Map;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl;


public class JenkinsTrigger {

private String host;
private String jenkinsToken;
private String jobParams;
private MultivaluedMap<String,String> queryParams = new MultivaluedMapImpl();
private Client client = Client.create();
private WebResource webResource;
private JenkinsTrigger(JenkinsTriggerBuilder jenkinsTriggerBuilder){
    this.host = jenkinsTriggerBuilder.host;
    this.jenkinsToken = jenkinsTriggerBuilder.jenkinsToken;
    this.jobParams = getJobParams(jenkinsTriggerBuilder.jobParams);
    webResource = client.resource(this.host);
    queryParams.add("token", jenkinsToken);
}
public void trigger(){
    ClientResponse response = webResource.path(this.host).queryParams(queryParams)
            .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
            .header("Content-type", "application/x-www-form-urlencoded")
            .post(ClientResponse.class, jobParams);
    if (response.getStatus() != 201) {
        throw new RuntimeException("Failed : HTTP error code : "
                + response.toString());
    } else {
        System.out.println("Job Trigger: " + host);
    }
}
private String getJobParams(Map<String,String> jobParams){
    StringBuilder sb = new StringBuilder();
    sb.append("json={"parameter":[");
    jobParams.keySet().forEach(param -> {
        sb.append("{"name":""+param+"",");
        sb.append(""value":""+ jobParams.get(param) + ""},");
    });
    sb.setLength(sb.length() - 1);
    sb.append("]}");
    System.out.println("Job Parameters:" +  sb.toString());
    return sb.toString();
}

    public static class JenkinsTriggerBuilder {
        private String host;
        private String jenkinsToken;
        private Map<String,String> jobParams = null;
        public JenkinsTriggerBuilder(String host, String jenkinsToken){
            this.host = host;
            this.jenkinsToken = jenkinsToken;
        }
        public JenkinsTriggerBuilder jobParams(Map<String,String> jobParams){
            this.jobParams = jobParams;
            return this;
        }
        public JenkinsTrigger build(){
            return new JenkinsTrigger(this);
        }
    }
}

下面是使用示例:

Map<String, String> params = new HashMap<>();
params.put("ENV", "DEV103");
JenkinsTrigger trigger = new JenkinsTriggerBuilder("https://JENKINS_HOST/job/JOB_NAME/buildWithParameters","JOB_TOKEN").jobParams(params).build();
trigger.trigger();

祝你好运

最新更新