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

来源:互联网 发布:淘宝指数数据 编辑:程序博客网 时间:2024/06/05 17:21

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

        当时对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提供了可恢复性,而且能够节省你的仓库空间。

 

原创粉丝点击