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项目中我们也可以采用这种方式实现混合式的接入方式 ...
随机推荐
- IEnumerable和List有什么区别?
如下.IList接口可以使用更多的方法.比如你看一个集合是否包含相应实体, IEnumerable不行,而 IList里有Contains,相应的实现了IList的可以添加,删除相应实体.而IEnum ...
- SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
- oracle 删除表、表空间、用户时,如何释放磁盘空间
truncate table tablename DROP STORAGE; drop 执行drop table xx 语句drop后的表被放在回收站(user_recyclebin)里,而不是直接删 ...
- [vsftp]500 OOPS: cannot change directory
这个报错需要检查 1./etc/passwd 用户的主目录 2./etc/vsftpd/vuser_conf 下每个用户的local_root 3.每个用户目录给ftpuser加上rwx权限,一定要有 ...
- 仅显示INPUT下边框
最近在倒腾前端的页面,在某次的需求中我想要这样的一个效果——仅显示INPUT输入框的下边框,和我想象的编写方式不一致,每个标签都有其对应的默认样式,不同的浏览器也有其不同的渲染方式,当然这些知识现在我 ...
- sql语句小练习二
1.创建一个数据库StudentManage, 初始化大小10M,不足以1M每次增长 create database StudentManage on ( name = 'StudentManag ...
- Unity Js与C#脚本通信
将.js文件放到Standard Assets目录下,否则无法编译通过 CS_test.cs : using UnityEngine; using System.Collections; publ ...
- git贡献代码流程
1.本地创建ssh key: $ ssh-keygen -t rsa -C "your_email@youremail.com" 2.回到github,进入Account Sett ...
- WeChat 6.3 wipe deleted chat messages as well as LINE 5.3 and above
Let me show you the WeChat version first. It is 6.3. What will happen to WeChat deleted chat message ...
- mac 显示隐藏文件夹
在终端输入 defaults write com.apple.finder AppleShowAllFiles -boolean true;killall Finder即可