通过JAVA 操作 Jenkins API,实现对 Jenkins Job、View等等的增、删、改、查操作。
参靠及项目地址:
Jenkins API wiki 地址:https://wiki.jenkins.io/display/JENKINS/Remote+access+API
Jenkins-Java-Client Github 地址:https://github.com/jenkinsci/java-client-api
原创文章地址:https://blog.csdn.net/qq_32641153/article/details/94230465
一、JenkinsAPI
1、JenkinsAPI简介
Jenkins远程API能够通过http协议远程调用相关命令操作Jenkins进行Jenkins视图、任务、插件、构建信息、任务日志信息、统计信息等,非常容易与其配合更好得完成CI/CD工作。
2、JenkinsAPI格式
JenkinsAPI有三种格式分别为:
- JSON API
- XML API
- Python API
3、Jenkins查看API信息
可以用浏览器打开你的 Jenkins UI 界面,然后 URL 地址栏后面追加 “/api/json” 或者 “/api/xml” ,效果如下:
“JenkinsURL/api/json” 显示:
“JenkinsURL/api/xml” 显示:
还可以访问 View、Job等 API 信息,例如:
- View API: /view/<view-name>/api/json
- Job API: /job/<job-name>/api/xml
- build API: /job/<job-name>/<build-number>/
二、调用接口前对 Jenkins 参数调整
1、关闭 CSRF
由于在调用 Jenkins 中,操作执行 Job 一些命令时会用到 Post 方式命令,所以需要关闭 Jenkins 的 CSRF 选项。
关闭 系统管理->全局安全配置->跨站请求伪造保护 选项
2、系统设置中和 jenkins 地址一致
设置 系统管理->系统设置->Jenkins Location 的 URL 和 Jenkins 访问地址保持一致
三、使用 Java 调用 Jenkins API 示例
1、Maven引入工具
在 Jenkins Github 中查找到已经有人做了封装调用 Jenkins API 的工具 Jar,这里只需要我们 Maven 中引入这个工具 java-client-api,就可以方便的调用 Jenkins API 了 。
<dependency>
<groupId>com.offbytwo.jenkins</groupId>
<artifactId>jenkins-client</artifactId>
<version>${project.version}</version>
</dependency>
2、连接 Jenkins 工具类
此类主要用于连接 Jenkins
JenkinsConnect.java
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import java.net.URI;
import java.net.URISyntaxException;
/**
* 连接 Jenkins
*/
public class JenkinsConnect {
private JenkinsConnect(){}
// 连接 Jenkins 需要设置的信息
static final String JENKINS_URL = "http://192.168.72.122:8080/jenkins/";
static final String JENKINS_USERNAME = "admin";
static final String JENKINS_PASSWORD = "111111";
/**
* Http 客户端工具
*
* 如果有些 API 该Jar工具包未提供,可以用此Http客户端操作远程接口,执行命令
* @return
*/
public static JenkinsHttpClient getClient(){
JenkinsHttpClient jenkinsHttpClient = null;
try {
jenkinsHttpClient = new JenkinsHttpClient(new URI(JENKINS_URL), JENKINS_USERNAME, JENKINS_PASSWORD);
} catch (URISyntaxException e) {
e.printStackTrace();
}
return jenkinsHttpClient;
}
/**
* 连接 Jenkins
*/
public static JenkinsServer connection() {
JenkinsServer jenkinsServer = null;
try {
jenkinsServer = new JenkinsServer(new URI(JENKINS_URL), JENKINS_USERNAME, JENKINS_PASSWORD);
} catch (URISyntaxException e) {
e.printStackTrace();
}
return jenkinsServer;
}
}
3、操作视图
此类主要用于操作 Jenkins 中的 View
ViewApi.java
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.client.JenkinsHttpClient;
import com.offbytwo.jenkins.model.View;
import java.io.IOException;
/**
* View(视图) 相关操作
*
* 例如对视图的增、删、改、查等操作
*/
public class ViewApi {
// Jenkins 对象
private JenkinsServer jenkinsServer;
// http 客户端对象
private JenkinsHttpClient jenkinsHttpClient;
/**
* 构造方法中调用连接 Jenkins 方法
*/
ViewApi() {
JenkinsApi jenkinsApi = new JenkinsApi();
// 连接 Jenkins
jenkinsServer = JenkinsConnect.connection();
// 设置客户端连接 Jenkins
jenkinsHttpClient = JenkinsConnect.getClient();
}
/**
* 创建视图
*/
public void createView() {
try {
// 创建一个 xml 字符串,里面设置一个 view 描述信息
String xml = "<listView _class=\"hudson.model.ListView\">\n" +
"<description>用于测试的视图</description>\n" +
"</listView>";
// 创建 view
jenkinsServer.createView("test-view", xml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取视图基本信息
*/
public void getView() {
try {
// 视图名
String viewName = "test-view";
// 获取视图基本信息
View view = jenkinsServer.getView(viewName);
System.out.println(view.getName());
System.out.println(view.getUrl());
System.out.println(view.getDescription());
// 获取视图xml信息
String viewXml = jenkinsHttpClient.get("/view/" + viewName + "/api/xml");
System.out.println(viewXml);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取视图配置 XML 信息
*/
public void getViewConfig() {
try {
// 视图名
String viewName = "test-