第21章 Docker Jenkins 持续集成多项目构建

Jenkins 持续集成多项目构建

job调度

Build after other projects are built:在其他项目触发的时候触发,里面有分为三种情况,也就是其他项目构建成功、失败、或者不稳定的时候触发项目;

Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
H/5 * * * * (每5分钟检查一次源码变化)

Build periodically:周期进行项目构建(它不关心源码是否发生变化),如下图配置:
H 2 * * * (每天2:00 必须build一次源码)

在 Schedule 中填写 0 * * * *。

第一个参数代表的是分钟 minute,取值 0~59;

第二个参数代表的是小时 hour,取值 0~23;

第三个参数代表的是天 day,取值 1~31;

第四个参数代表的是月 month,取值 1~12;

最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

所以 0 * * * * 表示的就是每个小时的第 0 分钟执行构建。

构建举例:

由于项目的代码一般存在放SVN中,而一个SVN往往是有多个项目组在提交代码,而每个项目组又有多人组成,其中每个人也都在对自己的那块代码不停地在进行维护,所以说对于一个公司而言,SVN的提交记录往往是很频繁的,正因为如此,Jenkins在执行自动化构建时往往是以天为单位来执行的,下面举的例子就是在一天中常用的定时构建示例。

每隔5分钟构建一次:H/5 * * * *

每两小时构建一次:H H/2 * * *

每天中午下班前定时构建一次:0 12 * * *

每天下午下班前定时构建一次:0 18 * * *

项目回滚

虽然实现了项目的自动部署,但是有时部署失败的时候我们需要回滚到指定版本的构建,这样才能更灵活的进行项目的构建部署。我们可以选择“参数化的构建过程”进行传递不同的参数来选择是进行新的构建还是回滚
步骤:

  1. 构建后存档
    在构建后将,构建完成的文件进行存档,方便以后回滚的时候使用

  2. 参数和构建过程

使用参数化构建过程,让后面的脚本可以根据不同的变量执行不同的操作。添加“Choice”参数配置不同的选项,让选择发布还是回滚,添加“String Parameter”参数来传递要回滚的版本号。

  1. execult 构建(不能maven)

构建选择“Execute Shell”的方式,自己根据变量,自定义构建的脚本,此时如果是发布安装maven的构建过程进行新的构建,如果是回滚,知道历史构建后的文件,复制到当前构建结果目录。

  1. 点击构建,根据不同的参数选择发布还是回滚,回滚的时候填写要回滚到的历史版本号

jenkins 插件

Multijob 插件和Jenkins Pipeline都可以实现类似多个Job串行执行,当多数流程都需要执行公共job时,使用Multijob确实很方便,只需要在把定制job加进来即可。Pipeline 使用Groovy语言,将多个job执行转换成脚本语言执行,通过定义Node和Stage完成整个流程,扩展性很好,当然学习成本也会增加。各有利弊吧,按需取舍。

jenkins常用插件汇总

jenkins常用插件汇总:
Build-timeout Plugin:任务构建超时插件
Naginator Plugin:任务重试插件
Build User Vars Plugin:用户变量获取插件
Build Pipeline Plugin View :Pipeline 管道流图表展示插件

Build Flow Plugin:工作流插件,支持DSL脚本定义工作流
Build Graph View Plugin:build Flow插件视图(安装后需要重新才能生效)
Multijob Plugin:多任务插件
Build-timeout Plugin:job构建超时插件
Build Timestamp Plugin :任务log时间戳插件,使得job log的每次输出前面都增加当时的时间
Parameterized Trigger Plugin:这是一个扩展型的插件,使各个job连接的时候可以传递一些job相关的信息
Join Plugin:这也是一个触发job的插件,亮点在于它触发job的条件是等待所有当前job的下游的job都完成才会发生。
Files Found Trigger:检测指定的目录,如果发现指定模式的文件则启动build。
BuildResultTrigger Plugin:根据其他的job的成功或失败来启动此build。
Publish Over SSH Plugin:通过ssh发布文件
Rebuild Plugin:重新执行插件
ws-cleanup Plugin :workspace清理插件
Cron Column Plugin: 通过定时任务例行的运行一些job

Job Configuration History Plugin:使用心得:使job具备版本管理的能力,diff和rollback功能更是非常赞
HTTP Request Plugin:使用心得:在构建前后可以通过该插件以http形式调用各种api接口实现和内部系统的联动
Periodic Backup:使用心得:备份是运维一个系统必须要保障的事情,该插件的恢复功能可能不可用,需要手工进行,好处在于可以定时备份
Job Import Plugin:使用心得:可以快速导入其他jenkins集群的已有job,需要认证的jenkins系统导入需要提供凭证才可以
Status Monitor Plugin:构建状态插件
Build Monitor View :使用心得:基于该插件可以实现dashboard功能
Build Environment Plugin:构建环境插件,可以进行构建环境比较。
FTP插件:
Monitoring:Monitoring of Jenkins

基础依赖插件:
jQuery Plugin:jQuery插件

findbugs使用方式:
目的:进行代码走查的自动化,能够提示垃圾代码或者提供代码优化的建议
1.首先下载findbugs
http://findbugs.sourceforge.net/downloads.html
2.其次在ant中配置findbugs
http://www.51testing.com/?uid-265524-action-viewspace-itemid-200942
3.再次在jenkins内下载findbugs插件
无需配置,如果是ant调用会在项目内自动生成findbugs.xml文件并且在jenkins在绘制findbugs曲线

emma使用方式:
目的:进行测试代码覆盖率检查
如果使用maven那么只要指定target目标位emma:emma即可
如果使用ant那么请继续看
1.首先下载emma
http://emma.sourceforge.net/downloads.html
2.其次在ant中配置emma
一个ant实用例子http://ouzhong.blog.hexun.com/32369273_d.html
ibm ant-emma配置:http://www.ibm.com/developerworks/cn/java/j-lo-emma/
3.下载emma-jenkins插件
https://wiki.jenkins-ci.org/display/JENKINS/Emma+Plugin

其他做简单介绍需要的时候可以使用:
1.ant插件
2.disk usage plugin 这个插件可以监控每次build项目所花费的物理空间
3.thinbackup 这个插件可以备份你job的配置
4.jenkins workspace cleanup plugin 这个插件可以再每次build之前清空workspace
5.build-name-setter 这个插件可以设置每次build显示的名字
6.git插件
7.PMD插件 这个插件
8.python plugin 这个插件支持你像写shell一样写python代码
9.email-ext plugin 这个插件提供你发送HTML格式的邮件
10.hudson next build number plugin 如果你想把hudson每次build的版本号放到你的产品版本号中你可以使用这个插件
11.HTML publisher plugin 支持HTML格式的report
12.android lint plugin 支持android项目检查
13.Copy Artifact Plugin 支持把build后产生的结果copy到其他项目去
14.promoted 支持手工测试验证,或者发布产品,在build结束后手动执行
15.Jenkins description setter plugin 这个插件可以支持在Job的描述修改,例如二维码
16.Hudson Port Allocator Plug-in 开启关闭端口,或者选择一个自由的端口来进行build
17.Android Emulator Plugin
18.JobConfigHistory Plugin 这个插件用于查看jobconfig历史记录
19.Jenkins Sounds plugin 这个插件用于结束build后会给出声音提示
20.JIRA Plugin 这个插件用来和Jira配合使用

Maven单独构建多模块项目中的单个模块

1、Root POM指向父pom.xml

2、Goals and options指定构建模块的参数:mvn -pl jsoft-web -am clean package,单独构建jsoft-web项目以及它所依赖的其它项目

说明:

1、可能存在的场景,多模块项目没有互相引用,那么此时可以单独构建单个项目,指定到子模块的pom.xml文件即可完成编译。

2、如果多模块项目各自都引用了,那么单独编译子模块的pom.xml文件会直接报错,解决方法就是编译父项目pom.xml。

3、如果编译父项目,那么可能会造成编译时间很慢,其中有些项目也不需要编译,解决方法如下:

解决方法:

Maven选项:

-pl, --projects
        Build specified reactor projects instead of all projects
-am, --also-make
        If project list is specified, also build projects required by the list
-amd, --also-make-dependents
        If project list is specified, also build projects that depend on projects on the list

首先切换到工程的根目录

单独构建模块ringyin-commonb,同时会构建ringyin-common模块依赖的其他模块

mvn install -pl ringyin-common -am

单独构建模块ringyin-common,同时构建依赖模块ringyin-common的其他模块

mvn install -pl ringyin-common -am -amd

clean install -Pdev -Dmaven.test.skip=true

Goals and options指定构建模块的参数:mvn -pl jsoft-web -am clean package,单独构建jsoft-web项目以及它所依赖的其它项目。

Mutiple SCMs 是Jenkins的一个插件,主要解决一次发布需要拉取多个仓库代码,比如你想从拉取A项目并且在A项目的子文件夹asset/src/h5中拉取B项目的代码放于文件夹asset/src/h5中。就要使用这个插件。
而Additional Behaviours 项的配置是解决拉取两个项目同时,B项目必须放到到A项目的asset/src/h5中。

git checkout [-q] [-f] [-m] [<branch>]
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>…
git checkout [<tree-ish>] [--] <pathspec>…
git checkout (-p|--patch) [<tree-ish>] [--] [<paths>…]

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

转载自:http://qa.blog.163.com/blog/static/190147002201391661510655/

Jenkins除了开源和免费,还有一个最吸引人的功能之一就是支持插件。

Jenkins不光有丰富的第三方插件,还可以自己动手编写插件,和其他工具进行深度的集成,从而达到符合公司产品管理需求的一个定制化。

接下来我们会分享一系列关于Jenkins插件的使用和开发实践经验,介绍一些经典而又实用的第三方插件和公司内部自己开发的插件,希望大家能在工作中根据项目的需求灵活地运用。

这次首先介绍的5个插件都是和Jenkins的job相关的,通过这些插件,可以按需连接各个job,使之协同工作。

那开始介绍前,让我们来看看为什么需要这些插件来连接各个job呢。有人可能会说,为什么不能把产品的持续集成步骤统统建立在一个job上呢?

- 首先,Jenkins有一个限制,就是一个job的一次构建的所有任务只能运行在一个节点上,那如果产品的编译/部署/测试需要在不同平台下(如编译必须在Linux下,而执行用例需要在Windows下)就必须建立不同的job

- 再次,如果只有一个job必然构建时间会变长,也就是意味着产品的质量反馈变慢(必须等到所有的任务才做完才能得到反馈)

- 还有,分开建job也是为了相互之间的“弱耦合”,之后相应job的配置改动能尽量小的影响到其他job

- 最后,这样可以使产品的持续集成流程更加清晰,及时发现产品相应的短板

1. Copy Artifact Plugin

功能介绍:这是个比较简单的插件,只是简单地把某个job的构建物拷贝到当前job的工作区。

简单配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CFHsBhU7-1599615307566)(assets/2294865485222059354.png)]

实践应用

- 在产品被编译/打包之后,需要在测试/联调/演练多个环境下部署的时候,可以采用。一个job负责代码的编译和打包,并把构建物(通常是WAR,JAR,TAR等)存档下来,然后之后的多个job可以分别获取相应的构建物用于产品的部署,保证了部署环境的一致性。

Tips:

+ 一定要保证上游job的构建物是被存档的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-czKztyZh-1599615307569)(assets/1403152759002810735.png)]

+ 默认情况下,拷贝过来的构建物会以相同的目录结构存储,如果只想保留文件而已,可以选择“Flatten directories”,这样所有的构建物都会直接拷贝到“Target directory”,而不会保留目录结构

2. Parameterized Trigger Plugin

功能介绍:这是一个扩展型的插件,使各个job连接的时候可以传递一些job相关的信息

​ - 当前job的参数

​ - 自定义的参数

​ - SCM相关信息

​ - 运行的Node信息

简单配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQyPlJv3-1599615307572)(assets/888335026599348390.png)]

实践应用

- 传递SVN Revision: 在代码检出阶段会获取相应的SVN Revision信息,传递这个信息到下游的job中,在下游的各个job中直接检出相对应版本的代码,保持各个构建的版本一致性,防止由于频繁的代码提交导致各个job运行版本的不一致

- 保持各个job运行在同一个节点下: 如果有多套测试环境,可以通过这个勾选这个选项保持构建环境的一致性

Tips:

+ 传递SVN Revision或是GIT Revision可以通过如下设置来完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkRbZke1-1599615307577)(assets/1628332740371262405.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q45NtTGv-1599615307579)(assets/6597962570100087784.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y03XmYut-1599615307581)(assets/6597835026751262986.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdDXhZQv-1599615307583)(assets/2858659863573689837.png)]

3. Build Pipeline Plugin

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

简单配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mIqV5WAx-1599615307586)(assets/753227037777807296.png)]

实践应用

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zVEjSAnb-1599615307588)(assets/717761190712256131.png)]

Tips:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyGUfRuR-1599615307589)(assets/1548675321880058404.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2ID4L9i-1599615307591)(assets/1138284805918161457.png)]

4. Multijob Plugin

功能介绍:这是一个集成了ParameterizedTrigger和BuildPipeline的插件,但它是形成一个新的job,而不是一个视图。

并且它不要求job之间本身就存在依赖关系。这样一来,建立job的时候可以保持相对的独立性,而通过这个插件来组装成产品所需要的持续集成环境。

简单配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGJypcnl-1599615307593)(assets/1998472334745775061.png)]

实践应用

- 如果需要建立多条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”下默认是不能选择使用这个插件的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1fOoGy4-1599615307595)(assets/2233785415275847580.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ymxPyXk3-1599615307597)(assets/6598209960216216822.png)]

5. Join Plugin

功能介绍:这也是一个触发job的插件,亮点在于它触发job的条件是等待所有当前job的下游的job都完成才会发生。

当然,只有在当前job有两个及以上的下游job时才有意义。

简单举个例子来说,A同时触发B1和B2两个job,然后配置这个插件又触发C,这时C就会等B1和B2都完成之 后才会被执行

简单配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kES9EzWM-1599615307599)(assets/2240822289693614677.png)]

实践应用

- 有些产品的部署会依赖于某些第三方的产品,可以同时部署自身的产品和第三方服务,这时接下来的测试工作就需要等待所有这些部署都完成,自然这个插件就能有用武之地

- 为了加快构建的速度,通常可以设置单元测试和冒烟测试同时进行,而随后的功能测试又希望是在单元测试和冒烟测试都通过的情况下才进行,这种情况下Join插件就是必须的了

Tips:

+ 默认情况下,通过Join插件触发的job是不能传递参数的,如果有需要,可以勾选“Trigger parameterized build on other project”,这样其实就是把Join插件和ParameterizedTrigger插件集成起来了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nYLMuY6A-1599615307601)(assets/711850216201331475.png)]

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

脚本执行插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iToAosnC-1599615307603)(assets/1544772728525.png)]

参考

Jenkins 持续集成综合实战

https://blog.csdn.net/kefengwang/article/details/54233584

pipeline插件介绍和使用

https://blog.csdn.net/diantun00/article/details/81075007

入门指南

http://www.cnblogs.com/zz0412/tag/jenkins/

http://www.cnblogs.com/itech/archive/2011/11/04/2236230.html

Jenkins 实际项目操作

https://www.cnblogs.com/kangaoxiaoshi/p/6022406.html

护、可视化强的持续集成环境**

脚本执行插件

[外链图片转存中…(img-iToAosnC-1599615307603)]

参考

Jenkins 持续集成综合实战

https://blog.csdn.net/kefengwang/article/details/54233584

pipeline插件介绍和使用

https://blog.csdn.net/diantun00/article/details/81075007

入门指南

http://www.cnblogs.com/zz0412/tag/jenkins/

http://www.cnblogs.com/itech/archive/2011/11/04/2236230.html

Jenkins 实际项目操作

https://www.cnblogs.com/kangaoxiaoshi/p/6022406.html

https://cloud.tencent.com/developer/article/1342915

猜你喜欢

转载自blog.csdn.net/pointdew/article/details/108482648
今日推荐