java代码获取jenkins数据,构建历史等信息方式

本篇文章主要介绍如何获取jenkins构建历史数据等信息,不包含java构建等操作。

1.jenkins所需jar,后续如有缺少可百度自行补齐。

 <!--jenkins所需jar包开始-->
 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
 <dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5</version>
 </dependency>

2.首先介绍下本次jenkins数据获取的方式,主要通过jenkins提供的rest api 接口获取数据,rest api 接口提供了获取数据展示的几种方式:

(1).XML API

(2).JSON API

(3).Python API

大家可以针对自己所有,通过以上几种方式去获取数据。

3.本次通过JSON API格式获取数据信息

(1).打开jenkins,找到rest api 进入。

(2).进入api展示如图,点击JSON API:

(3).点击JSON API数据结构展示如下,地址:http://localhost:8081/api/json?pretty=true,

可以看到以下json数据结构。同时,我们看到了自己所创建的jobs

(4).我们看到自己所创建的jobs,接下来就是对jobs下的详细信息进行获取,可以以tree的形式获取,地址:

http://localhost:8081/api/json?pretty=true&tree=jobs[*]

来获取所有job下的详细信息,通过下图我们可以发现,我们能获取到的信息都有哪些,我们可以根据自己所需去展示自己的数据,如下:

注:比如:我只想要上图中的属性:displayName、fullName、jobs我们的请求可以这样写:

展示效果如下:我们可以看到我们想要的属性,以及可以看到我想要的当前job下的allbuilds属性(当前工程构建下的所有工程构建情况)

(5).接下来就是获取jobs下的allbuilds属性,依照规则我们如下:

地址:

http://localhost:8081/api/json?pretty=true&tree=jobs[displayName[*],fullName[*],jobs[displayName[*],name[*],fullDisplayName[*],allBuilds[*]]]

这样我们就可以获取构建历史的详细信息:

1>.构建编号

2>.构建用时

3>.构建全路径

4>.构建结果

5>.构建时间

(6).以下是java代码实现,构建历史记录的获取

jenkins的MODEL:

package com.zkr.cxhjcxt.model;
import lombok.Data;
import java.util.Date;

/**
 * Created by youzongxu on 2018/9/27.
 */
@Data
public class JenkinsData extends BaseEntity<Long>{
  private static final long serialVersionUID = 2582107289140922375L;
  private String displayName;
  private String fullDisplayName;
  private String duration;
  private String fullname;
  private String sunfullname;
  private String result;
  private Date commitTime;
}

具体实现方法:

package com.zkr.cxhjcxt.timedutils;

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.zkr.cxhjcxt.model.JenkinsData;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.AuthCache;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.joda.time.DateTime;

import java.io.IOException;
import java.net.URI;
import java.util.List;
import java.util.Map;

/**
 * Created by youzongxu on 2018/9/28.
 */
@Slf4j
public class jenkinsutil {

  static String username = "";
  static String password = "";
  static String jenkinsUrl = "";

  public jenkinsutil(String u,String p,String url){
    username = u;
    password = p;
    jenkinsUrl = url;
  }

  /**
   * 获取数据
   * @return
   */
  public List<JenkinsData> getJenkinsData(){
    log.info("start");
    try {
      String urlString = jenkinsUrl + "/api/json?pretty=true&tree=jobs[jobs[allBuilds[building[*],description[*],displayName[*],fullDisplayName[*],estimatedDuration[*],duration[*],id[*],keepLog[*],number[*],queueId[*],result[*],timestamp[*]]]]";
      String jobsString = getJobs(urlString,username,password);
      if(StringUtils.isNotBlank(jobsString)){
        String builds1 = "["+jobsString+"]";
        JSONObject json = new JSONObject();
        List<Map<String, Object>> list = (List<Map<String, Object>>) json.parse(builds1);
        //获取项目名称
        String jobs = list.get(0).get("jobs").toString();
        List<JenkinsData> jenkinsDataLists = Lists.newArrayList();
        if(StringUtils.isNotBlank(jobs)){
          List<Map<String, Object>> jobs1 = (List<Map<String, Object>>) json.parse(jobs);
          for (Map<String, Object> s:jobs1) {
            String jobsx = s.get("jobs").toString();
            if(StringUtils.isNotBlank(jobsx)){
              List<Map<String, Object>> jobsxx = (List<Map<String, Object>>) json.parse(jobsx);
              for (Map<String, Object> s1 :jobsxx) {
                String allBuilds = s1.get("allBuilds").toString();
                if(StringUtils.isNotBlank(allBuilds)){
                  List<Map<String, Object>> jobsxxx = (List<Map<String, Object>>) json.parse(allBuilds);
                  for (Map<String, Object> s2 :jobsxxx) {
                    //开始
                    float duration = (float) ((int) s2.get("duration")/1000.0);
                    String result = s2.get("result").toString();
                    String displayName = s2.get("displayName").toString();
                    //处理项目名称---子项目名称
                    String fullDisplayName = s2.get("fullDisplayName").toString();
                    Long timestamp = Long.valueOf(s2.get("timestamp").toString()) ;
                    String fullname = StringUtils.isNotBlank(fullDisplayName)?fullDisplayName.substring(0,fullDisplayName.indexOf("»")):"";
                    String sunfullname = StringUtils.isNotBlank(fullDisplayName)?fullDisplayName.substring(fullDisplayName.indexOf("»")+1,fullDisplayName.indexOf("#")):"";
                    JenkinsData jenkinsData = new JenkinsData();
                    jenkinsData.setDisplayName(displayName);
                    jenkinsData.setCommitTime(new DateTime(timestamp).toDate());
                    jenkinsData.setDuration(String.valueOf(duration));
                    jenkinsData.setFullDisplayName(fullDisplayName);
                    jenkinsData.setFullname(fullname.trim());
                    jenkinsData.setSunfullname(sunfullname.trim());
                    jenkinsData.setResult(result);
                    jenkinsDataLists.add(jenkinsData);
                  }
                }
              }
            }
          }
        }
        return jenkinsDataLists;
      }
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    log.info("end");
    return null;
  }

  /**
   * 执行语句,上面已经定义了成员变量,String username,String password可以不用传,我是后面有再次调用该方法,所以又传递了一遍,这里可以按照自己所需来处理。
   * @param urlString
   * @return
   * @throws IOException
   */
  public static String getJobs(String urlString,String username,String password)throws IOException{
    URI uri = URI.create(urlString);
    HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()), new UsernamePasswordCredentials(username, password));
    AuthCache authCache = new BasicAuthCache();
    BasicScheme basicAuth = new BasicScheme();
    authCache.put(host, basicAuth);
    CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
    HttpGet httpGet = new HttpGet(uri);
    HttpClientContext localContext = HttpClientContext.create();
    localContext.setAuthCache(authCache);
    HttpResponse response = httpClient.execute(host, httpGet, localContext);
    String result = EntityUtils.toString(response.getEntity());
    return result;
  }
}

以上这篇java代码获取jenkins数据,构建历史等信息方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java利用jenkins做项目的自动化部署

    最近领导要求上海本地的项目需要使用进jenkins实现自动化部署,以便可以直接将项目移交给运维的同学,减轻开发的工作量.记录下这次爬坑的过程. 一.前言 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 上面是我从百科上down下来的,老实说没看懂,这是个什么玩意啊?其实以我现在的理解和应用,最多的便是部署了,其他功能待研究╮(╯_╰)╭撸主目前在上海一个不知名国企打工,我们现在项目的发布流程

  • Jenkins 编译后使用SSH发布详解

    前言 想要实现自动发布编译好的apk,我们可以使用官方插件库里的如下插件. 你可以使用FTP SSH等方式自动化发布,当然你也可以写脚本实现复杂的发布操作. 我以Publish Over SSH为例简单讲解下(主要是目前没部署FTP服务 TAT) 因为不知道怎么使用这个插件,所以我查看了下官方文档 https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin 看得懂E文的推荐去看看,比我讲的详细的多了. 这也算是能力的锻炼

  • springboot docker jenkins 自动化部署并上传镜像的步骤详解

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1.前期准备工作不说了 2.在项目根目录下新建Dockerfile Dockerfile文件内容为: #基础镜像 FROM openjdk:12 #作者 MAINTAINER demo <demo@qq.com> VOLUME /tmp #指定配置文件,以及jar包在服务器上的路径 ENTRYPOIN

  • java代码获取jenkins数据,构建历史等信息方式

    本篇文章主要介绍如何获取jenkins构建历史数据等信息,不包含java构建等操作. 1.jenkins所需jar,后续如有缺少可百度自行补齐. <!--jenkins所需jar包开始--> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</gr

  • java代码获取数据库表里数据的总数操作

    在访问数据库时,特别是新手,可能会需要查询表中数据总数,以下这段代码可以非常简便的获取到数据数目 //先建立数据库连接,执行查询语句 Connection conn = DriverManager.getConnection(URL, USER, PassWord); Statement st=conn.createStatement(); ResultSet rs =st.executeQuery("select count(*) as result from tablename")

  • 使用java代码获取新浪微博应用的access token代码实例

    本文实例为大家分享了java代码获取新浪微博应用的access token的具体代码,供大家参考,具体内容如下 package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; im

  • Java后端之俯瞰数据接收的三种方式

    目录 一.前言 二.正文部分 第一种方法: 第二种方法: 第三种方法: 三种方法概览图: 一.前言 前面我们说了一些网页表单的功能,现在我们先来讲解数据的传输,如何进行前后端的联系 (建议先看完上篇) 二.正文部分 首先我们要先打开我们idea,如图,在jsp下的<form>也就是问卷的哪里加上action=" ", 这是在给这个弄个地址," "内容是任意的 第二步:在Demo下的Demo类下输入划线内容,只需输入@R看着选到即可回车 第三步:输入下列画

  • 基于JAVA代码 获取手机基本信息(本机号码,SDK版本,系统版本,手机型号)

    老风格,废话不多说了,直接给大家贴java代码了. 代码如下: package com.zzw.getPhoneInfos; import android.app.Activity; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; public

  • Java类获取Spring中bean的5种方式

    获取Spring中的bean有很多种方式,再次总结一下: 第一种:在初始化时保存ApplicationContext对象 ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring. 第二种:通过Spring提供

  • java如何获取用户登录ip、浏览器信息、SessionId

    目录 java获取用户登录ip.浏览器信息.SessionId 1.获取用户登录ip 2.获取用户所使用的浏览器信息 3.获取用户SessionId 获取用户登录的ip地址(考虑多种请求头的情况) java获取用户登录ip.浏览器信息.SessionId 1.获取用户登录ip //获取用户登录ip; String loginIp = request.getHeader("X-Forwarded-For"); if (loginIp == null || loginIp.length()

  • 使用Java代码获取服务器性能信息及局域网内主机名

    最近做个项目,就是要取得cpu占有率等等的系统信息,一开始以为要用动态链接库了,但后来发现可以像下面这样做,不去调用jni,这样省去了很多看新技术的时间o(∩_∩)o... 在Java中,可以获得总的物理内存.剩余的物理内存.已使用的物理内存等信息,下面例子可以取得这些信息,并且获得在Windows下的内存使用率.      首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包括物理内存.剩余的物理内存.已使用的物理内存.内存使用率等字段,该类的代码如下: package c

  • XML到Java代码的数据绑定之对象

    在这个由四部分组成的系列文章的第一部分,我们将弄清什么是数据绑定,与在 Java 应用程序中处理 XML 数据的其它方法相比它有什么优势,以及如何开始使用它.这一部分将考查为什么使用数据绑定,以及如何为各种约束建立模型,使 XML 文档能转换成 Java 对象.同时还涵盖用于生成数据绑定类的输入和输出. 您希望在您的 Java 应用程序中使用 XML 吗?那么好,同成千上万的其他人一起上这条船吧.当您深入了解 XML 以后,也许您会发现 DOM 和 SAX API(请参阅参考资料)不过是唬人的东

  • 详解如何获取C#类中发生数据变化的属性信息

    一.前言# 在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字段的值的话就很困难了.因此,趁着这个假期,就来解决这个一直遗留的小问题,本篇文章记录了我目前实现的方法,如果你有不同于文中所列出的方案的话,欢迎指出. 代码仓储地址:https://github.com/Lanesra712/ingos-common/tree/master/sample/csha

随机推荐