这几天试着搭了个持续集成环境,我使用的是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)Jenkinsjobsexcelworkspace oolsexcel" python.exe excel2lua.py python.exe excel2json.py cd "D:Program Files (x86)Jenkinsjobsexcelworkspace ableserver" 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什么的。设置的地方在"系统设置"--"全局属性"里面