java代碼獲取jenkins數(shù)據(jù),構(gòu)建歷史等信息方式
本篇文章主要介紹如何獲取jenkins構(gòu)建歷史數(shù)據(jù)等信息,不包含java構(gòu)建等操作。
1.jenkins所需jar,后續(xù)如有缺少可百度自行補齊。
<!--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數(shù)據(jù)獲取的方式,主要通過jenkins提供的rest api 接口獲取數(shù)據(jù),rest api 接口提供了獲取數(shù)據(jù)展示的幾種方式:
(1).XML API
(2).JSON API
(3).Python API
大家可以針對自己所有,通過以上幾種方式去獲取數(shù)據(jù)。
3.本次通過JSON API格式獲取數(shù)據(jù)信息
(1).打開jenkins,找到rest api 進入。

(2).進入api展示如圖,點擊JSON API:

(3).點擊JSON API數(shù)據(jù)結(jié)構(gòu)展示如下,地址:http://localhost:8081/api/json?pretty=true,
可以看到以下json數(shù)據(jù)結(jié)構(gòu)。同時,我們看到了自己所創(chuàng)建的jobs

(4).我們看到自己所創(chuàng)建的jobs,接下來就是對jobs下的詳細信息進行獲取,可以以tree的形式獲取,地址:
http://localhost:8081/api/json?pretty=true&tree=jobs[*]
來獲取所有job下的詳細信息,通過下圖我們可以發(fā)現(xiàn),我們能獲取到的信息都有哪些,我們可以根據(jù)自己所需去展示自己的數(shù)據(jù),如下:

注:比如:我只想要上圖中的屬性:displayName、fullName、jobs我們的請求可以這樣寫:

展示效果如下:我們可以看到我們想要的屬性,以及可以看到我想要的當前job下的allbuilds屬性(當前工程構(gòu)建下的所有工程構(gòu)建情況)

(5).接下來就是獲取jobs下的allbuilds屬性,依照規(guī)則我們?nèi)缦拢?/p>
地址:
http://localhost:8081/api/json?pretty=true&tree=jobs[displayName[*],fullName[*],jobs[displayName[*],name[*],fullDisplayName[*],allBuilds[*]]]
這樣我們就可以獲取構(gòu)建歷史的詳細信息:
1>.構(gòu)建編號
2>.構(gòu)建用時
3>.構(gòu)建全路徑
4>.構(gòu)建結(jié)果
5>.構(gòu)建時間

(6).以下是java代碼實現(xiàn),構(gòu)建歷史記錄的獲取
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;
}
具體實現(xiàn)方法:
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;
}
/**
* 獲取數(shù)據(jù)
* @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;
}
/**
* 執(zhí)行語句,上面已經(jīng)定義了成員變量,String username,String password可以不用傳,我是后面有再次調(diào)用該方法,所以又傳遞了一遍,這里可以按照自己所需來處理。
* @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數(shù)據(jù),構(gòu)建歷史等信息方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA中excel導(dǎo)出一對多合并具體實現(xiàn)
項目中經(jīng)常會使用到導(dǎo)出功能,有導(dǎo)出Word,有導(dǎo)出Excel的,下面這篇文章主要給大家介紹了關(guān)于JAVA中excel導(dǎo)出一對多合并具體實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-09-09
Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析
這篇文章主要介紹了Java ByteBuffer網(wǎng)絡(luò)編程用法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
FluentMybatis實現(xiàn)mybatis動態(tài)sql拼裝和fluent api語法
本文主要介紹了FluentMybatis實現(xiàn)mybatis動態(tài)sql拼裝和fluent api語法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
Mybatis詳解動態(tài)SQL以及單表多表查詢的應(yīng)用
MyBatis的動態(tài)SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現(xiàn)某些邏輯,下面這篇文章主要給大家介紹了關(guān)于Mybatis超級強大的動態(tài)SQL語句的相關(guān)資料,需要的朋友可以參考下2022-06-06
Spring中@Transactional(rollbackFor=Exception.class)屬性用法介紹
這篇文章介紹了Spring中@Transactional(rollbackFor=Exception.class)屬性的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
如何利用Java?AWT?創(chuàng)建一個簡易計算器
這篇文章主要介紹了如何利用Java?AWT?創(chuàng)建一個簡易計算器,AWT?是一個有助于構(gòu)建?GUI?的?API?基于?java?應(yīng)用程序,下面關(guān)于其相關(guān)資料實現(xiàn)計算器的內(nèi)容詳細,需要的朋友可以參考一下2022-03-03

