如何使用 Java 将文件传递给 Jenkins

How to pass file to Jenkins with Java

我创建了一个参数化的 Jenkins 作业,我正在将变量从我的 Java 传递给它。

这里是 Java:

final HttpClient client = new HttpClient();
final PostMethod buildMethod = new PostMethod(Constants.SVN2GIT_QA_URL);
buildMethod.setParameter(Constants.GIT_URL_PARAM, gitUrl);
buildMethod.setParameter(Constants.PASSWORD_PARAM, password);
buildMethod.setParameter(Constants.SVN2GIT_COMMAND, svn2gitCommand);
buildMethod.setParameter(Constants.SVN2GIT_EMAIL, email);
buildMethod.setParameter(Constants.REPO_NAME, repoName);
client.executeMethod(buildMethod);

所以这非常简单,因为我只将 String 传递给作业。但是,我现在想使用 Jenkins 中的 File Parameter 将 A File 传递给作业。

我看到的一件事是 Jenkins 中的 File Parameter 有一个 File Location 和一个 File Description。所以甚至不确定如何将它设置为 Java.

中的参数

这可能吗?

这是一个可运行的class。使用 apache-httpclient (4.5.1) 和相关的罐子。关键是使用 /build/ URL 提交多部分表单。远程API描述here

package my;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.FormBodyPartBuilder;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.HttpClientBuilder;

import java.io.File;
import java.io.IOException;

class JenkinsClientExample {
    void helloJenkins() throws IOException {

        String server = "localhost";
        String jenkinsHost = "http://" + server + ":8080";
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        HttpClient httpClient = httpClientBuilder.build();


        String payLoad="{ \"parameter\": [{\"name\":\"FILE1_PARAM\",\"file\":\"file0\"}, {\"name\":\"FILE2_PARAM\",\"file\":\"file1\"},{\"name\":\"STRING_PARAM\", \"value\":\"2014\"}, " +
                "{\"name\":\"BOOLEAN_PARAM\", \"value\":\"TRUE\"}  ] }";
        File file = new File("c:/dummy.txt");
        File file2 = new File("c:/another.txt");


        FormBodyPartBuilder formBodyPartBuilder3 = FormBodyPartBuilder.create("file0", new FileBody(file, ContentType.TEXT_PLAIN));
        FormBodyPartBuilder formBodyPartBuilder4 = FormBodyPartBuilder.create("file1", new FileBody(file2, ContentType.TEXT_PLAIN));
        FormBodyPartBuilder formBodyPartBuilder1 = FormBodyPartBuilder.create("json", new StringBody(payLoad, ContentType.TEXT_PLAIN));

        HttpEntity entity = MultipartEntityBuilder
                .create()

                .addPart(formBodyPartBuilder3.build())
                .addPart(formBodyPartBuilder4.build())
                .addPart(formBodyPartBuilder1.build())
                .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                .build();

        //must be the build URL not buildWithParameters
        HttpPost httpPost = new HttpPost(jenkinsHost + "/job/fake.UpdateCQ_VersionFixed/build"); 
        httpPost.setEntity(entity);

        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity result = response.getEntity();
        System.out.println(result);
        System.out.println(response.toString());

    }

    public static void main(String[] args) {
        try {
            new JenkinsClientExample().helloJenkins();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}