背景
jenkins是一个基于Java开发的持续集成工具,通常用于监控持续重复的工作,用于自动化测试领域再合适不过了。
本文是我利用jnekins来进行任务分发而做的一篇关于jenkins的学习使用初步入门。
通常在进行简单的远程任务调度上,我们可以使用ssh
进行远程操作运行命令,但一旦机器增加(多机器调度)或者运行命令复杂(多参数任务)时,ssh
就显得不那么方便了:命令写起来麻烦,参数的各种转义也很容易出错,可读性变差。这时候通过jenkins来管理多机器调度就显得很方便了。
安装
1. 依赖及安装
以下以Red Hat
发行版为例,其他安装方式可以戳标题链接查看
jenkins依赖Java7及以上版本,可以通过java官网安装也可以通过命令行安装
以yum
安装为例sudo yum install java
然后安装jenkins:1
2
3sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
2. 服务启停
安装完毕启动服务:1
2sudo service jenkins start/stop/restart
sudo chkconfig jenkins on //添加开机启动
如果Java
安装没有问题,这时候应该提示Starting Jenkins OK
服务启动后,打开http://<serverhost>:<port>
即可看到jenkins的界面了,默认端口是8080
。
3. 安装语言包汉化界面
毕竟不是学英语,汉化一下还是有必要的。
打开jenkins页面,进入Manage Jenkins
->Manage Plugins
安装下语言插件,搜索并安装Locale Plugin
即可。
安装完毕后回到Manage Jenkins
->Congigure System
,在Locale
设置项下将Default Language
值设置为zh_CN
。
节点管理
安装完成后,jenkins的安装机器默认为master
节点,此外我们还可以给jenkins定义额外的节点,这样就可以让jenkins将任务分发到不同的机器上去。
进入系统管理->管理节点->新建节点
在上图中的Host
处填写要绑定的节点IP
,name
处为节点定义名字,设置jenkins的远程工作目录,并设置任务的并发数目(# of executors
)。
添加完成以后如下图所示:
创建任务
返回jenkins页面,点击新建任务,弹出的选项中选择合适的项目类型,以自由风格为例:
大部分待填项都很明了,简单说明几处:
源码管理部分,可以设置一个代码库,一旦检测到代码库有变动则自动触发一次构建。支持cvs
和svn
不支持git
。
如果需要严格设置任务需要在哪个机器上运行,可以勾选Restrict where this project can be run
,然后在Label Expression
中填入节点管理中给节点设置的Label
名。即当时填写的Name
字段。
我的需求是让jenkins分发并运行一段shell
脚本,因此在增加构建步骤
中添加Excute shell
,在Command
中填入我要运行的shell
命令。由于脚本需要接收很多参数,因此还要勾选参数化构建过程
,并添加参数
选择String parameter
,填写好参数名字并可以给参数设置默认值,在运行的命令中可以使用${name}
方式调用传递进来的参数。
当然,还可以增加构建后操作步骤
,如收集运行报告
,发送通知邮件
等功能,jenkins都提供了相应的插件来支持。
jenkins API
至此,一个jenkins任务就配置成功了,点击立即构建就可以run起来了。网上很多的教程文章也就到此为止了。。作为使用svn来作为触发器的当然是没问题了,而我并没有使用源码管理器,那么要怎么触发jenkins进行构建呢?我需要的是可以使用命令行的方式进行触发。好在jenkins还提供了相当强大的REST API
。
首先,让我们来看一下如何通过命令行方式触发一个要接收参数的jenkins任务。1
http://<serverhost>:<port>/job/<jobName>/buildWithParameters?<key=value>&<key=value>...
发送一个上述http
请求即可触发一次jenkins构建了。
然后,如果我们需要自动获取此次构建的日志,那么只有获取了此次构建的id号才行,jenkins任务每次构建,id都会自增一次,如何才能获取到呢?1
http://<serverhost>:<port>/job/<jobName>/api/json
请求上述URL
,我们可以看到关于jenkins的很多信息:
nextBuildNumber
即为下一次构建的id号。知道了构建号,再通过1
http://<serverhost>:<port>/job/<jobName>/<buildNumber>/api/json
我们可以看到关于本次构建的很多信息:duration
:运行时间result
:运行状态
有了上述接口,我们通过自动化手段触发以及轮询任务状态都不是问题了。
有的人也许会觉得记住API也太不人道了 && 如果我不用json接口怎么办
,其实在jenkins的页面上就提供了,看看右下角:
点开就是API页面:
不但有json
的,还有XML
和python
的,是不是很良心?