持续集成入门实践

标签: 持续集成 实践 | 发表时间:2013-12-25 21:06 | 作者:Hello_Nick_Xu
出处:http://www.iteye.com

      在软件开发过程中,团队成员需要经常性的进行集成,以便于更早的发现集成过程中的错误。每次集成都通过自动化的构建(编译、测试、发布)来发现集成过程中的错误。在软件开发团队中通常使用SVN作为源码管理工具(类似的有CVS),使用Ant作为自动构建工具(类似的如同Maven),可以使用Hudson作为持续集成(CI,Continuous integration)服务器。持续集成是世界级软件开发大师Martin Fowler(Thought Work公司首席科学家,著有《重构-改善既有代码设计》等软件开发巨著)所推荐的软件开发方式 吐舌头


      下面来按部就班的介绍使用Hudson进行持续集成的步骤。

 

     【一】.  说明:本实例主要是介绍如何使用Hudson进行持续集成,并不对JDK、Tomcat、Ant、SVN等基础工具做详尽介绍。 尴尬

 

     【二】.  开发环境:
         1.  JDK版本:jdk1.7.0 [需配置JAVA_HOME变量]
         2.  Tomcat版本:apache-tomcat-6.0.35 [需配置CATALINA_HOME变量]
         3.  Ant版本:apache-ant-1.8.4 [需配置ANT_HOME变量]
         4.  SVN版本:Subversion 1.7
         5.  Hudson版本:Hudson 3.1.0

 

     【三】.  搭建环境:
         1.  下载Hudson的开发包,如:hudson-3.1.0.war。
         2.  重命名为hudson.war,放置到Tomcat的webapps目录下面。启动Tomcat,可以看到hudson.war自动解压为hudson目录。 酷
         3.  进入\hudson\WEB-INF目录,打开web.xml,修改HUDSON_HOME的env-entry-value标签体,如下所示:
 <env-entry>
    <env-entry-name>HUDSON_HOME</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>F:\study\hudson</env-entry-value>
  </env-entry>
    [说明].  路径F:\study\hudson将作为hudson的工作空间
         4.  重启Tomcat:在浏览器中输入 http://localhost:8080/hudson/,回车后将打开hudson的初始设置页面。 发财
         5.  选择安装hudson的核心特性,点击Finish后将进行在线安装。
     [说明]:务必联网;此外还可以一同安装Hudson的支持插件,如对Ant,Maven,SVN,PMD等工具的支持,当然完全可以稍后安装
         6.   安装完成后将进入如下界面:[附件:01.jpg]
         7.   插件安装:点击左侧Manage Hudson导航,单击Manage Plugins链接,选择需要的特性进行安装。如下界面:[附件:07.jpg]

         8.   系统配置:点击左侧Manage Hudson导航,单击Configure System链接,进入系统配置页面:[附件:02.jpg] 依次设置JDK、Ant、Maven、SVN的配置信息。

         9.    在MyEclipse中创建一个web项目,如:test_tree,并且在项目根路径下配置Ant的构建文件build.xml。[附件:08.JPG]

         10.   构建文件build.xml内容如下:

 

<?xml version = "1.0" encoding = "UTF-8"?>
<project name="test_tree" basedir="." default = "deploy">
    <property name="src.dir" location="src"></property>
    <property name="build.dir" location="build"></property>
    <property name="build.src" location="${build.dir}/src"></property>
    <property name="build.dist" location="${build.dir}/dist"></property>
    
    <property name="web.root" location="WebRoot"></property>
    <property name="web.WEB-INF" location="${web.root}/WEB-INF"></property>
    <property name="web.lib" location="${web.WEB-INF}/lib"></property>
    <property name="web.xml" location="${web.WEB-INF}/web.xml"></property>
	
	<!--compile to /WEB-INF directory.-->
	<property name="build.classes" location="${web.WEB-INF}/classes"></property>
	
    
	<property environment = "env"></property>
    
    <path id="compile.path">
        <fileset dir="${web.lib}" includes="*.jar"></fileset>
    	<fileset dir = "${env.CATALINA_HOME}/lib" includes = "*.jar"></fileset>
    </path>
    
    <target name="clean">
        <echo>clean ...</echo>
        <delete dir="${build.dir}"></delete>
    </target>
    
    <target name="init" depends="clean">
        <echo>init ...</echo>
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${build.src}"/>
        <mkdir dir="${build.classes}"/>
    </target>
    
    <target name="copy" depends="init">
        <echo>copy ...</echo>
        <copy todir="${build.src}">
            <fileset dir="${src.dir}" includes="**/*.*"></fileset>
        </copy> 
    </target>
    
    <target name="compile" depends="copy">
        <echo>compile ...</echo>
        <javac srcdir="${build.src}" destdir="${build.classes}" 
            classpathref="compile.path"
            includeantruntime="false">
        	<!--using UTF-8 encoding for Hudson-->
        	<compilerarg line="-encoding UTF-8"/>   
        </javac>
    </target>
    
    <target name="war" depends="compile">
        <echo>war ...</echo>
        <war destfile="${build.dist}/${ant.project.name}.war"
            webxml="${web.xml}">
            <fileset dir="${web.root}" includes="**/*.*"></fileset>
        </war>
    </target>
    
    <target name="deploy" depends="war">
        <echo>deploy ...</echo>
        <copy todir="${env.CATALINA_HOME}/webapps">
            <fileset dir="${build.dist}" includes="*.war"></fileset>
        </copy>
    </target>
</project>

 

 熟悉Ant的童鞋,可能注意到了:一定需要配置正确的Tomcat的CATALINA_HOME环境变量。 蠢话

        11.  将项目test_tree上传至SVN路径:不熟悉SVN的童鞋要努力了!

                      https://localhost:8443/svn/CRM/trunk/code/test_tree

         12.  单击hudson页面的左侧导航New Job,打开页面如下所示:[附件:09.jpg]

         13.  如上填写后,进入如下页面:[附件:10.jpg]

         14.  填写SVN路径,单击链接enter credential,在新打开的页面中输入SVN账号,OK即可。[附件:11.jpg]

         15.  然后选择已配置的Ant名称:[附件:12.jpg/13.jpg]

         16.  设置成功后,点击左上角Hudson的Logo进入首页:[附件:14.jpg]

         17.  点击最右边的按钮,进行项目构建:[附件:15.jpg]

         18.  构建完成后,点击Console查看构建输出:Console Output[附件:16.jpg]

         19.  进入Tomcat的webapps目录,可以看到已经test_tree.war已经存在了! 保密

 

     【四】.  如上所述,是最为简单的使用方式。事实上,可以使用Ant/Maven进行自动化的测试、并生成测试报告;使用Hudson的FindBug、CheckStyle、PMD、Metrics等插件可以进行代码缺陷、代码风格、代码圈复杂度(CC)的自动输出。

 

     【五】.  如上所述,在大型软件的开发过程中,使用Hudson进行持续集成,可以尽早的发现集成过程中的错误,提高项目开发的质量,加快项目开发的进度。不是很酷,而是很爽!会偷懒的程序员是最好的程序员!haha ... 大笑





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [持续集成 实践] 推荐:

持续集成入门实践

- - Java - 编程语言 - ITeye博客
      在软件开发过程中,团队成员需要经常性的进行集成,以便于更早的发现集成过程中的错误. 每次集成都通过自动化的构建(编译、测试、发布)来发现集成过程中的错误. 在软件开发团队中通常使用SVN作为源码管理工具(类似的有CVS),使用Ant作为自动构建工具(类似的如同Maven),可以使用Hudson作为持续集成(CI,Continuous integration)服务器.

来自京东、宅急送对微服务编排、API网关、持续集成的实践分享(下)

- - 企业架构 - ITeye博客
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 微服务架构以其高度的弹性、灵活性和效率的巨大提升,快速受到各领域架构师和技术决策者的关注. 它的基本理念是将一个肥大的系统拆分成若干小的服务组件,组件之间的通讯采用轻量的协议完成. 我们本期小组交流会来探讨一下,现在互联网公司的微服务实践情况.

来自京东、唯品会对微服务编排、API网关、持续集成的实践分享(上)

- - 企业架构 - ITeye博客
架构师小组交流会:每期选一个时下最热门的技术话题进行实践经验分享. 微服务架构以其高度的弹性、灵活性和效率的巨大提升,快速受到各领域架构师和技术决策者的关注. 它的基本理念是将一个肥大的系统拆分成若干小的服务组件,组件之间的通讯采用轻量的协议完成. 我们本期小组交流会来探讨一下,现在互联网公司的微服务实践情况.

持续集成将死

- - 透明思考
在思考“ 云时代的研发环境长什么样”这个问题的时候,我逐渐意识到一件很重要的事. 2000年首次被提出、在过去十几年中我们习以为常的敏捷核心实践 持续集成,很可能正在走到它生命周期的尾声. 让我们来回顾一下Martin Fowler在他那篇 著名的文章里如何描述持续集成这个过程:. 一旦完成了修改,我就会在自己的计算机上启动一个自动化build.

基于Jenkins的持续集成

- - ITeye博客
Jenkins是一个持续集成工具,前身叫做Hudson,在实际项目应用中非常重要,本文介绍这一工具的使用方法. 首先我们访问Jenkins的网站:. Jenkins 的网址是: http://jenkins-ci.org/. 从网站下载Jenkins: http://mirrors.jenkins-ci.org/war/latest/jenkins.war.

另一种持续集成策略——延迟提交

- - Juven Xu
常见的持续集成策略是这样的:开发人员修改本地,然后执行本地构建,如果本地构建通过则提交变更至源码服务器. 当然提交的时候可能遇到冲突需要合并,那么合并完成后需要再次执行本地构建并确保其通过. 在这种传统的策略下,开发人员执行本地构建是必须的,这样很多问题就能在本地得到快速的反馈,并且不会干扰其他开发人员的工作.

使用 Subversion、Hudson 和 Eclipse 构建持续集成系统

- - 博客 - 伯乐在线
来源: developerWorks. 持续集成系统是指持续地编译、测试、检查和部署源代码的系统. Martin Fowler 对持续集成是这样定义的 :. 持续集成是一种软件开发实践,团队开发成员经常集成它们的工作,通常每个成员每天可能会发生多次集成. 每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误.

Flash持续集成自动化单元测试

- - 百度泛用户体验
本文关注于宏观上的CI和单元测试技术,某些技术上的具体细节会略过,更多细节请参考最后部分的“参考资料”及文中的链接. 本文包括:持续集成、单元测试、Mock技术、Case选取策略和示例等五部分. CI是一种实践,旨在缓和和稳固软件的构建过程,能够应对如下挑战:. 持续自动的构建测试( 本篇文章的重点所在).

GitHub已将持续集成服务器Janky开源

- - InfoQ cn
GitHub已将 Janky开源,这是他们构建在 Jenkins之上的持续集成服务器,并在其中增加了聊天自动化工具 Hubot. 除了一般的Jenkins功能之外,Janky还通过 Hubot对功能进行了补充,Hubot是GitHub两个月之前开源的另一个项目. Hubot会监控聊天对话,并基于一些参与者相互交换的词语做出响应.

Jenkins: 使用Jenkins搭建持续集成(CI)环境

- - CSDN博客研发管理推荐文章
首先从官网 http://jenkins-ci.org/下载 Java Web Archive (.war). 例如我保存到 D:\jenkins\jenkins.war. 运行Jenkins需要JRE的支持Java5 or later. 默认会运行在8080端口,正常启动完成如下图. 我们可以在浏览器输入127.0.0.1:8080来查看,如图我们的Jenkins已经跑起来了.