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协议进…

Redis配置文件配置

Spring和Redis整合&#xff1a; 配置applicationContext-redis.xml&#xff0c;添加Redis服务&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:context"ht…

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

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

option标签selected=selected属性失效的问题

要在select标签上面加上autocomplete"off"关闭自动完成&#xff0c;不然浏览器每次刷新后将自动选择上一次关闭时的option&#xff0c;这样默认属性selected"selected"就会失效啦 要记住每次遇到select标签时就最好要加上autocomplete"off"这一项…

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

这是本教程的第二部分&#xff0c;我们将使用Spring Integration创建发票处理应用程序。 如果您错过了它&#xff0c;一定要看一下第一部分 。 以前&#xff0c;我们已经定义了系统的功能要求&#xff0c;创建了网关&#xff0c;分离器&#xff0c;过滤器和路由器组件。 让我们…

H5添加禁止缩放功能

<meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, minimum-scale1.0, user-scalableno, target-densitydpidevice-dpi" />

安装提示卸载office_office2010 卸载工具

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

C++primer 15.6节练习

练习15.23 1 class Base {2 public:3 virtual int fcn();4 };5 6 class D1 : public Base {7 public:8 int fcn();9 virtual void f2(); 10 }; 11 12 class D2 : public D1 { 13 public: 14 int fcn(int); 15 int fcn(); 16 void f2(); 17 }; 18 跟bp…

Java中Comparator和Comparable之间的区别

常见的面试问题之一是“比较器和可比较器之间有什么区别”。 或“您将如何通过其ID或名称对员工对象集合进行排序”。为此&#xff0c;我们可以使用两个接口&#xff0c;即Comparator和Comparable。在我们真正看到差异之前&#xff0c;让我简要介绍一下两者。 可比接口&#x…

bzoj2375 疯狂的涂色

疯狂的涂色 Time Limit: 5 Sec Memory Limit: 128 MB Description 小t非常喜爱画画&#xff0c;但是他还是一个初学者。他最近费尽千辛万苦才拜到已仙逝的达芬奇为师&#xff08;神仙&#xff1f;妖怪&#xff1f;谢谢&#xff09;。达芬奇果然是画鸡蛋长大的&#xff0c;让小t…

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

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

零基础的前端开发初学者应如何系统地学习?

网站开发开发大致分为前端和后端&#xff0c;前端主要负责实现视觉和交互效果&#xff0c;以及与服务器通信&#xff0c;完成业务逻辑。其核心价值在于对用户体验的追求。可以按如下思路学习系统学习&#xff1a; 基础知识&#xff1a; html css 这部分建议在 w3school 在线教…

《大道至简》第一章读后感(java伪代码形式编写)

public class DaDaoZhiJianDiYiDuan { //一.愚公移山 //问题&#xff1a;怎样把山移完 //愚公移山是一个项目 if(愚公死) { 有子存焉&#xff1b; while&#xff08;山不平&#xff09; { 子又生孙&#xff0c;孙又生子&#xff1b; 子去移山&#xff1b; } } else 愚公移山&am…

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

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

【RabbitMQ】2、心得总结,资料汇总

Spring AMQP中文文档 http://ju.outofmemory.cn/entry/320538 云栖社区 https://yq.aliyun.com/search?qrabbitmq&typeARTICLE RabbitMQ-JAVA常见报错信息 &#xff0c; https://yq.aliyun.com/articles/175024CentOS7环境下安装RabbitMQ&#xff0c; http://t.cn/RCtr…

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

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

Scrapy爬虫框架解析

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

Couchbase 2.0归类视图简介

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

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

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

Css3新属性:calc()

一、前言 calc()看起来像是javascript中的一个函数&#xff0c;而事实上它是用在Css中的&#xff0c;可以用它来计算长度&#xff08;宽度或高度)&#xff0c;能够自动根据不同尺寸的屏幕自动调接数值&#xff0c;从而很轻松的实现自适应布局展示在不同尺寸屏幕下。项目中常常碰…