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

  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分层作业和作业状态汇总相关推荐

  1. jenkins复制作业_Jenkins分层作业和作业状态汇总

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

  2. 课堂作业-1成绩汇总

    课堂作业-1成绩汇总 学号 姓名 作业标题 作业地址 提交日期 分数 113120180135 周萌 第一次班级作业 https://www.cnblogs.com/AwakenZed/p/10535 ...

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

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

  4. 计算机网络分层作业,计算机网络作业布置-参考答案

    第一章作业参考答案 1. 什么是计算机网络?什么是网络协议?网络协议的要素有哪些? 答:计算机网络是指具有独立功能的计算机,通过网络通讯设备连接起来,能够实现数据通信和资源共享的计算机系统的集合. 网 ...

  5. 2016福州大学软件工程第四次团队作业-系统设计成绩汇总

    第四次团队作业--系统设计打分统计结果如下: 学号 组别 团队分数 贡献比例 个人分数 031401433 606notconnected 14 16 13.83 031402606 606notco ...

  6. cs231n课程作业踩坑汇总

    欢迎移步我的个人博客 https://blog.csdn.net/Kaiyuan_sjtu/article/details/80527131 报错:from past.builtins import ...

  7. 您遵循过这些Jenkins优秀实践吗?

    一.时刻保持Jenkins的安全 在默认配置情况下,Jenkins是不执行任何安全检查的.也就是说,除一些简单基本的Jenkins配置.作业和构建,网站的访问者几乎可以在Jenkins的主数据库中执行 ...

  8. 2022高处安装、维护、拆除特种作业证考试题库及答案

    题库来源:安全生产模拟考试一点通公众号小程序 2022年高处安装.维护.拆除上岗证题目为高处安装.维护.拆除考试题目全真模拟题!2022高处安装.维护.拆除特种作业证考试题库及答案根据高处安装.维护. ...

  9. 2020春季学期作业提交统计处理

    01下载学生提交作业 在网络学堂作业批改页面将提交的信息存储成TEXT文件,每一次存储成一个文件,共15次: ▲ 将提交学生的信息进行选择.拷贝.粘贴 ▲ 每次提交作业存储的文件 下面是text文本文 ...

最新文章

  1. 什么是OpenMAX技术分析OpenMAX
  2. win7仿linux主题,linuxmint 16 cinnamon模仿win7/win8主题
  3. 瑞士银行开户条件有哪些,瑞士银行开户的流程及注意事项是什么?
  4. mongodb学习(六)索引
  5. “疫”不容辞,数据中心的“逆行之道”
  6. linux升级ipv6协议栈,IPv6技术及基于Linux平台IPv6协议栈的实现
  7. Java命令行界面(第19部分):jClap
  8. 8万级自动挡智能SUV,舒适好开是亮点,众泰T600Coupe要逆天?
  9. ZOJ 3605Find the Marble(dp)
  10. jenkins的安装与使用
  11. 二十三、Oracle学习笔记:综合案例
  12. T-SQL 之 DDL语法
  13. Discuz门户模板乱码解决方案
  14. ERP软件公司选型的重要根据
  15. Abstraction Functions and Rep Invariants
  16. python delphi 比较_Python4Delphi注意事项
  17. 大一寒假集训(11)(12)---map,set
  18. 常用小波基函数以及多尺度多分辨率的理解
  19. Neocities 免费HTML 网站空间,每月200 GB 流量托管静态网页超简单
  20. MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)

热门文章

  1. Quartz定时任务的基本搭建
  2. Angular项目打包到nginx部署过程
  3. 微信小程序的setData
  4. java 新功能_Java 14的新功能
  5. gradle使用maven_使用Gradle – 2019版从Travis可靠发布到Maven Central
  6. java 平台级模块系统_Java平台模块系统公众审查未能通过
  7. 参数化测试 junit_使用JUnit 5进行更清洁的参数化测试
  8. 提取javadoc_使用JavaParser从源文件中提取JavaDoc文档
  9. getter/setter_Getters / Setters。 邪恶。 期。
  10. java 泛型示例_使用Java泛型的模板方法模式示例