7. Jenkins 其他功能
[作者:Surpassme]本篇主要介绍日常使用Jenkins过程中一些比较实用的功能。
7.1 Jenkins内部调用另一个job
[作者:Surpassme]假设在一个Jenkins中有两个彼此独立的任务,但随着迭代不断更新,两个彼此独立的任务需要相互调用。这时候我们可以在一个任务中,添加另一个任务的步骤。除这种方法,还有没有其他的办法呢?
[作者:Surpassme]既然在Jenkins存在参数化的pipeline,则应该是可以支持在一个pipeline中调用另一个pipeline。而要实现这个功能,在pipeline中可以使用build
步骤来实现。看起来是不是与upsteam非常相似,主要区别如下所示:
- build 步骤是上游使用,而upstream是下游使用
- build 可以带参数,而upsteam属于被动触发且不能带参数
[作者:Surpassme]build 使用用法示例如下所示:
steps{ build( job:"jobName", parameters:[ paramsType(name:"name",value:"value") ], propagate:true, quietPeriod:3, wait:true )}
[作者:Surpassme]build 步骤的两个基本参数如下所示:
- job:
必填参数
,目标任务的名称 - parameters:
可选参数
,目标任务的传入参数列表,使用方法与参数化命令parameters
类似。 - propagate:
可选参数
,布尔类型。若值为true
,则只有当下游pipeline的运行结果状态为SUCCESS
时,上游pipeline才算成功,若值为false
,则忽略下游pipeline的运行结果状态,上游pipeline都忽略。默认为true
- quietPeriod:
可选参数
,整型。触发下游pipeline后,下游pipeline等待多久执行。如果不设置,则等待时长由下游pipeline确定,单位为秒
- wait:
可选参数
,布尔类型,是否等待下游pipeline运行完成。默认为true
choice类型的参数没有对应的传参方法,使用
string
传参方法代替
[作者:Surpassme]假设现在有两个job,分别为SurpassA
和SurpassB
,上游为SurpassA,下游为SurpassB
- SurpassB的任务pipeline脚本如下所示:
pipeline{ agent any options{ timestamps() } parameters{ string( name:"stringDemo", defaultValue:"job string SurpassB", description:"job SurpassB string demo" ) text( name:"textDemo", defaultValue:"job text SurpassA\njob text SurpassB\njob text SurpassC", description:"job SurpassB text demo" ) booleanParam( name:"booleanDemo", defaultValue:true, description:"job SurpassB boolean demo" ) choice( name:"choiceDemo", choices:["SurpassA","SurpassB","SurpassC"], description:"job SurpassB choice demo" ) password( name:"passwdDemo", defaultValue:"job passwd SurpassB", description:"job SurpassB password demo" ) } stages{ stage("job SurpassB demo"){ steps{ echo "job SurpassB demo" } } }}
- SurpassA的任务pipeline脚本如下所示:
pipeline{ agent any options{ timestamps() } stages{ stage("call inner jobs demo"){ steps{ echo "call inner job SurpassB" build( job:"39-SurpassB", parameters:[ string(name:"stringDemo",value:"input text by SurpassA"), text(name:"textDemo",value:"input text by SurpassB"), booleanParam(name:"booleanDemo",value:false), string(name:"choiceDemo",value:"SurpassB"), password(name:"passwdDemo",value:"Surpass") ] ) } } }}
最终运行结果如下所示:
7.2 Jenkins调用外部Jenkins
[作者:Surpassme]前面演示的在同一个Jenkins,内部相互调用不同任务的pipeline,那如果是两个不同服务节点的Jenkins有没有相互调用呢?答案是可以的。
通过远程Jekins调用本地Jenkins,演示的环境如下所示:
Jenkins Server | 描述信息 |
---|---|
192.168.188.133 | 本地Jenkins |
192.168.188.132 | 远程Jenkins |
操作步骤如下所示:
- [作者:Surpassme]1.在本地Jenkins开启
触发远程构建
,并设置相应的Token,如下所示:
- [作者:Surpassme]2.在本地Jenkins新建一个用户,并以该用户进行登录,查看并复制对应的API Token信息,如下所示:
- [作者:Surpassme]3.通过接口工具(如Postman)发送HTTP请求,检验是否能成功调用
运行结果如下所示:
- [作者:Surpassme]4.在远程pipeline中添加以下步骤即可实现远程调用
pipeline{ agent any options{ timestamps() } stages{ stage("remote call pipeline demo"){ steps{ script{ def url="Surpass:110313acfb17c8b2058f9816d5b6062455@192.168.188.133:9090/job/39-SurpassB/buildWithParameters?token=surpass-local&stringDemo=SurpassRemote&textDemo=SurpassRemote&booleanDemo=true&choiceDemo=SurpassB&passwdDemo=SurpassRemote" sh( script:"curl -X POST \'${url}\'", returnStatus:true ) } } } }}
[作者:Surpassme]运行结果如下所示:
7.3 Jenkins 备份
[作者:Surpassme]Jenkins 的所有数据都是存放在文件中。因此Jenkins备份也就是备份JENKINS_HOME
目录。其目录结构大致如下所示:
- config.xml: Jenkins系统配置文件
- *.xml: 部分插件配置文件
- plugins:插件安装路径
- jobs: job存放路径
其中jobs的文件目录结构如下所示:
jobName: 以Jenkins 项目名称做为文件夹名称 - config.xml: 该项目对应的配置文件,里面存储有相应的pipeline - nextBuildNumber:存放下一次构建的构建号,为文本文件 - builds:每次构建内容
- workspace: 工作空间目录
[作者:Surpassme]并不是所有内容都需要备份,一般来讲,只需要备份jobs
和plugins
目录即可。
原文地址:https://www.jianshu.com/p/56aeeaa39fa4
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
作者: Surpassme
来源: http://www.jianshu.com/u/28161b7c9995/
http://www.cnblogs.com/surpassme/
声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 原文链接 ,否则保留追究法律责任的权利。如有问题,可发送邮件 联系。让我们尊重原创者版权,共同营造良好的IT朋友圈。