jenkins复制作业_Jenkins分层作业和作业状态汇总
jenkins复制作业
您可能知道,Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置詹金斯工作层次的方法。 这是用例:
- 我们有一个主要的入口工作被调用以启动整个构建过程。
- 这项工作可以有一个到多个子工作。 (第2级)
- 每个子工作也可以有一个到多个子工作。 (第3级)
- 主要思想是收集/汇总所有儿童职位的状态,并将其汇总为主要职位。
请参阅下面的示例屏幕快照,该示例可视化了总体思路。 这里:
- Main_Job是单入口作业,必须包含所有同级作业状态
- Job_Set_1和Job_Set_2是两个子作业
- Build_ [1-4]是Job_Set_1的子作业
- Tests_ [1-3]是Job_Set_2的子作业
现在,我们应该使用一些Jenkins插件来构建这样的层次结构。 我一直在使用Multijob Plugin 。 请参阅以下配置的屏幕截图:
Main_Job /配置
Job_Set_1 /配置
Job_Set_2 / configure
但是,这还不够。 我们必须将所有兄弟作业的状态汇总到Main_Job中 。 我一直在使用修补的Groovy Postbuild插件 。 修改后的插件位于https://github.com/halyph/groovy-postbuild-plugin Groovy Postbuild插件允许我们为作业的Post-build Actions编写Groovy脚本。 该脚本可以访问整个Jenkins环境,并且可以使用所有已安装的Jenkins插件的功能:
这是此脚本的来源:
import hudson.model.*
import com.tikal.jenkins.plugins.multijob.*;void log(msg) {manager.listener.logger.println(msg)
}threshold = Result.SUCCESSvoid aggregate_results() {failed = falsemainJob = manager.build.getProject().getName()job = hudson.model.Hudson.instance.getItem(mainJob)log '-------------------------------------------------------------------------------------'log 'Aggregated status report'log '-------------------------------------------------------------------------------------'log('${mainJob} #${manager.build.getNumber()} - ${manager.build.getResult()}')job.getLastBuild().getSubBuilds().each { subBuild->subJob = subBuild.getJobName() subJobNumber = subBuild.getBuildNumber()job = hudson.model.Hudson.instance.getItem(subBuild.getJobName())log '${subJob} #${subJobNumber} - ${job.getLastCompletedBuild().getResult()}'log job.getLastCompletedBuild().getLog()//println subBuilddePhaseJob = hudson.model.Hudson.instance.getItem(subBuild.getJobName())dePhaseJobBuild = dePhaseJob.getBuildByNumber(subBuild.getBuildNumber())dePhaseJobBuild.getSubBuilds().each { childSubBuild ->try {log ' ${childSubBuild.jobName}'job = hudson.model.Hudson.instance.getItem(childSubBuild.getJobName())build = job.getBuildByNumber(childSubBuild.getBuildNumber())indent = ' ' log '${indent} #${build.getNumber()} - ${build.getResult()}' log build.getLog()if(!failed && build.getResult().isWorseThan(threshold) ) {failed = true}} catch (Exception e) { log('ERROR: ${e.getMessage()}')failed = true}}}if(failed) {manager.build.setResult(hudson.model.Result.FAILURE)}
}try {aggregate_results()
} catch(Exception e) {log('ERROR: ${e.message}')log('ERROR: Failed Status report aggregation')manager.build.setResult(hudson.model.Result.FAILURE)
}
您也可以在GitHub Gist上找到它: https : //gist.github.com/4610274 。
这个脚本很傻。 它只是为每个子作业提取(在Main_Job控制台中打印)下一个信息:
- 工作名称
- 建立数字
- 生成结果(状态)
- 建立日志
此外,它还可以根据子作业的状态来设置Main_Job状态。 请参阅脚本中的threshold
变量。 汇总报告如下所示:
Started by user anonymous
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Main_Job\workspace
Starting build job Job_Set_1.
Finished Build : #8 of Job : Job_Set_1 with status :SUCCESS
Starting build job Job_Set_2.
Finished Build : #8 of Job : Job_Set_2 with status :SUCCESS
-------------------------------------------------------------------------------------
Aggregated status report
-------------------------------------------------------------------------------------
Main_Job #8 - SUCCESS
Job_Set_1 #8 - SUCCESS
Started by upstream project 'Main_Job' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Job_Set_1\workspace
Starting build job Build_1.
Starting build job Build_2.
Finished Build : #8 of Job : Build_1 with status :FAILURE
Finished Build : #8 of Job : Build_2 with status :SUCCESS
Starting build job Build_3.
Starting build job Build_4.
Finished Build : #6 of Job : Build_3 with status :UNSTABLE
Finished Build : #6 of Job : Build_4 with status :SUCCESS
Notifying upstream projects of job completion
Finished: SUCCESSBuild_1#8 - FAILURE
Started by upstream project 'Job_Set_1' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_1\workspace
Setting result to [Failed]
Build step 'Set the build result' changed build result to FAILURE
Build step 'Set the build result' marked build as failure
Notifying upstream projects of job completion
Finished: FAILUREBuild_2#8 - SUCCESS
Started by upstream project 'Job_Set_1' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_2\workspace
Setting result to [Success]
Build step 'Set the build result' changed build result to SUCCESS
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
null
Notifying upstream projects of job completion
Finished: SUCCESSBuild_3#6 - UNSTABLE
Started by upstream project 'Job_Set_1' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_3\workspace
Setting result to [Unstable]
Build step 'Set the build result' changed build result to UNSTABLE
Notifying upstream projects of job completion
Finished: UNSTABLEBuild_4#6 - SUCCESS
Started by upstream project 'Job_Set_1' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Build_4\workspace
Setting result to [Success]
Build step 'Set the build result' changed build result to SUCCESS
Notifying upstream projects of job completion
Finished: SUCCESSJob_Set_2 #8 - SUCCESS
Started by upstream project 'Main_Job' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Job_Set_2\workspace
Starting build job Test_1.
Finished Build : #8 of Job : Test_1 with status :SUCCESS
Starting build job Test_2.
Finished Build : #8 of Job : Test_2 with status :UNSTABLE
Starting build job Test_3.
Finished Build : #8 of Job : Test_3 with status :SUCCESS
Notifying upstream projects of job completion
Finished: SUCCESSTest_1#8 - SUCCESS
Started by upstream project 'Job_Set_2' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Test_1\workspace
Setting result to [Success]
Build step 'Set the build result' changed build result to SUCCESS
Notifying upstream projects of job completion
Finished: SUCCESSTest_2#8 - UNSTABLE
Started by upstream project 'Job_Set_2' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Test_2\workspace
Setting result to [Unstable]
Build step 'Set the build result' changed build result to UNSTABLE
Notifying upstream projects of job completion
Finished: UNSTABLETest_3#8 - SUCCESS
Started by upstream project 'Job_Set_2' build number 8
Building in workspace C:\Users\oivasiv\.jenkins\jobs\Test_3\workspace
Setting result to [Success]
Build step 'Set the build result' changed build result to SUCCESS
Notifying upstream projects of job completion
Finished: SUCCESSBuild step 'Groovy Postbuild' changed build result to FAILURE
Build step 'Groovy Postbuild' marked build as failure
Notifying upstream projects of job completion
Finished: FAILURE
因此,此类作业状态聚合和Groovy后处理有什么好处:
- 我们在一个地方拥有工作状态
- 从Main_Job发送的电子邮件通知包含此状态
- 实现任何自定义后处理逻辑的能力
- 可以通过Groovy Scrip重用其他插件功能
参考:来自JCG合作伙伴 Orest Ivasiv的Jenkins分层作业和作业状态汇总 ,位于Knowledge Is Everything博客上。
翻译自: https://www.javacodegeeks.com/2013/02/jenkins-hierarchical-jobs-and-jobs-status-aggregation.html
jenkins复制作业
jenkins复制作业_Jenkins分层作业和作业状态汇总相关推荐
- Jenkins分层作业和作业状态汇总
您可能知道,Jenkins是高度可配置的CI服务器. 我们可以设置不同的自定义构建过程. 我将分享一些我用来设置Jenkins工作层次的方法. 这是用例: 我们有一个主入口作业被调用以启动整个构建过程 ...
- 分层结构的生活例子_分层作业设计案例
分层作业设计案例(一) 2012-06-27 18:41:17| 分类: 市微型课题研究资 | 举报 | 字号 订阅 班级 四( 1 )班 学生数 25 人 学科 语文 教学内容 <水上飞机&g ...
- Java编程作业体会_Java作业的几点总结感想
本次博客主要是总结近几次作业,交流一下自己的感受. 本次作业主要是对近几次Java课程的巩固作业,第一次作业主要是一些基础的题目,包括选择循环等一些基本语句,其目的在于掌握java一些基本知识,感受出 ...
- sql server作业_SQL Server作业性能–报告
sql server作业 描述 (Description) Once collected, job performance metrics can be used for a variety of r ...
- flash作业_在线作业产品的基本构成与逻辑分解
在线作业模式已经通过市场检验切实可行,本文将会对其基本结构进行分解. 在线教育产品有:在线作业.录播课.直播课.一对一教学.题库等.本文选取英语在线作业系统,涉及教师.学生.家长三种角色,贴合日常教学 ...
- python羊车门_羊车门作业(结对作业)
羊车门问题(结对作业) 在完成本题之前,请仔细阅读下面内容: 题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么.参赛者可以选择一扇门,在开启它之前,主持人会 ...
- html作业布置,布置作业.html
布置作业 $axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; }; ...
- 北师大计算机网络原理和应用作业,北师大网络作业计算机组成原理 作业一(可编辑)...
<计算机组成原理>作业(一) 学完1-2章后可以完成作业(一).作业总分100分,将作为平时成绩记入课程总成绩. 一.解释下列英文缩写的中文含义(包括英文全称.中文名.功能三部分):(每题 ...
- python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...
代写INFT 1020作业.Database作业代做.Java课程作业代写.c++,Python编程作业代做 日期:2020-04-25 10:27 INFT 1020 Database Fundam ...
最新文章
- html更改灰色按钮可用,点击提交按钮后按钮变灰色不可用状态的三种方法
- 【杭电ACM】1097 A hard puzzle
- SpringCloud之分布式配置中心(六)
- 如何快速分辨一个男人是不是程序员
- PMCAFF | 为什么我们必须关注95后市场?
- 10种常用降维算法源代码(python)
- 在Linux系统下防火墙开放所需要访问的端口号
- IP地址,子网掩码,默认网关,路由,形象生动阐述
- Android开发之百度地图距离判断(判断定位位置是否在圆的范围内)
- el-autocomplete判空校验时,第一次点击不通过,再次点击才正常
- VMware 6 个少为人知的技巧
- 通过JAVA操作SAE上的MY SQL数据库
- 【车牌识别】基于matlab形态学车牌识别【含Matlab源码 1155期】
- python excel数据分析师培训_从零开始学可视化数据分析师就业课程(Excel、 MySQL、Power BI、Tableau、python、R)...
- Vue安装教程 (一)
- wdr7660虚拟服务器设置,TP-Link TL-WDR7660手机怎么设置?
- ◮OpenGL-抗锯齿
- Linux系统设置DNS服务器地址
- 如何修改echarts源码(其他框架也可适用)
- JavaScript,for循环效率测试,不同遍历循环测试,数组添加效率测试,大数组拼接测试,for循环遍历修改 和 string replace效率
热门文章
- 深度学习工具caffe详细安装指南
- TypeError: Cannot set property 'msg' of undefined
- 高效的SQLSERVER分页查询
- JsonData响应工具类封装
- 蓝桥杯JAVA---2013---B----世纪末的星期
- vmware启动多个虚拟机
- mysql外键引用语法_mysql – 外键语法
- oracle 更新参数,Oracle动态、静态参数参数修改规则
- 学院派 实践派 计算机科学与技术,饶旻现场为boss所在企业“挑错”
- html 中一个格子拆分成两个_一个效果惊人的数字游戏