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

您可能知道,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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python Programe】WSGI (Web Server Gateway Interface)

Part1: What is a Web server? 一个位于物理服务器上的网络服务器(服务器里的服务器),等待客户端去发送request,当服务器接收到request,就会生成一个response发送回客户端; 客户端与服务器使用HTTP协议进…

华大单片机m4内核的滴答定时器_微处理器、单片机及其外设,处理还是控制?...

每项新应用设计都需要一个单片机或微处理器。当在两者之间选择其一时,需要考虑一些因素。以下是微处理器、单片机以及异构架构的概述。考虑选择微处理器(MPU)或者单片机(MCU)时,应用类型通常是关键因素。另一方面,最终选择取决于诸如操作系统…

安装提示卸载office_office2010 卸载工具

点击上方“蓝字”,关注我们获取更多免费资源我们为什么要用这个office2010卸载工具呢,很简单旧版本的office卸载不干净,在安装新版本的office时可能会遇到一些奇奇怪怪的问题。如果遇到无法安装office时,我们可以先使用office卸载…

人工通道会取消吗_二七政策将用于ETC?高速或将取消人工收费通道

随着社会的发展,有车一族越来越多,但是在这种情况下,堵车的情况就随处可见了,并且随着车辆的增多,高速收费通道的成本也增加了不少,而且通过时间越来越长,面对这种情况,交通局就和银…

在Oracle Cloud上的Prime-UI,JAX-RS和Jersey和Gson

如今,Oracle云无处不在。 最初,拉里(Larry)否认在很长一段时间内都需要云,并且在去年的开放世界(Open World)之后就宣布了一些非常早期的公告,而且可用性很差,似乎没有人…

推荐20个很有帮助的 Web 前端开发教程

在平常的搜索中,我碰到过很多有趣的信息,应用程序和文档,我把它们整理在下面这个列表。这是收藏的遇到的有用内容的一个伟大的方式,可以在你需要的时候方便查阅。相信你会在这个列表中发现对你很有用的资料。 1. CSS Vocabulary 一…

Scrapy爬虫框架解析

Scrapy框架解析Scrapy框架大致包括以下几个组件:Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader;组件Scrapy Engine这是框架的核心,负责控制数据流在整个系统的各个组件间的流动过程,并且在特定动作发生时触发相应…

Couchbase 2.0归类视图简介

大多数应用程序必须处理“主/详细”类型的数据: 啤酒厂和啤酒 部门和员工 发票和项目 … 例如,这对于创建如下应用程序视图是必需的: 借助Couchbase和许多面向文档的数据库,您可以采用不同的方式来处理此问题,您…

(转)利用WPF的ListView进行大数据量异步加载

原文:http://www.cnblogs.com/scy251147/archive/2012/01/08/2305319.html 由于之前利用Winform的ListView进行大数据量加载的时候,诟病良多,所以今天试着用WPF的ListView来做了一下,结果没有让我失望,我将一个拥有430…

有关循环和判断的几个小问题

注意在while嵌套的if语句之外,还有一个cin>>n;因为刚刚没有这一部分的时候,执行的结果是这样的: 把while里面的cin>>n;注释掉了之后,在cmd里执行的时候,只能输入数字,但是没有任何的反应。 但其…

PHP7 学习笔记(五)安装event扩展(libevent)

一、描述:有效安排I/O,时间和信号的扩展 使用可用于特定平台的最佳I/O通知机制的事件,是PHP基础设施的libevent端口。 二、下载地址:http://pecl.php.net/package/event 三、安装支持库libevent,需要编译高版本(这里以…

有关输出图形的代码,我觉得好难啊,好蒙啊。

这里的代码其实没看懂过,自己看到书上这一题的时候也是挺蒙的,压根不知道要怎么下手,照着书上把代码打进去之后也不清楚原理,可怕的是,反反复复对着答案敲了几遍代码,执行结果还是这样的,和课本…

Windows环境变量的应用

设置环境变量快速打开程序 如果你对桌面上密密麻麻的文件感到烦恼,那么下面的方法可以帮到你。 Step 1 在硬盘的某个位置添加一个文件夹,把你经常用的程序的快捷方式放进这个文件夹,快捷方式重命名最好简单易记,如图 注意 快捷方式…

mysql 备份数据库_mysql数据库备份

前一段时间因为误操作删除了一张表的几条数据,弄得很尴尬,正好这周有空就折腾了下数据备份的知识,现把mysql的数据备份相关实践和心得总结如下:一.使用mysqldump命令备份数据库:备份整个数据库(包括表结构和数据),用法…

JavaScript:Browser 对象

ylbtech-JavaScript&#xff1a;Browser 对象1. Window 对象返回顶部 1、Window 对象 Window 对象 Window 对象表示浏览器中打开的窗口。 如果文档包含框架&#xff08;<frame> 或 <iframe> 标签&#xff09;&#xff0c;浏览器会为 HTML 文档创建一个 window 对象…

深入理解line-height与vertical-align——前端布局常用属性

line-height、font-size、vertical-align是设置行内元素布局的关键属性。这三个属性是相互依赖的关系&#xff0c;改变行间距离、设置垂直对齐等都需要它们的通力合作。下面将主要介绍line-height与vertical-align&#xff1a; 行高 【定义】 line-height行高是指文本行基线之…

UWP开发入门(四)——自定义CommandBar

UWP开发入门&#xff08;四&#xff09;——自定义CommandBar 原文:UWP开发入门&#xff08;四&#xff09;——自定义CommandBar各位好&#xff0c;再次回到UWP开发入门系列&#xff0c;刚回归可能有些不适应&#xff0c;所以今天我们讲个简单的&#xff0c;自定义CommandBar&…

(转)Cobbler无人值守批量安装Linux系统

本文目录&#xff1a; 1.1 pxe安装系统 1.2 cobbler基本介绍 1.3 安装和配置cobbler 1.3.1 安装cobbler 1.3.2 配置dhcp和tftp 1.4 cobbler从本地光盘安装系统 1.4.1 生成distro 1.4.2 提供kickstart文件 1.4.3 提供profile 1.4.4 开始安装 1.5 比pxekickstart好的地方 1.6 让新…

Spring集成–从头开始应用程序,第1部分

开始之前 在本教程中&#xff0c;您将学习什么是Spring Integration &#xff0c;如何使用它以及有助于解决哪些问题。 我们将从头开始构建一个示例应用程序&#xff0c;并演示Spring Integration的一些核心组件。 如果您不熟悉Spring&#xff0c;请查看我编写的另一本有关Spri…

初学者Web介绍一些前端开发中的基本概念用到的技术

Web开发是比较费神的&#xff0c;需要掌握很多很多的东西&#xff0c;特别是从事前端开发的朋友&#xff0c;需要通十行才行。今天&#xff0c;本文向初学者介绍一些Web开发中的基本概念和用到的技术&#xff0c;从A到Z总共26项&#xff0c;每项对应一个概念或者技术。 初学者W…