日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用Java實現構建jenkins的多個job并返回構建結果示例

瀏覽:175日期:2022-09-01 18:24:39

背景:

使用java實現jenkins構建很簡單,但是如何確定什么時候job已經構建完成才是關鍵,而且要實現多個job并行構建。

分析:

我有一篇文章提到過使用java實現jenkins構建,但是獲取的結果是最后一次構建的結果,不能實時獲取構建結果.實時獲取構建結果有個關鍵的點,在于他會根據構建的版本號獲取當前版本號的結果,如果對應版本號的結果為空則證明還在構建過程中,按照這個思路我們就可以進行編碼了.

1.判斷指定構建版本號的job是否執行完;

2.根據是否構建完成獲取構建結果;

/** * 判斷指定的構建版本號是否執行完成 * * @param number * 構建版本號 * @param jobName * 構建名稱 * @return true為構建完成,false為未構建完成 */public static boolean isFinished(int number, String jobName) {boolean isBuilding = false;if (number <= 0) {throw new IllegalArgumentException('jenkins build number must greater than 0!');}try {JobWithDetails job = jobs.get(jobName).details();// build 如果為空則證明正在構建,走else了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;}

private static int nextNum = 0;private static JobWithDetails jobWithDetails = null;private static boolean flag = true;private static BuildResult buildResult = null; /** * 根據項目名稱觸發jenkins構建 * * @param paramJobName * 項目名稱 * @return 構建結果:如果為null則表明項目名稱在jenkins中沒有匹配的job */public static BuildResult triggerJenkins(String paramJobName) {try {jobWithDetails = jobs.get(paramJobName).details();nextNum = jobWithDetails.getNextBuildNumber();jobWithDetails.build();System.out.println('正在構建……');while (flag) {jobWithDetails = jobs.get(paramJobName).details();if (isFinished(nextNum, paramJobName)) {flag = false;System.out.println('構建完成……');}Thread.sleep(2000);}buildResult = jobWithDetails.getLastBuild().details().getResult();return buildResult; } catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}return buildResult;

補充知識:Java 對接Jenkins API操作(不需要勾選允許站點跨域訪問)

最先的是jenkins的跨域問題 如果是一般學習直接關閉 在公司Java對接jenkins的話 還是不關閉

使用Java實現構建jenkins的多個job并返回構建結果示例

需要的maven 依賴

<dependency> <groupId>com.offbytwo.jenkins</groupId> <artifactId>jenkins-client</artifactId> <version>0.3.8</version></dependency>

JenkinsUtil 不用勾選跨域也可以訪問

public class JenkinsUtils { private static final Logger LOGGER = LoggerFactory.getLogger(JenkinsUtils.class); private static String job_class='hudson.model.FreeStyleProject'; private static String folder_class= 'com.cloudbees.hudson.plugins.folder.Folder'; public static JenkinsServer getJenkinsServer(String userName, String password, String jenkinsUrl) { JenkinsHttpClient jenkinsHttpClient=null; JenkinsServer jenkinsServer=null; try{ jenkinsHttpClient = new JenkinsHttpClient(new URI(jenkinsUrl), userName, password); jenkinsServer = new JenkinsServer(jenkinsHttpClient); }catch (URISyntaxException ex){ LOGGER.info('JenkinsUtils :{}',ex.getMessage()); throw new ResourceCenterException(ResponseCodeEnum.SYSTEM_ERROR_MESSAGE); } return jenkinsServer; } ; public static Integer buildWithParams(HashMap<String, String> params,String jobName, JenkinsServer jenkinsServer) { JobWithDetails job=null; int nextBuildNumber =0; try{ job = jenkinsServer.getJob(jobName); /*根據名稱獲取job*/ if(null==job){ LOGGER.info('jenkins 不存在該Job :{}',jobName); throw new ResourceCenterException(ResponseCodeEnum.JOB_NOT_EXIST); } /*獲取下一次構建的構建編號,可以用于在觸發構建前,先記錄構建編號。在后續獲取指定編號的構建結果*/ //這里需要 一個插件 Build With Parameters Plugin nextBuildNumber=job.getNextBuildNumber(); job.build(params,true); }catch (IOException ex){ LOGGER.info('JenkinsUtils :{}',ex.getMessage()); throw new ResourceCenterException(ResponseCodeEnum.SYSTEM_ERROR_MESSAGE); } //獲取結果 如果為null表示正在構建中 SUCCESS 表示構建成功 return nextBuildNumber; } ; /** * 獲取job 某一個構建的日志 * @param number * @param jobName * @param jenkinsServer * @return * @throws Exception */ public static String getBuildLogPrint(Integer number, String jobName, JenkinsServer jenkinsServer) { BuildWithDetails buildWithDetails=getBuildDetails(number,jobName,jenkinsServer); String log =null; try{ log=buildWithDetails.getConsoleOutputText(); }catch (IOException ex){ LOGGER.info('JenkinsUtils :{}',ex.getMessage()); throw new ResourceCenterException(ResponseCodeEnum.SYSTEM_ERROR_MESSAGE); } return log; } /** * 獲取job 某一個構建的結果 :成功,失敗,取消等狀態 * @param number * @param jobName * @param jenkinsServer * @return * @throws Exception */ public static String getBuildLogResult(Integer number, String jobName, JenkinsServer jenkinsServer) throws Exception { BuildWithDetails buildWithDetails=getBuildDetails(number,jobName,jenkinsServer); BuildResult result = buildWithDetails.getResult(); return result.name(); } private static BuildWithDetails getBuildDetails(Integer number, String jobName, JenkinsServer jenkinsServer){ JobWithDetails job = null; Build build=null; BuildWithDetails buildWithDetails=null; try{ job=jenkinsServer.getJob(jobName); /*根據jobName名稱獲取job*/ build = job.getBuildByNumber(number); buildWithDetails = build.details(); }catch (Exception e){ LOGGER.info('JenkinsUtils :{}',e.getMessage()); throw new ResourceCenterException(ResponseCodeEnum.SYSTEM_ERROR_MESSAGE); } return buildWithDetails; } //暫時解析一層文件夾 public static String getJobFullName(JenkinsServer jenkinsServer,String jobName){ String jobFullName=''; try { Map<String, Job> jobs1 = jenkinsServer.getJobs(); if(null!=jobs1.get(jobName)){return jobName; } Set<String> params = jobs1.keySet(); for (String tempKey: params) {jobFullName=tempKey;JobWithDetails job = jenkinsServer.getJob(tempKey);if(!folder_class.equals(job.get_class())){ continue;}Optional<FolderJob> folderJob = jenkinsServer.getFolderJob(job);FolderJob folderJob1 = folderJob.get();Map<String, Job> jobs = folderJob1.getJobs();Job targetJob = jobs.get(jobName);if(null!=targetJob){ jobFullName=jobFullName+'/'+jobName; return jobFullName;} } }catch (IOException ex){ LOGGER.info('JenkinsUtils :{}',ex.getMessage()); throw new ResourceCenterException(ResponseCodeEnum.SYSTEM_ERROR_MESSAGE); } return jobFullName; }}

為什么Java對接jenkins 不需要勾選跨域訪問也可以:

job.build(params,true);

這個方法是帶參數構建job true表示需要跨域訪問 所以在代碼底層為true時 會去

http://JENKINS_URL/crumbIssuer/api/xml

獲取crumb 然后放進header里面 就可以了

使用Java實現構建jenkins的多個job并返回構建結果示例

以上這篇使用Java實現構建jenkins的多個job并返回構建結果示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费在线成人网| 国产精品v亚洲精品v日韩精品| 国产精品jk白丝蜜臀av小说| 日韩中出av| 日本成人在线一区| 欧美久久精品| 欧美在线黄色| 国产美女精品视频免费播放软件| 国产欧美日韩精品高清二区综合区 | 黄色亚洲大片免费在线观看| 久久蜜桃资源一区二区老牛| 日本高清不卡一区二区三区视频| 欧美成人基地 | 日韩1区在线| 成人一区而且| 欧美freesex黑人又粗又大| 久久三级视频| 在线观看亚洲精品福利片| 日本午夜精品一区二区三区电影| 国产探花一区二区| 精品视频一区二区三区在线观看 | 亚洲国产成人精品女人| 91久久中文| 日韩欧美中文字幕电影 | 国产精品极品在线观看| 精品国产亚洲一区二区三区大结局| 国产va在线视频| 欧美日韩高清| 日本不卡一二三区黄网| 久久只有精品| 狠狠爱www人成狠狠爱综合网| 中文字幕一区二区av| 国产精品午夜一区二区三区| 色婷婷色综合| 不卡在线一区| 亚洲精品激情| 久久女人天堂| 亚洲视频综合| 日韩二区三区四区| 91免费精品| 免费人成精品欧美精品| 欧美a一区二区| 欧美手机在线| 欧美午夜三级| 久久久国产精品一区二区中文| 日韩精品一二三区| 麻豆国产91在线播放| 欧美中文一区二区| 奇米亚洲欧美| 欧美成人a交片免费看| 老牛国产精品一区的观看方式| 热久久久久久| 99精品综合| 青青草91视频| 在线日韩中文| 国产精品99精品一区二区三区∴| 国产精品99一区二区| 国产日产一区| 影音国产精品| 久久精品国产久精国产| 另类激情亚洲| bbw在线视频| 亚洲精品日韩久久| 日韩欧美一区二区三区在线视频| 亚洲欧美日韩国产综合精品二区 | 视频一区二区三区入口| 精品视频国内| 日韩视频1区| 香蕉久久精品| 欧美激情福利| 亚洲综合激情在线| 欧洲av不卡| 国产欧美一区二区三区国产幕精品 | 成人一区而且| 亚洲精品在线国产| 婷婷国产精品| 水蜜桃久久夜色精品一区| 一区二区日韩免费看| 亚洲精品在线影院| 欧美激情福利| 日韩国产一二三区| 国产日韩综合| 久久精品亚洲人成影院| 麻豆精品国产91久久久久久| 视频一区二区中文字幕| 日韩精品首页| 成人污污视频| 国产欧美久久一区二区三区| 欧美~级网站不卡| 国产成人精品一区二区免费看京 | 91看片一区| 久久精品国产99国产| 亚洲三级av| 一区二区三区视频免费观看| 久久精品国产久精国产| 国产欧美一区二区三区精品观看| 综合国产视频| 日韩午夜黄色| 欧美在线看片| 日韩不卡免费视频| 亚洲精品三级| 蜜桃av一区二区| 亚洲欧美日韩在线观看a三区| 国产中文字幕一区二区三区| 日韩成人亚洲| 91久久午夜| 欧美午夜精彩| 免费国产亚洲视频| 免费成人网www| 久久精品99国产精品日本| 99热精品在线| 亚洲精品2区| 正在播放日韩精品| 国产成人精品免费视| 韩国女主播一区二区三区| 国产精品主播| 国产精品久久久久久久久久妞妞| 欧美另类中文字幕| 欧美午夜网站| 国产精品jk白丝蜜臀av小说| 国产香蕉精品| 国产乱码精品一区二区三区四区| 91精品啪在线观看国产爱臀| 欧美日韩国产一区二区在线观看| 日本强好片久久久久久aaa| 欧美日本一区| 美女久久99| 欧美影院视频| 国产福利一区二区三区在线播放| 国产毛片精品| 精品中文字幕一区二区三区四区| 久久精品国产一区二区| 粉嫩av一区二区三区四区五区 | 美国三级日本三级久久99| 亚洲欧美日韩视频二区| 免费视频最近日韩| 天堂va在线高清一区| 亚州国产精品| 国产欧美一区二区三区国产幕精品| 国产亚洲电影| 麻豆91精品视频| 九九精品调教| 欧美午夜不卡影院在线观看完整版免费 | 美女毛片一区二区三区四区最新中文字幕亚洲 | 精品国产不卡一区二区| 成人精品视频| 好看不卡的中文字幕| 亚洲日本久久| 欧美日韩一视频区二区| 韩日一区二区| 免费观看久久av| 亚洲精品日本| 麻豆精品在线| 久久国产欧美| 综合激情婷婷| 国产一区二区三区四区二区| 黄色不卡一区| 国产欧美日韩免费观看| 日本韩国欧美超级黄在线观看| 国产尤物精品| 日本精品另类| 亚洲精品.com| 五月亚洲婷婷 | 日韩一区二区三区免费视频| 国产精品久久久久久久久久妞妞| 蜜臀国产一区| 久久夜色精品| 国产精品一区二区三区美女 | 国产精品美女久久久浪潮软件| 日韩视频一二区| 成人av三级| 午夜精品福利影院| 国产精品毛片久久| 爽好久久久欧美精品| 久久狠狠久久| 欧美一区二区三区高清视频 | 日韩精品91亚洲二区在线观看| 四虎国产精品免费观看| 亚洲免费影院| 久久久精品国产**网站| 激情婷婷亚洲| 国产精品自在| 欧美日韩国产免费观看视频| 日韩成人午夜精品| 日韩毛片在线| 国产免费播放一区二区| 亚洲精品在线观看91| 国产精品片aa在线观看| 欧美丰满日韩| 日本不卡一区二区| 136国产福利精品导航网址| 国产欧美一区二区色老头| 午夜日韩av| 成人在线超碰| 日韩有吗在线观看| 欧美日韩国产精品一区二区亚洲| 国产精品久久久久久久久久久久久久久 | 国产盗摄——sm在线视频| 鲁大师影院一区二区三区| 精品国产亚洲日本|