jenkins复制作业

您可能知道,Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置詹金斯工作层次的方法。 这是用例:

  1. 我们有一个主要的入口工作被调用以启动整个构建过程。
  2. 这项工作可以有一个到多个子工作。 (第2级)
  3. 每个子工作也可以有一个到多个子工作。 (第3级)
  4. 主要思想是收集/汇总所有儿童职位的状态,并将其汇总为主要职位。

请参阅下面的示例屏幕快照,该示例可视化了总体思路。 这里:

  • Main_Job是单入口作业,必须包含所有同级作业状态
  • Job_Set_1Job_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分层作业和作业状态汇总相关推荐

  1. Jenkins分层作业和作业状态汇总

    您可能知道,Jenkins是高度可配置的CI服务器. 我们可以设置不同的自定义构建过程. 我将分享一些我用来设置Jenkins工作层次的方法. 这是用例: 我们有一个主入口作业被调用以启动整个构建过程 ...

  2. 分层结构的生活例子_分层作业设计案例

    分层作业设计案例(一) 2012-06-27 18:41:17| 分类: 市微型课题研究资 | 举报 | 字号 订阅 班级 四( 1 )班 学生数 25 人 学科 语文 教学内容 <水上飞机&g ...

  3. Java编程作业体会_Java作业的几点总结感想

    本次博客主要是总结近几次作业,交流一下自己的感受. 本次作业主要是对近几次Java课程的巩固作业,第一次作业主要是一些基础的题目,包括选择循环等一些基本语句,其目的在于掌握java一些基本知识,感受出 ...

  4. sql server作业_SQL Server作业性能–报告

    sql server作业 描述 (Description) Once collected, job performance metrics can be used for a variety of r ...

  5. flash作业_在线作业产品的基本构成与逻辑分解

    在线作业模式已经通过市场检验切实可行,本文将会对其基本结构进行分解. 在线教育产品有:在线作业.录播课.直播课.一对一教学.题库等.本文选取英语在线作业系统,涉及教师.学生.家长三种角色,贴合日常教学 ...

  6. python羊车门_羊车门作业(结对作业)

    羊车门问题(结对作业) 在完成本题之前,请仔细阅读下面内容: 题目描述:有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么.参赛者可以选择一扇门,在开启它之前,主持人会 ...

  7. html作业布置,布置作业.html

    布置作业 $axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; }; ...

  8. 北师大计算机网络原理和应用作业,北师大网络作业计算机组成原理 作业一(可编辑)...

    <计算机组成原理>作业(一) 学完1-2章后可以完成作业(一).作业总分100分,将作为平时成绩记入课程总成绩. 一.解释下列英文缩写的中文含义(包括英文全称.中文名.功能三部分):(每题 ...

  9. python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...

    代写INFT 1020作业.Database作业代做.Java课程作业代写.c++,Python编程作业代做 日期:2020-04-25 10:27 INFT 1020 Database Fundam ...

最新文章

  1. html更改灰色按钮可用,点击提交按钮后按钮变灰色不可用状态的三种方法
  2. 【杭电ACM】1097 A hard puzzle
  3. SpringCloud之分布式配置中心(六)
  4. 如何快速分辨一个男人是不是程序员
  5. PMCAFF | 为什么我们必须关注95后市场?
  6. 10种常用降维算法源代码(python)
  7. 在Linux系统下防火墙开放所需要访问的端口号
  8. IP地址,子网掩码,默认网关,路由,形象生动阐述
  9. Android开发之百度地图距离判断(判断定位位置是否在圆的范围内)
  10. el-autocomplete判空校验时,第一次点击不通过,再次点击才正常
  11. VMware 6 个少为人知的技巧
  12. 通过JAVA操作SAE上的MY SQL数据库
  13. 【车牌识别】基于matlab形态学车牌识别【含Matlab源码 1155期】
  14. python excel数据分析师培训_从零开始学可视化数据分析师就业课程(Excel、 MySQL、Power BI、Tableau、python、R)...
  15. Vue安装教程 (一)
  16. wdr7660虚拟服务器设置,TP-Link TL-WDR7660手机怎么设置?
  17. ◮OpenGL-抗锯齿
  18. Linux系统设置DNS服务器地址
  19. 如何修改echarts源码(其他框架也可适用)
  20. JavaScript,for循环效率测试,不同遍历循环测试,数组添加效率测试,大数组拼接测试,for循环遍历修改 和 string replace效率

热门文章

  1. 深度学习工具caffe详细安装指南
  2. TypeError: Cannot set property 'msg' of undefined
  3. 高效的SQLSERVER分页查询
  4. JsonData响应工具类封装
  5. 蓝桥杯JAVA---2013---B----世纪末的星期
  6. vmware启动多个虚拟机
  7. mysql外键引用语法_mysql – 外键语法
  8. oracle 更新参数,Oracle动态、静态参数参数修改规则
  9. 学院派 实践派 计算机科学与技术,饶旻现场为boss所在企业“挑错”
  10. html 中一个格子拆分成两个_一个效果惊人的数字游戏