Jenkins除了开源和免费,还有一个最吸引人的功能之一就是支持插件。
Jenkins不光有丰富的第三方插件,还可以自己动手编写插件,和其他工具进行深度的集成,从而达到符合公司产品管理需求的一个定制化。
接下来我们会分享一系列关于Jenkins插件的使用和开发实践经验,介绍一些经典而又实用的第三方插件和公司内部自己开发的插件,希望大家能在工作中根据项目的需求灵活地运用。
 
这次首先介绍的5个插件都是和Jenkins的job相关的,通过这些插件,可以按需连接各个job,使之协同工作。
 
那开始介绍前,让我们来看看为什么需要这些插件来连接各个job呢。有人可能会说,为什么不能把产品的持续集成步骤统统建立在一个job上呢?
- 首先,Jenkins有一个限制,就是一个job的一次构建的所有任务只能运行在一个节点上,那如果产品的编译/部署/测试需要在不同平台下(如编译必须在Linux下,而执行用例需要在Windows下)就必须建立不同的job
- 再次,如果只有一个job必然构建时间会变长,也就是意味着产品的质量反馈变慢(必须等到所有的任务才做完才能得到反馈)
- 还有,分开建job也是为了相互之间的“弱耦合”,之后相应job的配置改动能尽量小的影响到其他job
- 最后,这样可以使产品的持续集成流程更加清晰,及时发现产品相应的短板
 
 
功能介绍:这是个比较简单的插件,只是简单地把某个job的构建物拷贝到当前job的工作区。
简单配置: 
实践应用
- 在产品被编译/打包之后,需要在测试/联调/演练多个环境下部署的时候,可以采用。一个job负责代码的编译和打包,并把构建物(通常是WAR,JAR,TAR等)存档下来,然后之后的多个job可以分别获取相应的构建物用于产品的部署,保证了部署环境的一致性。
Tips:
+ 一定要保证上游job的构建物是被存档的
 
   

 

+ 默认情况下,拷贝过来的构建物会以相同的目录结构存储,如果只想保留文件而已,可以选择“Flatten directories”,这样所有的构建物都会直接拷贝到“Target directory”,而不会保留目录结构
 
 
功能介绍:这是一个扩展型的插件,使各个job连接的时候可以传递一些job相关的信息
                     - 当前job的参数
     - 自定义的参数
     - SCM相关信息
     - 运行的Node信息
简单配置

 

 
实践应用
- 传递SVN Revision: 在代码检出阶段会获取相应的SVN Revision信息,传递这个信息到下游的job中,在下游的各个job中直接检出相对应版本的代码,保持各个构建的版本一致性,防止由于频繁的代码提交导致各个job运行版本的不一致
- 保持各个job运行在同一个节点下: 如果有多套测试环境,可以通过这个勾选这个选项保持构建环境的一致性
 
Tips:
+ 传递SVN Revision或是GIT Revision可以通过如下设置来完成
   

   在下游job如果需要在SCM管理中使用,可以通过如下设置来配置

 

  

+ 如果不需要传递任何参数,一定要记得勾选“Trigger build without parameters”

 

 
功能介绍:这是一个用于生成特定视图的插件,可以把job之间的关联关系可视化,使产品的流程也随之可视化。
简单配置

 

 
实践应用
- 在配置产品的持续集成时,往往会有多个job协同工作,比如编译/打包,静态代码检查,单元测试,接口测试,UI测试,性能/压力测试,而各个产品又相互有一定的依赖。通过在这个插件中设置初始job,就能很直观地把job之间的关系整理出来,也能看到产品每次构建的全局情况。在后期还可以从构建信息中挑选合适的版本,增加发布环节。

 

Tips:
+ 通过设置选项“Show pipeline parameters in revision box”可以直观地显示job的build number,结合VersionNumberPlugin就可以显示SVN revision
 

 

+ 通过设置选项“Show pipeline parameters in project headers”可以直观地显示job的某些参数,如测试环境

 

 
功能介绍:这是一个集成了ParameterizedTrigger和BuildPipeline的插件,但它是形成一个新的job,而不是一个视图。
                     并且它不要求job之间本身就存在依赖关系。
                     这样一来,建立job的时候可以保持相对的独立性,而通过这个插件来组装成产品所需要的持续集成环境。
简单配置

 

 
实践应用
- 如果需要建立多条pipeline,并且在各条pipeline中有些job其实是可以共用的时候,可以考虑使用这个插件。例如产品有两个分支develop和release, 需要分别检出代码(A1,A2),编译(B),单元测试(C),对于develop分支只需进行简单的回归测试(D),而对release分支不仅仅是回归测试(D),还必须有性能测试(E)。这种情况下,就会有A1-B-C-D和A2-B-C-D-E两条pipeline,对于D来说,下游job是不确定的,这时就可以通过建立两个Multijob来实现(当然,也可以通过PrameterizedTrigger通过设置和读取变量来实现,但是配置较为复杂)
Tips:
+ 在创建job时一定要选择“MultiJob Project”,在“free-style project”下默认是不能选择使用这个插件的
 

 

+ 对于某些job的结果不想影响下游job的执行,例如静态代码检查,可以通过以下设置来达到目的
 

 

 
功能介绍:这也是一个触发job的插件,亮点在于它触发job的条件是等待所有当前job的下游的job都完成才会发生。
                     当然,只有在当前job有两个及以上的下游job时才有意义。                    
                     简单举个例子来说,A同时触发B1和B2两个job,然后配置这个插件又触发C,这时C就会等B1和B2都完成之                          后才会被执行
简单配置
 

 

 
实践应用
- 有些产品的部署会依赖于某些第三方的产品,可以同时部署自身的产品和第三方服务,这时接下来的测试工作就需要等待所有这些部署都完成,自然这个插件就能有用武之地
- 为了加快构建的速度,通常可以设置单元测试和冒烟测试同时进行,而随后的功能测试又希望是在单元测试和冒烟测试都通过的情况下才进行,这种情况下Join插件就是必须的了
 
Tips:
+ 默认情况下,通过Join插件触发的job是不能传递参数的,如果有需要,可以勾选“Trigger parameterized build on other project”,这样其实就是把Join插件和ParameterizedTrigger插件集成起来了
 

 

 
小结:上面介绍的这些插件一般情况下不会都使用到,并且某些功能不止一个插件可以实现,所以大家可以根据产品和项目的需求来灵活应用,搭建出可靠、可维护、可视化强的持续集成环境

持续集成之Jenkins插件使用(一)- 多个job之间的串并联的更多相关文章

  1. 有手就行2——持续集成环境—Jenkins安装、插件、用户权限及凭证管理

    有手就行2--持续集成环境-Jenkins安装.插件.权限及凭证管理 持续集成环境(1)-Jenkins安装 持续集成环境(2)-Jenkins插件管理 持续集成环境(3)-Jenkins用户权限管理 ...

  2. 使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置

    安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclips ...

  3. 老李分享:持续集成学好jenkins之解答疑问

    老李分享:持续集成学好jenkins之解答疑问   poptest(www.poptest.cn)在培训的过程中使用jenkins搭建持续集成环境,让学员真正交流持续集成到底是什么,怎么去做的. Je ...

  4. 老李分享:持续集成学好jenkins

    老李分享:持续集成学好jenkins   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试开发工程师就业培训请大 ...

  5. Android持续集成之Jenkins 部署

    Android持续集成之Jenkins 部署 [TOC] 0x00安装 准备工作如下: Tomcat8.5下载地址 Jenkins下载链接 1 将下载的jenkins.war包放至tomcat下的we ...

  6. 持续集成之Jenkins+Gitlab实现持续集成 [二]

    持续集成之Jenkins+Gitlab实现持续集成 [二] 项目:使用git+jenkins实现持续集成 开始构建  General  源码管理 我们安装的是Git插件,还可以安装svn插件  我们将 ...

  7. 【持续集成】jenkins安装部署从git获取代码

    一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部署Continuous Deployment 1. ...

  8. 研发协同平台持续集成之Jenkins实践

    导读 研发协同平台有两个核心目标,一是提高研发效率 ,二是提高研发质量,要实现这两个核心目标,实现持续集成是关键之一. 什么是持续集成 在<持续集成>一书中,对持续集成的定义如下:持续集成 ...

  9. 持续集成:jenkins集合

    持续集成:jenkins集合 jenkins(一):   持续集成和Jenkins简介 jenkins(二):   Jenkins的安装 jenkins(三):   Jenkins的应用场景和job ...

随机推荐

  1. 让arch阻止某个软件包的升级

    我更新了eclipse-java Mars版本的,感觉特别的卡,而且还有好多bug,不知道为什么,因此我去官网下载了luna版本的eclipse的安装包,不知道怎么下载的点击这里,然后安装luna版本 ...

  2. Nodejs 发送邮件

    var nodemailer = require("nodemailer");var mailTitle='http://bemupa.forumieren.com:Best Mu ...

  3. URIEncoding与useBodyEncodingForURI 在tomcat中文乱码处理上的区别

    大家知道tomcat5.0开始,对网页的中文字符的post或者get,经常会出现乱码现象. 具体是因为Tomcat默认是按ISO-8859-1进行URL解码,ISO-8859-1并未包括中文字符,这样 ...

  4. 十、springcloud之Consul注销实例

    @Autowired //com.ecwid.consul.v1.ConsulClient private ConsulClient consulClient; @PostMapping(" ...

  5. 两行代码搞定js对象深浅拷贝

    有一段时间没有更新博客了,忙于工作.2018年刚过去,今天来开启2018第一篇博文.好了,咱们步入正题. 先上代码 /** * 遍历对象 * 1.判断是不是原始值 * 2.判断是数组还是对象 * 3. ...

  6. Linux下配置Samba服务器全过程

    Linux下配置Samba服务器全过程 user级别的samba的配置 http://www.linuxidc.com/Linux/2014-11/109234.htm http://www.linu ...

  7. java基础51 IO流技术(打印流)

    1.打印流(printStream)的概念 打印流可以打印任意的数据类型 2.printStream的步骤 1.找到目标文件    2.创建一个打印流    3.打印信息    4.关闭资源 3.实例 ...

  8. 向SQL Server 现有表中添加新列并添加描述.

    注: sql server 2005 及以上支持. 版本估计是不支持(工作环境2005,2008). 工作需要, 需要向SQL Server 现有表中添加新列并添加描述. 从而有个如下存储过程. (先 ...

  9. Effective STL 学习笔记14: Use reserve to avoid unnecessary reallocations.

    vector 和 string 容器在动态插入一个新的对象时,如果容器内空间不够,该容器会: 重新分配空间 通常的做法是分配当前 Capacity 大小两倍的空间. 将旧空间中的所有元素拷贝进新的空间 ...

  10. apachebench对网站进行并发测试

    ,安装apache ,打开cmd进入apache安装目录的bin目录(有ab.exe) ,执行ab命令 格式:ab -n -c http://localhost:80/test/test.php 说明 ...