hudson项目中的运用
项目中持续集成管理一直是用的hudson,最近的话,hudson遇到不少问题,因为之前对这个也不是很熟悉,所以也花了比较多的时间去解决,现在刚好也可以总结下自己学习到的hudson知识。
首先在我看来,hudson只是一个持续集成的工具,在项目中,经常有开发直接告诉我们一个项目的svn目录地址就认为可以把包打好生成出来,这里的话如果只是普通的把源码从svn里检出来,不需要其他操作,是可以直接打成需要发布的包的,但是往往每个job都需要其他一些步骤才能生成包,这些命令就需要开发提供了。
说说我们项目中的运用吧,因为项目比较多,有很多不同的组,所以hudson需要建立的job也很多,目前每个job主要设置了几个流程。
build
build就是不执行单元测试的脚本,只是简单的编译,如果编译通过就打成一个包,然后把包放到一个备用目录下面,放到备用目录下面的原因是如果有单元测试的话,就执行单元测试的job。
build的时候还有做的一步就是把版本号记录到一个log文件里面,同样提交到svn里面一个log目录。
ut
ut就是执行单元测试脚本,当第一步build通过之后,就从备用目录下面把包拿过来,执行单元测试,如果单元测试通过,就把包放到运维可以拿到的目录下面,如果开发需要发布哪个版本,直接告诉运维版本号即可。
cat
cat就是用来执行回归测试的job,并不是每个项目都会有回归测试,如果有的话,就和ut一样,其实相当于在单元测试的基础上所做的另外一步验证操作。
大致的流程就是这样,具体来说,比如一个job,Parser
那么分别有三个hudsonjob,Parser_build,Parser_Ut,Parser_Cat,然后svn的上有一个log目录,对应这个项目的三个job的日志文件,记录版本号。
当Parser_build执行完毕之后,更新了日志文件里面build的记录,Ut的job监控到该日志文件发生变化,就运行ut,然后从日志文件里面获取对应的代码版本号,从备用目录里面拿出来打好的包,然后执行单元测试。这里hudson可能可以设置两个job之间的运行关系,使得一个跑完就执行另外一个,但实际中没有采取hudson自带的设置,而是通过日志文件来联系不同的job,这样做是因为,我们可能一个Parser项目会依赖很多自己写的lib包,所以一个buildjob可能会监控多个svn目录,为了保持代码是最新的,我们会比较这几个目录的版本号,选出最大的当做本次job的版本号,然后记录到日志里面。
遇到的问题:
FAQ:
1.有的时候hudson同一个版本号会执行两边,或者版本提交后长时间没有触发job?
这个问题遇到了好几次,找了很多原因,发现是执行hudson机器和svn的机器时间不同步,当时间差超过了一定值,hudson就无法检测到svn里面有版本更新,或者会重复检测到更新,这里我也有疑问,hudson不是应该通过检测svn库里面版本号的变化来触发job吗?为什么会和时间有关系呢?我试过在本地把机器时间提前很多,然后svn log也可以发现svn版本的变化。Google很久,也有遇到类似问题的,同样是时间不同步引起,但是都没说明为什么。
2.配置文件一定要注意备份啊!!!
hudson方便之处,如果要换个环境做hudson服务器,只需要移植下每个job的配置文件即可。以前一直没有定时备份,后来有一次,内网hudson2.0升级到3.0的时候,发现升级了很久没好,就换回到2.0,查看配置文件,发现shell这些命令还在,就是svn目录地址这块配置信息不在了!!这个如果是每个job一个目录还好,偏偏有些job需要同时好几个目录,搞了很久,才弄好,现在都做了cronjob定时配置文件,还可以通过hudson的一个backup插件进行备份。所以备份一定要做,虽然hudson很安全,但是你永远不知道会发生什么问题。
3.hudson执行方式
hudson执行方式主要两个,简单一点就是nohuo java -jar ,另外就是tomcat,一开始用的是nohup,但是好像很不稳定,现在开发也会频繁访问hudson页面,加上本来job执行就多,于是这个java进程老挂掉,现在改成了tomcat下运行,貌似是流畅不少,tomcat下运行一个简单方法就是把webapp下面东西全部删除掉,把hudson.war放到下面,命名为ROOT.war即可。
hudson项目中的运用的更多相关文章
- Maven项目中的pom.xml详解【转】
什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url, ...
- Maven学习总结(15)——Maven 项目中pom.xml详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2 ...
- VS项目中使用Nuget还原包后编译生产还一直报错?
Nuget官网下载Nuget项目包的命令地址:https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题,折腾了很久终于搞定了: 问题是这样的:我的解决方案原本是好好的 ...
- ABP项目中使用Swagger生成动态WebAPI
本文是根据角落的白板报的<使用ABP实现SwaggerUI,生成动态webapi>一文的学习总结,感谢原文作者角落的白板报. 1 安装Swashbuckle.core 1.1 选择WebA ...
- iOS 之项目中遇到的问题总结
昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下. 问题: 1.两表联动 所谓的两表联动就是有左右两个表格 ...
- My97DatePicker时间控件在项目中的应用
一.下载My97DatePicker的压缩包My97DatePicker.rar,解压. 注:My97DatePicker最新版本有开发包,项目中使用时删掉,以便节省空间,提高程序的运行效率. 二.在 ...
- 在项目中同时使用Objective-C和Swift
苹果发布的Swift语言可以和之前的Objective-C语言同时存在于一个项目中. 可能有人会认为是同一个类文件中既可以有Objective-C也可以有Swift,这是不对的.同一个类文件或同一个代 ...
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
随机推荐
- NSSet、NSMutableSet基本用法
NSSet.NSMutableSet基本用法 在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素是无序,同一个对象只能保存一个. 一.不可变集合NSSet ...
- C#中char[]与string之间的转换
string 转换成 Char[] string ss = "abcdefg"; char[] cc = ss.ToCharArray(); Char[] 转换成string st ...
- 游戏服务器生成全局唯一ID的几种方法
在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使 ...
- C程序之修改Windows的控制台颜色(转载)
Windows的CMD可以和Linux下的终端一样可以有五颜六色,目前我在网上找到2种方法可以修改Windows的CMD,当然都是在代码中修改的.在“CMD”->“属性”->“颜色”,这种 ...
- deep learning新征程
deep learning新征程(一) zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2015-11-26 声明: 1 ...
- Node.js log4js日志记录
这次需要给之前弄的文件服务器添加日志记录,一般每天产生的日志会特别多所以安装日期来划分是最好的,这里我用了express框架,为了适应express框架这里在log.js文件中写了use方法. //日 ...
- 架构设计--逻辑层 vs 物理层
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 Layer 和Tier都是层,但是他们所表现的含义不同,Tier指的是软件系统中物理 ...
- 处理SVN的提交代码冲突
工具: 一台开发的电脑,myeclipse,TortoiseSVN1.8 步骤: 1.不管是提交.更新.编辑冲突第一个操作都应该是和资源库进行同步,项目右键==>Team==>于资源库同步 ...
- java中List Set Map使用
@Test public void run() { ArrayList<String> list= ...
- 关键字 this 的作用
1.关键字 this ①是指当前对象自己 当一个类中要明确指出使用对象自己的变量或函数时,就应该加上this关键字,小栗子a如下: public class A { string Name = &qu ...