一个java创建,删除,构建Jenkins等功能的JenkinsUtil工具类

package com.vip.webpagetest.utils;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
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);

    static String jenkinsBaseUrl = ClassPathPropertiesUtils.getProperty("jenkins.server");
    static String userName = ClassPathPropertiesUtils.getProperty("jenkins.userName");
    static String apiToken = ClassPathPropertiesUtils.getProperty("jenkins.apiToken");

    /**
     * 创建Jenkins Job
     * @param jobName
     * @throws Exception
     */
    public static void creatJenkinsJob(String jobName) throws Exception{
        if(isJenkinsJobExist(jobName)){
            logger.info("已经存在job:"+jobName);
        }else{
            HttpClient client = new HttpClient();
            UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName,apiToken);
            client.getState().setCredentials(AuthScope.ANY,creds);
            client.getParams().setAuthenticationPreemptive(true);
            PostMethod post = new PostMethod(jenkinsBaseUrl+"/createItem?name="+jobName);
            post.setDoAuthentication(true);
            Resource resource = new ClassPathResource("config.xml");
            InputStream fileInput = resource.getInputStream();
            InputStreamRequestEntity requestEntity = new InputStreamRequestEntity(fileInput, "text/xml; charset=UTF-8");
            post.setRequestEntity(requestEntity);
            int code = client.executeMethod(post);
            logger.info("成功创建job:"+jobName);
        }
    }

    /**
     * 查询是否存在名为jobName的job
     * @param jobName
     * @return
     * @throws Exception
     */
    public static boolean isJenkinsJobExist(String jobName) throws Exception{
        HttpClient client = new HttpClient();
        UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName,apiToken);
        client.getState().setCredentials(AuthScope.ANY,creds);
        client.getParams().setAuthenticationPreemptive(true);
        GetMethod get = new GetMethod(jenkinsBaseUrl+"/api/json");
        get.setDoAuthentication(true);
        client.executeMethod(get);
        String result = get.getResponseBodyAsString();
        List<String> jobList = with(result).getList("jobs.name");
        for(String job:jobList){
            if(jobName.equals(job)){
                return true;
            }
        }
        return false;
    }

    /**
     * 删除Jenkins Job
     * @param jobName
     * @throws Exception
     */
    public static void deleteJenkinsJob(String jobName) throws Exception{
        if(!isJenkinsJobExist(jobName)){
            logger.info("不存在job:"+jobName);
        }else{
            HttpClient client = new HttpClient();
            UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName,apiToken);
            client.getState().setCredentials(AuthScope.ANY,creds);
            client.getParams().setAuthenticationPreemptive(true);
            PostMethod post = new PostMethod(jenkinsBaseUrl+"/job/"+jobName+"/doDelete");
            post.setDoAuthentication(true);
            client.executeMethod(post);
        }
    }

    /**
     * 构建触发Jenkins Job
     * @param jobName
     * @throws Exception
     */
    public static boolean buildJenkinsJob(String jobName) throws Exception{
        if(!isJenkinsJobExist(jobName)){
            logger.info("不存在job:"+jobName);
            return false;
        }else{
            HttpClient client = new HttpClient();
            UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName,apiToken);
            client.getState().setCredentials(AuthScope.ANY,creds);
            client.getParams().setAuthenticationPreemptive(true);
            PostMethod post = new PostMethod(jenkinsBaseUrl+"/job/"+jobName+"/build");
            post.setDoAuthentication(true);
            int code = client.executeMethod(post);
            if(code == 201){
                logger.info("已开始构建job:"+jobName);
                return true;
            }
        }
        return false;
    }

    /**
     * 带参数的构建
     * @param jobName
     * @param paramsJson--{"parameter":{"name":"xxx","value":"xxx"}}
     * @return
     * @throws Exception
     */
    public static boolean buildJenkinsJobWithParameters(String jobName,String paramsJson) throws Exception{
        if(!isJenkinsJobExist(jobName)){
            logger.info("不存在job:"+jobName);
            return false;
        }else{
            HttpClient client = new HttpClient();
            UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName,apiToken);
            client.getState().setCredentials(AuthScope.ANY,creds);
            client.getParams().setAuthenticationPreemptive(true);
            PostMethod post = new PostMethod(jenkinsBaseUrl+"/job/"+jobName+"/build");
            RequestEntity entity = new StringRequestEntity(paramsJson,"application/json","UTF-8");
            post.setRequestEntity(entity);
            post.setRequestHeader("Content-Type","application/json;charset=UTF-8");
            client.executeMethod(post);
            return true;
        }
    }

    /**
     * 终止Jenkins Job构建
     * @param jobName
     * @return
     * @throws Exception
     */
    public static boolean stopJenkinsJob(String jobName) throws Exception{
        if(!isJenkinsJobExist(jobName)){
            logger.info("不存在job:"+jobName);
            return false;
        }else{
            HttpClient client = new HttpClient();
            UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName,apiToken);
            client.getState().setCredentials(AuthScope.ANY,creds);
            client.getParams().setAuthenticationPreemptive(true);
            PostMethod post = new PostMethod(jenkinsBaseUrl+"/job/"+jobName+"/api/json");
            post.setDoAuthentication(true);
            client.executeMethod(post);
            String result = post.getResponseBodyAsString();
            int buildNumber = with(result).get("lastBuild.number");
            PostMethod stopJenkinsRequest = new PostMethod(jenkinsBaseUrl+"/job/"+jobName+"/"+buildNumber+"/stop");
            client.executeMethod(stopJenkinsRequest);
            return true;
        }
    }

    public static void main(String[] args) throws Exception {
        creatJenkinsJob("yytest");
    }

}
时间: 2024-07-29 10:58:35

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

java高仿微博日期显示格式化,日期辅助工具类

原文:java高仿微博日期显示格式化,日期辅助工具类 源代码下载地址:http://www.zuidaima.com/share/1550463377902592.htm 仿新浪微博日期格式化工具类: 例如: 1. 刚刚 2. xx分钟前 3. hh小时前 4. 今天 HH:mm 5. 昨天 HH:mm 6. 前天 HH:mm 7. 上个月 yyyy-MM-dd HH:mm 8. 去年 yyyy-MM-dd HH:mm 9. 前年 yyyy-MM-dd HH:mm 今天写的代码,结构还很粗糙,只

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

Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2).二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的; package com.qlwb.business.util; //导入省略... /** * 二维码工具类 * */ public class MatrixToLogoImageWriter { priva

JAVA学习第四十四课 — 集合框架工具类(二)

Collections操控集合的工具类,Arrays操控数组的工具类 Arrays中方法大多是重载 重点掌握asList();将数组转为集合 static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表. import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[]

java map接口,可变参数,Collections集合工具类

map接口的实现类存储成对的值,键--值.通过键来找到对应的值. Collection中的集合称为单列集合,Map中的集合称为双列集合 Map中常用的集合为HashMap集合.LinkedHashMap集合. HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复,需要重写键的hashCode()方法.equals()方法. LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈

Java线程与并发编程实践----额外的并发工具类

一.并发集合 java.util包下提供了很多的集合类,如ArrayList.TreeSet.HashMap,但是这些 集合都是非线程安全的,并且对于单列集合的迭代器,采用的是快速失败机制,当正在迭代 遍历的集合被其它线程修改时,便会抛出 java.util.ConcurrentModificationException. 这显然对于多线程操作的集合是十分不方便的,但早Colections这个工具类中有方法可以返回 线程安全的集合,然而这种集合对于高并发环境,性能十分低下. 于是,java.ut

Java HttpClient4.2.x版本get、post请求工具类

公司业务需要,跟很多公司合作,经常需要请求外部http接口,而项目架构是一个比较老的框架整合,仅http请求的工具类就很多个,显得杂乱无章: 有些接口测试时,对方做了IP白名单限制的,ZIP压缩等要求,现有的http工具类无法满足要求,又不能去修改,因为很多地方在用:想引入最新HttpClient版本的依赖,确发现与现有的jar包冲突: 无耐只能使用现有的jar重新封装,具体代码演示如下: post请求方式1 /*** POST请求,超时时间必须设置* @param url* @param js

编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print。

package com.homework.zw; //print类部分 public class Print { void output() { for(int i =100;i<=999;i++) { if(Math.pow(i/100,3)+Math.pow(i%10,3)+Math.pow(i/10%10, 3)==i) { System.out.println(i); } } } } package com.homework.zw; //主类E部分 public class E { pu

获取一个临时文件和对中文文件名字进行编码的工具类

首先我们明白,一个文件可以命名为任何名称,比如一个excel,我们可以命名为不带后缀,然后向里面写入对应的内容,只是在导出的时候将文件命名为正确的名字即可. 一个在当前用户的默认临时文件夹中生成一个当前日期的文件夹,然后再里面写入一个用UUID生成名字的文件,常用于JavaEE中文件下载的时候先生成一个临时文件,然后向此文件中写入数据之后打开输入流提供下载. 获取一个临时文件,用于输入内容后打开inputstream提供下载 依赖Slf4j日志和commons-io包 public static

Java创建线程的三种主要方式

Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量.(需要创建不同Thread对象,自然不共享) 例子: /** * 通过继承Thread实现线程 */ public class ThreadTest extends Thread{ private int i = 0 ; @Override