package com.vip.webpagetest.utils;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import static com.jayway.restassured.path.json.JsonPath.with;

public class JenkinsUtil {

private static final Logger logger = LoggerFactory.getLogger(JenkinsUtil.class);
String jenkinsBaseUrl = ClassPathPropertiesUtils.getProperty("jenkins.baseurl");
String userName = ClassPathPropertiesUtils.getProperty("jenkins.userName");
String apiToken = ClassPathPropertiesUtils.getProperty("jenkins.apiToken");
private CloseableHttpClient httpClient = HttpClientPool.getHttpClient();

/**
* 创建Jenkins Job
*
* @param jobName
* @throws Exception
*/
public void creatJenkinsJob(String jobName) {
if (isJenkinsJobExist(jobName)) {
logger.info("已经存在job:" + jobName);
} else {
HttpPost httpPost = new HttpPost(jenkinsBaseUrl + "/createItem?name=" + jobName);
Resource resource = new ClassPathResource("config.xml");
try {
InputStream fileInput = resource.getInputStream();
InputStreamEntity entity = new InputStreamEntity(fileInput);
entity.setContentEncoding("UTF-8");
entity.setContentType("text/xml");
httpPost.setEntity(entity);
httpClient.execute(httpPost, this.getHttpClientContext());
} catch (Exception e) {
e.printStackTrace();
}
logger.info("成功创建job:" + jobName);
}
}

/**
* 查询是否存在名为jobName的job
*
* @param jobName
* @return
* @throws Exception
*/
public boolean isJenkinsJobExist(String jobName) {
HttpGet httpGet = new HttpGet(jenkinsBaseUrl + "/api/json");
CloseableHttpResponse rsp = null;
try {
rsp = httpClient.execute(httpGet, this.getHttpClientContext());
HttpEntity entity = rsp.getEntity();
String result = EntityUtils.toString(entity);
List<String> jobList = with(result).getList("jobs.name");
for (String job : jobList) {
if (jobName.equals(job)) {
return true;
}
}
} catch (Exception e) {
logger.error(null, e);
return false;
}
return true;
}

/**
* 删除Jenkins Job
*
* @param jobName
* @throws Exception
*/
public void deleteJenkinsJob(String jobName) {
if (!isJenkinsJobExist(jobName)) {
logger.info("不存在job:" + jobName);
} else {
HttpPost httpPost = new HttpPost(jenkinsBaseUrl + "/job/" + jobName + "/doDelete");
try {
httpClient.execute(httpPost, this.getHttpClientContext());
} catch (Exception e) {
e.printStackTrace();
}
}
}

/**
* 构建触发Jenkins Job
*
* @param jobName
* @throws Exception
*/
public boolean buildJenkinsJob(String jobName) {
if (!isJenkinsJobExist(jobName)) {
logger.info("不存在job:" + jobName);
return false;
} else {
HttpPost httpPost = new HttpPost(jenkinsBaseUrl + "/job/" + jobName + "/build");
try {
httpClient.execute(httpPost, this.getHttpClientContext());
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
return true;
}

/**
* 带参数的构建
*
* @param jobName
* @param parameters
* @return
*/
public boolean buildJenkinsJobWithParameters(String jobName, Map<String, String> parameters) {
if (!isJenkinsJobExist(jobName)) {
logger.info("不存在job:" + jobName);
return false;
} else {
HttpPost httpPost = new HttpPost(jenkinsBaseUrl + "/job/" + jobName + "/buildWithParameters");
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
for (String key : parameters.keySet()) {
formparams.add(new BasicNameValuePair(key, parameters.get(key)));
}
UrlEncodedFormEntity urlEntity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
CloseableHttpResponse rsp = null;
try {
httpPost.setEntity(urlEntity);
rsp = httpClient.execute(httpPost, this.getHttpClientContext());
} catch (Exception e) {
logger.error(null, e);
return false;
}
return true;
}
}

/**
* 终止Jenkins Job构建
*
* @param jobName
* @return
* @throws Exception
*/
public boolean stopJenkinsJob(String jobName) {
if (!isJenkinsJobExist(jobName)) {
logger.info("不存在job:" + jobName);
return false;
} else {
HttpPost httpPost = new HttpPost(jenkinsBaseUrl + "/job/" + jobName + "/api/json");
CloseableHttpResponse resp = null;
try {
resp = httpClient.execute(httpPost, this.getHttpClientContext());
HttpEntity entity = resp.getEntity();
String result = EntityUtils.toString(entity);
int buildNumber = with(result).get("lastBuild.number");
HttpPost stopJenkinsRequest = new HttpPost(
jenkinsBaseUrl + "/job/" + jobName + "/" + buildNumber + "/stop");
httpClient.execute(stopJenkinsRequest, this.getHttpClientContext());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
}

private HttpClientContext getHttpClientContext() {
HttpClientContext httpClientContext = HttpClientContext.create();
httpClientContext.setCredentialsProvider(this.getCredentialsProvider());
// httpClientContext.setAuthCache(this.getAuthCache());
return httpClientContext;
}

private CredentialsProvider getCredentialsProvider() {
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(AuthScope.ANY), new UsernamePasswordCredentials(userName, apiToken));
return credsProvider;
}

public static void main(String[] args) throws Exception {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("domain", "www.baidu.com");
parameters.put("run_id", "222");
JenkinsUtil test = new JenkinsUtil();
test.buildJenkinsJobWithParameters("www.vip.com", parameters);
}
}

一个java创建,删除,构建Jenkins等功能的JenkinsUtil工具类的更多相关文章

  1. 一个".java"的源文件中,是否可以包含多个类?(除了匿名内部类),有什么限制?

    # 二.一个".java"的源文件中,是否可以包含多个类?(除了匿名内部类),有什么限制?   - 可以包含多个类   - 条件:其它类不能用private.public.prot ...

  2. Java开发小技巧(五):HttpClient工具类

    前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...

  3. 一个Java编写的小玩意儿---多人在线聊天工具

    这个在线聊天工具小项目使用JAVA编写,用JAVA来做图形界面本来就是出了名的低效和丑陋.不过这不是重点.写这个小项目的目的在于串一串J2SE的知识,把当时写这个项目的时候的思路梳理一下.时间有点久了 ...

  4. Java并发包线程池之Executors、ExecutorCompletionService工具类

    前言 前面介绍了Java并发包提供的三种线程池,它们用处各不相同,接下来介绍一些工具类,对这三种线程池的使用. Executors Executors是JDK1.5就开始存在是一个线程池工具类,它定义 ...

  5. 《Java并发编程的艺术》第6/7/8章 Java并发容器与框架/13个原子操作/并发工具类

    第6章 Java并发容器和框架 6.1  ConcurrentHashMap(线程安全的HashMap.锁分段技术) 6.1.1 为什么要使用ConcurrentHashMap 在并发编程中使用Has ...

  6. Java的精确整数计算-Bigdecimal学习总结和工具类

    随笔:随着最近工作需要,回首需要涉及到一些精确的数据计算,就需要用到Bigdecimal,索性就趁着闲暇之余整理收集一下关于Bigdecimal的使用方法,由于时间的原因,整理的并不是特别详细,但相信 ...

  7. Java使用Zxing生成、解析二维码工具类

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2). ...

  8. AppDir【创建缓存目录】【建议使用这个工具类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...

  9. Java中常用的加密方式(附多个工具类)

    一.Java常用加密方式 Base64加密算法(编码方式) MD5加密(消息摘要算法,验证信息完整性) 对称加密算法 非对称加密算法 数字签名算法 数字证书 二.分类按加密算法是否需要key被分为两类 ...

随机推荐

  1. mac安装openjdk8-maven-mysql-git-docker

    1. openjdk8安装命令查看地址:https://github.com/AdoptOpenJDK/homebrew-openjdk#other-versions   感觉上面命令地址不靠谱,还是 ...

  2. QT生成的exe在其他电脑打开

    首先说一下我的开发的平台:vs2017+QT5.9 我们首先先用release版本来编译一下程序,然后我们得到了一个exe程序但是这个程序是不能脱离你的平台,甚至是不能脱离你所在的文件夹,这是因为它需 ...

  3. Systemweaver — 电子电气协同设计研发平台

            当前电子电气系统随着功能安全.AutoSAR.车联网.智能驾驶等新要求,导致其复杂性.关联性日益上升.当前,传统基于文档的设计由于其低复用性.无关联性.无协同性等缺点,已经无法适应日益 ...

  4. wireshark 抓包再利用TCP socket发送包里的payload是可以实现登陆的

    用户密码可被批量破解 在用户使用手机端登录时,对数据进行抓包分析. 多次抓包分析后,可得到几个关键TCP数据包. 根据前面逆向编写出的解密算法,使用socket进行数据发包测试: 可以模拟APK进行用 ...

  5. P1169 [ZJOI2007]棋盘制作[悬线法/二维dp]

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...

  6. python打造漏洞数据导出工具

    功能 [x] 支持导出的数据:IP地址.漏洞名称.风险等级.整改建议.漏洞描述.漏洞CVE编号.漏洞对应端口.漏洞对应协议.漏洞对应服务等. [x] 导出不同端口的同一个漏洞,也就是一个端口对应一个漏 ...

  7. HihoCoder1236 Scores

    Scores 求五维偏序(≤).强制在线. \(n,q\le 50000\) 烂大街的题解 考虑如果我们能用bitset找到每一维有哪些比询问点小,然后把每一维的结果取交集,得到的就是答案了. 然后对 ...

  8. TJOI2016 字符串

    字符串 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为n的字符串s,和m个问题.佳媛姐姐必须正确回答这m个问题,才能打开箱子拿到礼物,升职 ...

  9. LINQ查询表达式(5) - LINQ Null值处理&异常处理

    查询表达式中处理Null值 此示例演示如何处理源集合中可能的 null 值. 诸如 IEnumerable<T> 等对象集合可能包含值为 null 的元素. 如果源集合为 null 或包含 ...

  10. 八.Protobuf3更新消息类型(添加新的字段)

    Protobuf3 更新消息类型 如果现有的消息类型不满足你的所有需求——例如,你希望消息格式有一个额外的字段——但是你仍然希望使用用旧格式创建的代码,别担心!在不破坏任何现有代码的情况下更新消息类型 ...