Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满足各式的集成需求。
因为手里项目所用到的稳定性和性能测试工具每天手动部署到各台windows机器上比较浪费时间,所以这里使用jenkins用于部署测试工具到各个测试机上运行。整套环境需要一个中心服务器和若干测试机器组成的slave,这就是jenkins的Master/Slave结构,如下所示:
在我们下面的使用中,master和slave是通过jnlp协议来通讯的。
Master机器:
我们需要在我们的master机器上安装jenkins,没有什么特殊说明,注意的是安装包方式同样可以通过运行安装目录下的jenkins.war来启动jenkins,而默认情况下安装后会安装一个名为Jenkins的自动运行的服务。
安装完后访问jenkins的根目录,默认情况下端口是8080(如果要使用其他端口启动,可以通过命令行”java –jar Jenkins.war –httpPort=80”的方式修改),通过”系统管理”-”管理节点”-“新建节点”
新建节点主要设置远程目录已经运行和访问的方式,注意这里如果有很多机器,建议远程工作目录名称都一样,方便管理,如下所示:
点击保存,这时候就会在jenkinsnode视图左侧看到创建的slave节点。
下面要做的就是部署真正的slave机器了,点击左侧的”test_machine”,这时候会打开该节点的页面,复制这个url,一般是形如http://192.168.1.148/computer/test_machine/, 注意这里在访问的时候不要通过 127.0.0.1的方式访问,因为这样可能会导致后面所用到的jnlp文件中master地址也是127.0.0.1,从而导致slave机器上启动失败。
Slave机器:
首先需要在slave机器上安装java环境和.NetFrameWork环境,然后在浏览器中访问上面拷贝的url,这里提供了三种方式运行slave,我这里使用的第二种方式:
备注:slave.jar的位置如 http://192.168.1.148/jnlpJars/slave.jar
这时候有可能出现如下的错误:
这是因为从 Java 7 Update51 开始,如果应用程序没有证书(例如未签名应用程序)或缺少应用程序名称和发行者信息,默认情况下会被阻止。运行此类型的应用程序可能不安全并存在较高级别的风险。
解决的方法是通过windows开始菜单项打开java控制面板,然后把master机器的url添加到安全提示的例外网站。
再次运行,则弹出如下的安全警告,允许运行即可。
同时,当运行主机上安装了多个java版本时并且应用程序被安全设置阻止时,可以取消一些版本,防止一些意想不到的异常。
运行成功我们能看到连接成功的窗口,而我们继续查看可以在设定的远程工作目录,c:\remote_jenkins下看到如下的一些文件jenkins-slave.exe,jenkins-slave.exe.config,slave.exe,jenkins-slave.xml。 我们这里主要关注jenkins-slave.xml,从下面我们可以看到两个关键节点,executable和arguments,如果你想使用不同的java版本,可以从这里修改,而从arguments可以看出jnlp协议连接的master主机地址。
这时候slave机器已经运行起来了,但是我们显然不想每次都在slave机器上运行一下启动,所以jenkins又提供了slave的服务,如下所示进行安装。
上面说过机器上需要. NetFrameWork环境,我理解是用于安装windows服务用的,当你没有安装时会提示如下错误:
但是上面的提示却误导了我,因为一般都会版本越新越好,但是在xp环境上,最终只有安装2.0版本才能正常,其他所有版本安装后安装服务都会提示如下一些错误提示:
当然上面slave机器上所有进行操作的前提是设置了远程工作目录并且的确在你远程的物理机上创建了该目录,如果没有设置远程工作目录,会错误提示如下:
如果配置了远程工作目录,但是salve机器上没有该目录,则弹出如下错误:
如果slave无法连接,查看远程工作目录下的jenkins-slave.err.log,
这是因为我在master机器上把该slave的名字改了,但是下发到该slave上的jenkins-slave.xml还是旧的信息。
还有一种情况就是在在你master机器ip不断变化的情况下,可能存在即使新建了新的slave节点,但是启动slave的时候失败的情况,这时候最好的方式是看一下该节点的slave-agent.jnlp文件中的内容,然后手动修改中间的一些地址信息,然后手动javaws运行该文件即可。另外一种方法是jenkins的系统管理面板下修改“Jenkins Location”的” Jenkins URL”。
文件下发及执行:
Jenkins的插件安装:
Jenkins的插件安装支持两种方式:在线安装和离线安装,进入”系统管理”-“管理插件”-“可选插件”列表中选择插件然后点击列表下方的安装,这是在线安装方式,但是经常会出现下载安装超时的情况。
离线安装时直接下载插件,然后在同窗口的“高级”标签下上传插件即可,重启即可使用,插件,而大量的插件可以在https://updates.jenkins-ci.org/download/plugins/下载。
Copy To Slave Plugin:
该插件用于将文件发送到slave机器的工作空间中,使用方式为在项目配置中,会有一个构建环境的区域,选择对应文件or目录即可(注意:该插件对中文支持上存在问题,所以所有的资源都请使用英文名)
Windows Exe Runner Plugin:
该插件用于在下发相关的exe文件到slave机器上之后执行,安装该插件之后,在jenkins服务器的”系统管理”-“系统设置”如下显示,注意目录为slave机器上的绝对路径。
WorkSpace Cleanup Plugin:
该插件用于在任务执行前或者执行后进行slave工作空间的清理。
如上,所有环境准备都已经完成,执行构建即可,同时如果需要指定到slave机器执行,则在构建设置中设置对应的机器即可。
而如果运行的程序在slave机器上关闭,则构建会立即显示失败,而如果通过左侧的构建进度右侧的关闭按钮,则slave机器上运行的程序也会立即关闭。
参考资料:
Installing Jenkins as a Windows service -Jenkins - Jenkins Wiki
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service
Distributed builds - Jenkins - Jenkins Wiki
https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds
hudson-ci.org/docs/HudsonArch-Execution.pdf
http://hudson-ci.org/docs/HudsonArch-Execution.pdf
Windows Exe Runner Plugin - Jenkins -Jenkins Wiki
https://wiki.jenkins-ci.org/display/JENKINS/Windows+Exe+Runner+Plugin
Copy To Slave Plugin - Jenkins - JenkinsWiki
https://wiki.jenkins-ci.org/display/JENKINS/Copy+To+Slave+Plugin
https://updates.jenkins-ci.org/download/plugins/ws-cleanup/