Commit cd469d5a authored by 黎博's avatar 黎博

新增获取jenkins构建信息接口

parent 296382a3
......@@ -171,6 +171,12 @@
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>com.offbytwo.jenkins</groupId>
<artifactId>jenkins-client</artifactId>
<version>0.3.8</version>
</dependency>
</dependencies>
<build>
......
package cn.qg.qaplatform.stools.controller;
import cn.qg.qaplatform.stools.utils.JenkinsApi;
import cn.qg.qaplatform.stools.vo.BuildInfo;
import cn.qg.qaplatform.utils.JsonResult;
import com.offbytwo.jenkins.model.Build;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@CrossOrigin
@RestController
@RequestMapping("/jenkins")
public class JenkinsBuildController {
/**
* 获取构建信息列表
* @param jobName 任务名称
* @param num 获取的数量
* @param project 项目名,非必填
* @return 构建信息列表
* @throws IOException
*/
@GetMapping("/buildlist")
public JsonResult getLatestBuildInfo(@RequestParam String jobName,
@RequestParam Integer num,
@RequestParam(required = false) String project) throws IOException {
JenkinsApi jenkinsApi = new JenkinsApi();
List<Build> buildList;
if (project == null) {
buildList = jenkinsApi.getJobBuildList(jobName, num);
} else {
buildList = jenkinsApi.getJobBuildList(jobName, num, project);
}
List<BuildInfo> buildInfoList = new ArrayList<>();
for (Build build: buildList) {
BuildInfo buildInfo = new BuildInfo();
buildInfo.setProject(build.details().getParameters().get("GIT_REPO"));
buildInfo.setBranch(build.details().getParameters().get("BRANCH_NAME"));
buildInfo.setNamespace(build.details().getParameters().get("NAMESPACE"));
buildInfo.setUserName(build.details().getCauses().get(0).getUserName());
buildInfo.setResult(build.details().getResult().toString());
buildInfo.setCreateAt(new Date(build.details().getTimestamp()));
buildInfoList.add(buildInfo);
}
return JsonResult.success(buildInfoList);
}
/**
* 获取job列表
* @return
*/
@GetMapping("/joblist")
public JsonResult getJenkinsJobList() {
JenkinsApi jenkinsApi = new JenkinsApi();
return JsonResult.success(jenkinsApi.getJobList());
}
}
package cn.qg.qaplatform.stools.utils;
import cn.qg.qaplatform.stools.vo.BuildInfo;
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.helper.Range;
import com.offbytwo.jenkins.model.*;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.*;
public class JenkinsApi {
// Jenkins 对象
private JenkinsServer jenkinsServer;
// http 客户端对象
// private JenkinsHttpClient jenkinsHttpClient;
// 连接 Jenkins 需要设置的信息
static final String JENKINS_URL = "http://192.168.4.96:8080/";
static final String JENKINS_USERNAME = "qahome";
static final String JENKINS_PASSWORD = "Quantgroup123";
/**
* 构造方法中调用连接 Jenkins 方法
*/
public JenkinsApi() {
// 连接 Jenkins
try {
jenkinsServer = new JenkinsServer(new URI(JENKINS_URL), JENKINS_USERNAME, JENKINS_PASSWORD);
} catch (URISyntaxException e) {
e.printStackTrace();
}
// 设置客户端连接 Jenkins
// try {
// jenkinsHttpClient = new JenkinsHttpClient(new URI(JENKINS_URL), JENKINS_USERNAME, JENKINS_PASSWORD);
// } catch (URISyntaxException e) {
// e.printStackTrace();
// }
}
/**
* 根据job名称获取job信息
*/
public JobWithDetails getJobInfoByName(String jobName) {
try {
JobWithDetails job = jenkinsServer.getJob(jobName);
return job;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 获取job列表
* @return
*/
public List<Map<String, String>> getJobList() {
try {
Map<String, Job> jobs = jenkinsServer.getJobs();
List<Map<String, String>> jobList = new ArrayList<>();
for (Job job:jobs.values()){
Map<String, String> map = new HashMap<>();
map.put("value", job.getName());
map.put("label", job.getName());
jobList.add(map);
}
return jobList;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 获取Job Build列表
*/
public List<Build> getJobBuildList(String jobName, Integer num) {
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(jobName);
// 获取全部 Build 信息
Build lastBuild = job.getLastBuild();
int lastBuildNumber = lastBuild.getNumber();
List<Build> buildList = new ArrayList<>();
for (int i = lastBuildNumber; i > lastBuildNumber - num; i--) {
Build tempBuild = job.getBuildByNumber(i);
if (tempBuild == null) {
return buildList;
} else {
buildList.add(job.getBuildByNumber(i));
}
}
return buildList;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 根据参数获取对应的build
*/
public List<Build> getJobBuildList(String jobName, Integer num, String project) {
try {
// 获取 Job 信息
JobWithDetails job = jenkinsServer.getJob(jobName);
int lastBuildNumber = job.getLastBuild().getNumber();
List<Build> buildList = new ArrayList<>();
int caculator = 0;
while (buildList.size() != num) {
Build build = job.getBuildByNumber(lastBuildNumber - caculator);
if (build == null) {
return buildList;
}
if (build.details().getParameters().get("GIT_REPO").equals(project)) {
buildList.add(build);
}
caculator += 1;
}
return buildList;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws IOException {
JenkinsApi jenkinsApi = new JenkinsApi();
List<Build> buildList = jenkinsApi.getJobBuildList("tke-java", 1, "kdsp");
List<String> userList = new ArrayList<>();
for (Build build: buildList) {
System.out.println(build.details().getParameters().get("BRANCH_NAME"));
System.out.println(build.details().getParameters().get("NAMESPACE"));
System.out.println(build.details().getCauses().get(0).getUserName());
userList.add(build.details().getCauses().get(0).getUserName());
BuildResult buildResult = build.details().getResult();
System.out.println(buildResult);
}
System.out.println(userList.size());
}
}
package cn.qg.qaplatform.stools.vo;
import lombok.Data;
import java.util.Date;
@Data
public class BuildInfo {
public String namespace;
public String project;
public String branch;
public String userName;
public String result;
public Date createAt;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment