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提供了可恢复性,而且能够节省你的仓库空间。
- hudson+svn对jobs配置文件的版本管理
- 使用SVN对GitHub进行版本管理
- SVN版本管理的合并
- 对CVS,SVN等软件版本管理中Tag,branch,merge的一点理解
- Hudson – 管理Hudson
- 对版本更新的管理
- Hudson+Ant+SVN的Junit实例
- hudson与svn的同步配置
- SVN解除对项目的版本控制
- IOS 程序的版本管理(基于SVN)
- 使用SVN进行工程项目的版本管理
- 版本控制之svn的权限管理
- SVN版本管理的简单操作
- SVN版本管理 CornerStone客户端的使用
- 从传统的版本管理看SVN
- SVN版本管理系统的安装
- SVN 版本管理系统的安装
- SVN版本管理系统的安装
- C#如何向MongoDB GridFs中存储文件
- 利用jquery,java实现表格动态分页
- QT画线教程(GraphicsViewFramework)
- struts2处理ajax请求
- 优化JavaScript脚本的性能总结
- hudson+svn对jobs配置文件的版本管理
- iOS的诡异错误 expected unqualified-id
- 经典vim插件功能说明、安装方法和使用方法介绍
- C++完美实现Singleton模式
- C# Image和Byte[]互相转换
- CLOB和BLOB的区别
- file操作注意的问题
- ubuntu和windows双系统启动问题
- android开发中spinner控件的使用