基础API
示例移步另一篇文章
准备工作
/**
* @author PengHuAnZhi
* @ProjectName Jenkins API Demo
* @Description Jenkins连接工具类
* @time 2021/10/8 14:33
*/
public class JenkinsConnectFactory {
private static final String JENKINS_URL = "http://192.168.225.130";
private static final String JENKINS_USERNAME = "PengHuanZhi";
static final String JENKINS_PASSWORD = "123456789";
private static JenkinsHttpClient jenkinsHttpClient = null;
private static JenkinsServer jenkinsServer = null;
public static JenkinsHttpClient getClientInstance() {
if (jenkinsHttpClient == null) {
try {
jenkinsHttpClient = new JenkinsHttpClient(new URI(JENKINS_URL, JENKINS_USERNAME, JENKINS_PASSWORD), JENKINS_USERNAME, "11622ce96b51846c8658a6390253d87f7e");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
return jenkinsHttpClient;
}
public static JenkinsServer getConnection() {
if (jenkinsServer == null) {
try {
jenkinsServer = new JenkinsServer(new URI(JENKINS_URL, JENKINS_USERNAME, JENKINS_PASSWORD), JENKINS_USERNAME, "11622ce96b51846c8658a6390253d87f7e");
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
return jenkinsServer;
}
}
private final JenkinsServer server = JenkinsConnectFactory.getConnection();
private final JenkinsHttpClient client = JenkinsConnectFactory.getClientInstance();
获取非Maven项目构建后生成的Artifact文件
/**
* @param jobName 任务名称
* @param buildNumber 构建号
* @description 根据任务名称获取其某次构建产生的文件
* @author PengHuAnZhi
* @date 2021/10/13 10:27
*/
public void getJobBuildArtifact(String jobName, Integer buildNumber) {
try {
JobWithDetails job = server.getJob(jobName);
List<Build> builds = job.getBuilds().stream().filter(build -> build.getNumber() == buildNumber).collect(Collectors.toList());
Build build;
if (builds.size() != 1) {
throw new Exception("获取构建出错");
} else {
build = builds.get(0);
}
List<Artifact> artifacts = build.details().getArtifacts();
Artifact artifact = artifacts.get(0);
InputStream inputStream = build.details().downloadArtifact(artifact);
String fileName = artifact.getFileName();
File file = new File("C:\\Users\\Administrator\\Desktop\\" + fileName);
//当前模拟的是一个txt文件,所以直接用高级字符流输出到文件了,对于文件类型不确定一般使用字节流好点吧我觉得
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
String str = reader.readLine();
while (str != null) {
writer.write(str);
str = reader.readLine();
}
inputStream.close();
reader.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
获取Maven项目构建后自动归集至Module Builds列表中的Artifact文件
/**
* @param jobName 任务名称
* @param buildNumber 构建号
* @description Maven和普通项目不同,构建产生的文件输出位置为当前module列表下
* @author PengHuAnZhi
* @date 2021/10/13 15:11
*/
public void getMavenJobBuildArtifact(String jobName, Integer buildNumber) {
try {
MavenJobWithDetails mavenJob = server.getMavenJob(jobName);
MavenBuild mavenBuild;
List<MavenBuild> builds = mavenJob.getBuilds().stream().filter(build -> build.getNumber() == buildNumber).collect(Collectors.toList());
if (builds.size() != 1) {
throw new Exception("获取构建出错");
} else {
mavenBuild = builds.get(0);
}
MavenModule mavenModule = mavenBuild.getMavenModule();
List<MavenModuleRecord> moduleRecords = mavenModule.getModuleRecords();
for (MavenModuleRecord record : moduleRecords) {
MavenArtifact mainArtifact = record.getMainArtifact();
//URL拼接
String urlPath = record.getUrl().replace("mavenArtifacts", "artifact") + mainArtifact.getGroupId() + "/" + mainArtifact.getArtifactId() + "/" + mainArtifact.getVersion() + "/" + mainArtifact.getCanonicalName();
URI uri = new URI(urlPath);
InputStream inputStream = client.getFile(uri);
File file = new File("C:\\Users\\Administrator\\Desktop\\" + mainArtifact.getCanonicalName());
byte[] buffer = new byte[inputStream.available()];
FileOutputStream outputStream = new FileOutputStream(file);
int ch;
while ((ch = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, ch);
}
inputStream.close();
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}