电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:110日期: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
相關文章:
主站蜘蛛池模板: 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 并网柜,汇流箱,电控设备,中高低压开关柜,电气电力成套设备,PLC控制设备订制厂家,江苏昌伟业新能源科技有限公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 企业微信scrm管理系统_客户关系管理平台_私域流量运营工具_CRM、ERP、OA软件-腾辉网络 | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 对辊破碎机_四辊破碎机_双齿辊破碎机_华盛铭重工 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 铁盒_铁罐_马口铁盒_马口铁罐_铁盒生产厂家-广州博新制罐 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 华溶溶出仪-Memmert稳定箱-上海协烁仪器科技有限公司 | 美甲贴片-指甲贴片-穿戴美甲-假指甲厂家--薇丝黛拉 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 实验室装修_实验室设计_实验室规划设计- 上海广建净化工程公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 杭州|上海贴标机-百科|