hudson+svn对jobs配置文件的版本管理

        前段时间被问及一个问题,版本管理是否包含了配置文件,有哪些配置文件。

        当时对hudson还不熟悉,只有想到项目编译、运行时需要用到的配置文件,如项目的区域、关联系统地址配置等内容。

         最近在Jenkins网站上阅读到一篇文章《Keeping your configuration and data in Subversion》,方才明白那位前辈指的用Hudson+SVN对jobs相关的配置文件和数据进行管理。

         现在很多公司已经或正在做持续集成,简单的来说就是用CI服务器对项目进行管控,实现了从配置库进行自动的检出、更新代码,编译文件,部署到各个节点、检入到配置库等功能,这样用机器代替了手工,将人力从重复性劳动中解放出来,从而让配置管理员们能够去做一些创造性的事情。

        那么持续集成服务器上对job的配置,可以被认为比较重要的配置项,是要纳入版本控制管理的。一般来说,SVN是将job下面的文件都纳入管理的,那有一些我们不关注的文件和jobs,我们可以设置忽略掉。build生成的文件我们也没有纳入管控,因为文件较大占用空间,而且hudson里面的cp和rsync已经实现了备份(可恢复性)。我们不需要进行管控。就我个人的理解,对于build生成的文件,我们可以使用源码进行重新build,纳入管控没有意义。

        以下是我对这篇文章的翻译(已经是2年多以前的了,汗颜啊)。声明下,是自己简单翻译的,有一些错误欢迎大家指正。

         在SVN中创建一个仓库是很简单的,但是$HUDSON_HOME中哪些部分是需要管理的,这不是显而易见的。你会想将新的项目自动加到仓库中去,也会想自动删除一些不需要的。这时候我们的工具Hudson就派上用场了。

        Hudson的这个job是在每晚运行,执行一些SVN命令,并且提交相应的内容。这个job主要包含内容:

        1、增加一些新jobs,users,plugin configurations等等:

               svn add -q --parents *.xml jobs/*/config.xml users/*/config.xml userContent/*

        2、将不存在的一些内容(如一个已删除的job),从SVN中移除:

              svn status | grep '!' | awk '{print $2;}' | xargs -r svn rm

        3、自动检入!svn ci --non-interactive --username=mrhudson -m "automated commit of Hudson configuration" ,如没有设置密码,需要加上密码的命令--password

            --non-interactive意思是不要交互提示,这样一旦有问题直接会失败。"automated commit of Hudson configuration"为commit内容。

        新建一个job,绑到主机上,设置它的build周期,并且增加一个“Execute shell”作为build步骤。下面是用到的完整的脚本,将它放到build的步骤里:

        1、进入你的hudson目录

          cd /opt/hudson

         2、新建一些配置文件、jobs、用户、和目录

            svn add -q --parents .xml jobs//config.xml users//config.xml userContent/

         3、设置需要忽略的根目录下我们不关心的东西:将warnlog  log  tmp old bak jar  json文件放到myignores目录下(这个我还没有确定,大概是这个意思,等确认后我会再来修改),然后删除myignores目录

             echo -e "warnlogn.logn.tmpn.oldn.bakn.jarn.json" > myignores svn propset svn:ignore -F myignores . && rm myignores

          4、设置jobs目录下面需要忽略的东西:

             echo -e "buildsnlastnnextn.txtn.lognworkspacencoberturanjavadocnhtmlreportsnncoverndoclinks" > myignores svn propset svn:ignore -F myignores jobs/ && rm myignores

          5、从SVN上移除Hudson上已经不存在的东西:

           svn status | grep '!' | awk '{print $2;}' | xargs -r svn rm

         6、最后,检入,登陆前和登陆后展示工作目录状态。

             svn st && svn ci --non-interactive --username=mrhudson -m "automated commit of Hudson configuration" && svn st

            你可能注意到了,我们还做了一些额外的事情,如设置svn:ignores的属性,如svn st展示工作目录状态。这个job唯一没有做的事情就是没有把build的结果加入版本控制。因为历史的build日志和artifacts不会改变而且可能会比较大,加入到版本控制会占用较大的空间。而周期性的cp 或者rsync这个job目录已经给jobs提供了可恢复性,而且能够节省你的仓库空间。

 

介绍SVN各个目录使用规范 Svn目录使用规范 TortoiseSVN客户端工具 选择创建SVN目录结构的选项(生成trunk、branches、tags目录),如下图: 1、 trunk是主分支,是日常开发进行的地方。 2、branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。 3、tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。 注:在这需要说明下分三个目录的原因,如果项目分为一期、二期、三期等,那么一期上线时的稳定版本就应该在一期完成时将代码copy到branches上,这样二期开发的代码就对一期的代码没有影响,如新增的模块就不会部署到生产环境上。而branches上的稳定的版本就是发布到生产环境上的代码,如果用户使用的过程中发现有bug,则只要在branches上修改该bug,修改完bug后再编译branches上最新的代码发布到生产环境即可。tags的作用是将在branches上修改的bug的代码合并到trunk上时创建个版本标识 Trunk目录:Doc(文档库,放项目相关文档类)、sourcecede(代码库) Doc目录下按项目存放文档,以下以proj1为例做说明 Proj1----项目名 1、Controlled------组织级scm建一个名为controlled的目录,当项目某文档通过评审后,组织级scm从项目目录下找到那文档,复制到controlled目录下。(一般用不到) 2、Develop---开发文档 2.1、Design----设计文档 2.1.1、DbDesign---数据库设计文档 2.1.2、HLD---概要设计 2.1.3、InterfaceDesign---接口设计 2.1.4、ServiceDesign---服务设计 2.2、REQ---需求文档 2.3、SRS---软件需求规格说明 2.4、Test---测试文档 2.4.1、Review---可空 2.4.2、TestCese---测试用例 2.4.3、TestDoc---测试文档 2.4.4、TestEnv---测试环境说明 2.4.5、TestReport---测试报告 3、Document---项目文档 4、Management---管理文档 4.1、Meetings--会议纪要 4.2、PIM--- 4.3、Plan---计划 4.3.1、review 4.3.2、SDP---软件开发策划文档 4.3.3、SPP---软件项目策划文档 4.4、report---报告 4.4.1、Milestonereport---版本报告 4.4.2、ProjectTrackReport---项目跟踪报告 4..4.3、SCM---软件配置管理文档  4.4.4、SQA---软件质量保证计划 4.4.5、项目周报 4.5、Sow---工作说明书 4.6、Summarize---总结 4.7、Template---模板 4.8、Trainning---培训文档 打标签/分支有两种方式: 1、选中项目,就是trunk下的本地项目,右击,选中Branch/Tag,出现如下对话框。 下图中的配置完成了之后,点击OK即可完成“打标签/分支”。 2、直接在SVN上在对应的标签/分支目录下创建对应的版本文件夹,将trunk下稳定版本的代码直接copy到对应的文件目录下即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值