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

        这几天试着搭了个持续集成环境,我使用的是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来进行配置,构建的时候就能够选择相应的内容来构建,而不是所有构建。


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


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

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

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


三、開始构建


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

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


四、查看构建结果


        在这里能够查看详细的构建结果。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目录。给它设置一个轮询时间例如以下图所看到的:


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

       新建一个正式的任务,它的功能就是真正构建client或者是转换资源。它的触发条件是monitor构建成功。在触发条件中选择 

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"  

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

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

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



posted @ 2015-03-15 16:22  blfshiye  阅读(474)  评论(0编辑  收藏  举报