码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-11 14:30:51      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:android   blog   http   io   ar   os   使用   sp   for   

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

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


一、搭建Jenkins环境

        从http://jenkins-ci.org/下载对应的版本安装,它会自动启动一个后台服务。在浏览器中访问http://localhost:8080/可以管理和配置Jenkins,这个地址同样是可以设置的。

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

        搭建环境很简单,这个也是Jenkins比其他持续集成工具要优秀的地方。


二、新建一个任务(Job)

        这里有两个常用的选项一个是"",另一个是""。

        我常用的是自由风格的软件项目,而多配置项目用于这样的情形:任务相似,但是一些选项和配置不同,比如debug和release版本,比如android的各种渠道包,这个就可以添加对应的Key-Value来进行配置,构建的时候就可以选择对应的内容来构建,而不是全部构建。

bubuko.com,布布扣

         在Repository URL里面配置svn的服务器地址,Credentials里面配置用户和密码。如果是老的svn插件可能没有Credentials,推荐更新到最新。

bubuko.com,布布扣

        "构建触发器"里面可以设置这个任务如何触发(比如按时间触发、其他任务完成后触发等等,这个后面会重点说明),插件里面有很多触发类型可选,比如[FS Trigger]这个就是一个插件的功能。

        "构建"里面可以设置如何完成构建。可以是windows的命令,也可以是shell脚本,shell脚本里面同样可以是python代码。这些在windows下面都是可以使用的。

        "构建后操作"可以设置构建完成后邮件通知或者是其他事情。通过插件,可以在这里完成更多的功能。


三、开始构建

bubuko.com,布布扣

        点击"立即构建"则可以立即开始执行构建流程。如果在配置里面设置了Poll SCM,则这里还会有Polling Now的选项。Poll可以查看svn,如果有更新,则开始构建,否则不做任何处理。这个后面实际应用里面会介绍。

        "工作空间"里面可以看到Jenkins检出的svn文件夹内容(一般在‘Jenkins安装目录‘/jobs/任务名/workspace文件夹下)。


四、查看构建结果

bubuko.com,布布扣

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


五、实际应用

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

      2、这么做的好处。所有人只需要关注svn,美术和策划负责提交正确的原始资源到svn上面,而客户端程序只需要更新svn就可以获取到正确的转换后的资源。就像Unity一样,打包的时候会自动进行资源转换。程序不需要在打包的时候操心哪些资源应该是什么格式,哪些配置还没有导出,这些都是自动完成的。 


六、问题的解决

      1、Jenkins如何检测svn的变化。

       这个有两种方式,一种是依赖于svn的机制,post-commit的hook。TortoiseSVN中可以右键菜单中选择Propertise,在里面选择Local Hooks,它可以指定一个程序或者bat的批处理,作用是这个文件夹有提交,则在提交完毕后执行对应的命令。 不过这个是本地Hook,只有本地提交的时候才会执行。

       在svn服务器上面可以在hook文件夹下面添加post-commit的hook。这个我没有尝试,不过理论上是任何人提交都会执行对应命令,而且由于是在服务器上面,所以这个批处理只需要放置在服务器就可以。

       另一种方式是依赖于Jenkins的轮询机制(Poll),这个也是我现在使用的方式。这个其实不如post-commit的机制,因为有轮询间隔就比然会有延迟,不过在无法操作svn服务器的时候,这个也是一个不错的解决方案。 我的实现方法是这样的,新建一个monitor任务,这个任务的svn路径是我们需要检测的具体文件夹,比如excel文件夹。给它设置一个轮询时间如下图所示:

bubuko.com,布布扣

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

       新建一个正式的任务,它的功能就是真正构建客户端或者是转换资源。它的触发条件是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"  

        通过这个构建命令,执行了这么几个操作。跳转到工作目录,执行转换脚本。 然后到转换后的目录提交修改内容。


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

标签:android   blog   http   io   ar   os   使用   sp   for   

原文地址:http://blog.csdn.net/langresser_king/article/details/41008321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!