jenkins的api操作
jenkins-client 实现方式
jenkins-client 底层是使用 HttpClient HttpPost 发送post 请求实现的,是将 REST API 封装了一下
添加依赖
<!-- jenkins -->
<dependency>
<groupId>com.offbytwo.jenkins</groupId>
<artifactId>jenkins-client</artifactId>
<version>0.3.7</version>
</dependency>
连接服务器
public synchronized static JenkinsServer getInstance() {
if (jenkinsServer == null) {
try {
jenkinsServer = new JenkinsServer(new URI(EnvParam.getInstance().getJenkinsURL()), EnvParam.getInstance().getJenkinsUserId(),
EnvParam.getInstance().getJenkinsToken()); } catch (URISyntaxException e) {
e.printStackTrace();
}
}
return jenkinsServer;
}
new JenkinsServer() 底层 使用了HttpClient 底层代码如下
BasicCredentialsProvider provider = new BasicCredentialsProvider();
AuthScope scope = new AuthScope(uri.getHost(), uri.getPort(), "realm");
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username,
password);
provider.setCredentials(scope, credentials);
builder.setDefaultCredentialsProvider(provider);
builder.addInterceptorFirst(new PreemptiveAuth());
if (StringUtils.isNotBlank(username)) {
this.localContext = new BasicHttpContext();
this.localContext.setAttribute("preemptive-auth", new BasicScheme());
}
获取所有的job信息
JenkinsServer jenkins = getInstance();
Map<String, Job> jobs = jenkins.getJobs();
jenkins.getJobs(); 返回的是以jobName为key的map对象
获取某次构建的日志信息
public static String getJobLog(int buildNumber, String jobName) throws IOException { JenkinsServer jenkins = getInstance();
JobWithDetails job = jenkins.getJob(jobName);
JobWithDetails details = job.details();
Build buildByNumber = details.getBuildByNumber(buildNumber);
BuildWithDetails details2 = buildByNumber.details();
String outputText = details2.getConsoleOutputText();
return outputText;
}
获取某次构建的开始时间和持续时间
public static Map<String, Long> getStartTImeAndEndTime(String jobName, int number) throws IOException { JenkinsServer jenkins = getInstance();
Map<String, Job> jobs = jenkins.getJobs();
JobWithDetails job = jobs.get(jobName).details();
Build buildByNumber = job.getBuildByNumber(number);
long startTime = buildByNumber.details().getTimestamp();
long duration = buildByNumber.details().getDuration(); Map<String, Long> data = new HashMap<>();
data.put("startTime", startTime);
data.put("duration", duration);
return data;
}
获取最后一次构建是否成功
number: 构建号 jobName: job 名称 通过获取最后的成功,失败的构建号,来判断是否相等
public static boolean isSuccess(String jobName, int number) throws IOException { JenkinsServer jenkins = getInstance();
Map<String, Job> jobs = jenkins.getJobs();
JobWithDetails job = jobs.get(jobName).details();
int LastSuccessfulNumber = job.getLastSuccessfulBuild().getNumber();
int LastUnsuccessfulNumber = job.getLastUnsuccessfulBuild().getNumber(); boolean flag = false;
if (LastSuccessfulNumber == number) {
flag = true;
}
if (LastUnsuccessfulNumber == number) {
flag = false;
}
return flag;
}
通过获取构建的最终的结果来判断最终的结果
返回结果:SUCCESS, FAILURE
public static String isSuccess(String jobName, int number) throws IOException {
JenkinsServer jenkins = getInstance();
Map<String, Job> jobs = jenkins.getJobs();
JobWithDetails job = jobs.get(jobName).details();
Build buildByNumber = job.getBuildByNumber(number);
BuildWithDetails details = buildByNumber.details();
return details.getResult().toString();
}
判断job是否执行完
public static boolean isFinished(int number, String jobName) {
boolean isBuilding = false;
if (number <= 0) {
throw new IllegalArgumentException("jodId must greater than 0!");
}
try {
JenkinsServer jenkins = getInstance();
Map<String, Job> jobs = jenkins.getJobs();
JobWithDetails job = jobs.get(jobName).details();
Build buildByNumber = job.getBuildByNumber(number);
if (null != buildByNumber) {
BuildWithDetails details = buildByNumber.details();
if (null != details) {
isBuilding = details.isBuilding();
} else {
isBuilding = true;
}
} else {
isBuilding = true;
} return !isBuilding;
} catch (Exception e) {
e.printStackTrace();
} finally {
}
return false;
}
通过上面的调用Jenkins-Client 相关的函数,可以获取相关的Jenkins的操作,如 日志,构建时间,job构建时长,构建号,是否成功,是否正在构建等等, 也发现一些问题 如
Jenkins中配置了view,并且view下面还有view,还有view,Jenkins-client 只能获取两层view,第三层的view获取不到
如果Jenkins中使用了build with parameters 插件 在使用 check box 选择多个参数的话,通过Jenkins-client 传参是 无法实现的
jenkins的api操作的更多相关文章
- 【转】通过python调用jenkins 常用api操作
原:https://www.cnblogs.com/L-O-N/p/11608220.html # -*- coding: utf- -*- import jenkins class TestJenk ...
- 通过python调用jenkins 常用api操作
# -*- coding: utf-8 -*- import jenkins class TestJenkins(object): def __new__(cls, *args, **kwargs): ...
- Postman+Newman+jenkins实现API自动化测试
最近自己在学习用postman+newman+jenkins实现API自动化测试,这里做个回顾和记录.(此次是在windows上进行的环境搭建) 一.说明 1.大致思路:利用postman做接口调试所 ...
- 转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...
- hive-通过Java API操作
通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...
- Hadoop学习记录(3)|HDFS API 操作|RPC调用
HDFS的API操作 URL方式访问 package hdfs; import java.io.IOException; import java.io.InputStream; import java ...
- HBase 6、用Phoenix Java api操作HBase
开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hb ...
- hadoop2-HBase的Java API操作
Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase. 项目结构如下: 我使用的Hbase的版本是 hbase-0.98.9-hadoop ...
- 使用Java API操作HDFS文件系统
使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...
随机推荐
- haproxy笔记
haproxy安装.启动.日志配置 方法1:#安装 yum install haproxy -y #日志配置 sed -i 's/^#$ModLoad imudp/$ModLoad imudp/g' ...
- mysql授权、删除用户和角色权限
备份权限 GRANT USAGE ON *.* TO 'backup'@'172.16.0.157' IDENTIFIED BY PASSWORD '*38B4F16EADB1601E713D9F03 ...
- 转:Linux设备树(Device Tree)机制
目录 1. 设备树(Device Tree)基本概念及作用 2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DTB 2.4. Bootloader 3. 设备树中d ...
- mysql存储过程、函数、触发器、
当数据库版本不允许直接使用存储过程.函数的语法时用delimiter // 将结束符改成//用完之后再写delimiter;将结束符改回来即可,调用过程.函数用call+其名字即可返回结果 delim ...
- 3. Node_export安装部署
首先我们要知道什么是Node_export?因为Prometheus本身不具备监控功能,我们要通过Prometheus收集数据,需要安装对应的export.如Node_export用于监控服务器状态, ...
- 12. MySQL简单使用
关于MySQL的使用,大家可以去网上看相关教程,但是为了保证阅读的连贯性,这里会做简单介绍. 创建数据库 我们双击刚刚新建的数据库,然后双击mysql,点击新建查询,可以在编辑器里面输入一些mysql ...
- yum安装apache
一.查询是否已经安装apache rpm -qa httpd 注:Apache在linux系统里的名字是httpd 如果有返回的信息,则会显示已经安装的软件.如果没有则不会显示其它的信息.如下图是 ...
- java遇到的问题
1.java 初始化泛型数组 public static <T> T[] toArray(java.util.List<T> src, Class<T> type) ...
- PHP简单导出Excel表格
<?php header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; ...
- Android开发:图文分析 Handler通信机制 的工作原理
前言 在Android开发的多线程应用场景中,Handler机制十分常用 下面,将图文详解 Handler机制 的工作原理 目录 1. 定义 一套 Android 消息传递机制 2. 作用 在多线程的 ...