持续集成环境Jenkins的搭建和使用

时间:2024-09-22 16:05:32

这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,由于被Oracle收购了,所以换个名字继续开源,这个有点像MySQL。

持续集成总是跟敏捷开发什么的搞在一起,显得非常高大上,事实上它就是一个后台服务+web管理配置页面,它能够自己主动化(定时或事件触发)地运行某项任务,比方编译程序、打包程序、自己主动公布等等。这个在web开发或者大项目的多人合作上面非常有帮助。仅仅要配置好了,然后能够个人做个人的,Jenkins会自己主动的从svn或git上面获取最新的代码,整合编译公布。相当于主程的非常大一部分工作(公布版本号)都由Jenkins自己主动完毕了。由于手游项目比較小,所以Jenkins的意义不是非常大,可是通过Jenkins依旧能够自己主动化的处理资源、整合公布版本号、自己主动化处理渠道包等等。

一、搭建Jenkins环境

http://jenkins-ci.org/下载相应的版本号安装,它会自己主动启动一个后台服务。在浏览器中訪问http://localhost:8080/能够管理和配置Jenkins,这个地址相同是能够设置的。

在"系统管理"里面能够设置全局选项(比方svn版本号),也能够下载和更新插件。

搭建好开发环境非常easy,这个也是Jenkins比其它持续集成工具要优秀的地方。

二、新建一个任务(Job)

这里有两个经常使用的选项一个是"构建一个*风格的软件项目",还有一个是"构建一个多配置项目"。

我经常使用的是*风格的软件项目,而多配置项目用于这种情形:任务相似,可是一些选项和配置不同,比方debug和release版本号,比方android的各种渠道包,这个就能够加入相应的Key-Value来进行配置,构建的时候就能够选择相应的内容来构建,而不是所有构建。

持续集成环境Jenkins的搭建和使用

在Repository URL里面配置svn的server地址,Credentials里面配置用户和password。假设是老的svn插件可能没有Credentials,推荐更新到最新。

持续集成环境Jenkins的搭建和使用

"构建触发器"里面能够设置这个任务怎样触发(比方按时间触发、其它任务完毕后触发等等,这个后面会重点说明),插件里面有非常多触发类型可选,比方[FS Trigger]这个就是一个插件的功能。

"构建"里面能够设置怎样完毕构建。能够是windows的命令,也能够是shell脚本,shell脚本里面相同能够是python代码。这些在windows以下都是能够使用的。

"构建后操作"能够设置构建完毕后邮件通知或者是其它事情。通过插件,能够在这里完毕很多其它的功能。

三、開始构建

持续集成环境Jenkins的搭建和使用

点击"马上构建"则能够马上開始运行构建流程。假设在配置里面设置了Poll SCM,则这里还会有Polling Now的选项。Poll能够查看svn,假设有更新,则開始构建,否则不做不论什么处理。这个后面实际应用里面会介绍。

"工作空间"里面能够看到Jenkins检出的svn目录内容(一般在'Jenkins安装目录'/jobs/任务名/workspace目录下)。

四、查看构建结果

持续集成环境Jenkins的搭建和使用

在这里能够查看详细的构建结果。svn的更新内容、命令行的输出都会在这里显示出来(比方Python代码的print)。   只是我使用的时候有一个问题就是这里的显示结果非常诡异,通过某种方式点进来就会显示python的输出,而另外某种方式就不会。

五、实际应用

1、我的实际需求大概是这种,Jenkins自己主动检測svn的状态变化。当发现资源改变,则自己主动执行脚本进行资源或者配置的转换,Jenkins自己主动把转换后的结果提交。每隔两个小时自己主动构建打包整个client。

2、这么做的优点。全部人仅仅须要关注svn,美术和策划负责提交正确的原始资源到svn上面,而client程序仅仅须要更新svn就能够获取到正确的转换后的资源。就像Unity一样,打包的时候会自己主动进行资源转换。程序不须要在打包的时候担心哪些资源应该是什么格式,哪些配置还没有导出,这些都是自己主动完毕的。

六、问题的解决

1、Jenkins怎样检測svn的变化。

这个有两种方式,一种是依赖于svn的机制,post-commit的hook。TortoiseSVN中能够右键菜单中选择Propertise,在里面选择Local Hooks,它能够指定一个程序或者bat的批处理,作用是这个目录有提交,则在提交完成后运行相应的命令。 只是这个是本地Hook,仅仅有本地提交的时候才会运行。

在svnserver上面能够在hook目录以下加入post-commit的hook。这个我没有尝试,只是理论上是不论什么人提交都会运行相应命令,并且因为是在server上面,所以这个批处理仅仅须要放置在server就能够。

还有一种方式是依赖于Jenkins的轮询机制(Poll),这个也是我如今使用的方式。这个事实上不如post-commit的机制,由于有轮询间隔就比然会有延迟,只是在无法操作svnserver的时候,这个也是一个不错的解决方式。 我的实现方法是这种,新建一个monitor任务,这个任务的svn路径是我们须要检測的详细目录,比方excel目录。给它设置一个轮询时间例如以下图所看到的:

持续集成环境Jenkins的搭建和使用

这个触发器的意思就是每隔两分钟检測一次svn的变化,假设发现变化则触发构建。日程表中的详细格式能够点击旁边的问号来查看,功能非常强大,能够指定每隔几个小时或者是周一至周五的什么时间段触发。 注意间隔时间最小为2分钟,我设置1分钟会出问题,无法触发构建,当然更不能设置间隔多少秒来运行。

新建一个正式的任务,它的功能就是真正构建client或者是转换资源。它的触发条件是monitor构建成功。在触发条件中选择 Build after other projects are built 然后填写要监听的monitor的任务名字。

这样每一个两分钟monitor会检測svn的状态,因为excel文件夹非常小,所以这个检測速度是非常快的。当发现该文件夹内容有改变,则触发构建,从而触发转换资源的任务。

2、构建命令

d:
cd "D:\Program Files (x86)\Jenkins\jobs\excel\workspace\tools\excel"
python.exe excel2lua.py
python.exe excel2json.py
cd "D:\Program Files (x86)\Jenkins\jobs\excel\workspace\table\server" for /f "tokens=2*" %%i in ('svn status ^| find "?"') do svn add "%%i"
for /f "tokens=2*" %%i in ('svn status ^| find "!"') do svn delete "%%i"
svn commit --username xxxx --password xxxx -m "automatic jenkins excel"

通过这个构建命令,运行了这么几个操作。跳转到工作文件夹,运行转换脚本。 然后到转换后的文件夹提交改动内容。

svn命令须要下载subversion,并加入到系统的环境变量中。因为Jenkins的Svn插件的svn版本号仅仅到1.7,所以必须下载1.7版本号的subversion。这样才干正确操作Jenkins检出的svn文件夹。

最后三行命令能够自己主动检測文件的加入和删除,然后运行提交。

3、共享工作文件夹

这个没有研究成功。我如今就无论会不会浪费空间了,一个Job一个workspace。理论上在配置里面选择"高级",然后能够指定Custom Workspace的。可是有个问题就是Job同一时候执行时可能会有锁和冲突,造成了Jenkins会清空并又一次检出工作文件夹。并且Jenkins使用的是1.7的svn(默认是1.4须要在系统管理中改动),所以无法识别1.8版本号的TortoiseSVN检出的工作文件夹。

4、怎样通过脚本或者命令触发构建

把鼠标指向马上构建button,这里显示的链接地址就是触发马上构建的命令:http://localhost:8080/job/excel/build?delay=0sec 我们仅仅要在脚本或者批处理中调用ie打开这个链接就能够通知Jenkins进行构建了。
当然调用这个地址的方式有非常多,比方wget、curl等等。

5、不识别系统设置的环境变量

貌似Jenkins里面的环境变量要单独设置,比方NDK_ROOT、JAVA_HOME什么的。设置的地方在"系统设置"--"全局属性"里面

持续集成环境Jenkins的搭建和使用