`

持续集成入门实践

阅读更多

      在软件开发过程中,团队成员需要经常性的进行集成,以便于更早的发现集成过程中的错误。每次集成都通过自动化的构建(编译、测试、发布)来发现集成过程中的错误。在软件开发团队中通常使用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 ...大笑

分享到:
评论

相关推荐

    持续集成实践

    持续集成实践pdf是一本专业的软件开发类参考图书,该书系统介绍了持续集成的基础理论、核心价值、实践步骤以及测试工具等内容,理论讲解浅显易懂,适合入门学习,

    持续集成实践成熟度模型

    持续集成从“配置管理”、“构建”、“测试”、“部署及发布”及“团队习惯”5个纬度考察其成熟度,每个维度都有5个级别,分别是“入门”、“新手”、“中等”、“进阶”和“疯狂”。目前在各个维度上,行业的平均...

    Docker从入门到实践

    Docker是一个开源的引擎,可以轻松的为任何应用创建一...自动化测试和持续集成、发布; 在服务型环境中部署和调整数据库或其他的后台应用; 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

    持续集成工具Jenkins书籍(2本)目录知识点整理(思维导图加图).rar

    持续集成工具Jenkins书籍(2本)目录知识点整理(思维导图加图).rar 版本全程自动化测试需要借助持续集成工具来实现,根据如下Jenkins书籍(2本)整理: 2019年《Jenkins 2.x 实践指南》 2019年《Jenkins 2权威...

    Eclipse开发入门与项目实践 源代码

    Eclipse开发入门与项目实践 Eclipse开发入门与项目实践 源代码 Eclipse开发入门与项目实践 源代码 Eclipse开发入门与项目实践 源代码 第一部分 开发入门 第1章 Eclipse概述及开发环境搭建 2 1.1 Eclipse概述 2...

    Jenkins权威指南.pdf(最新版)

    本书从实践者出发,在讲解Jenkins基本原理的同事,深入到持续集成、持续交付领域,为读者梳理出如何使用Jenkins设计和实现一个自动化的、周期性的集成测试过程,帮助读者解决Jenkins适用于什么场景。书中首先介绍了...

    tutorial-ci-for-serverless:无服务器应用程序的教程持续集成

    教程:无服务器应用程序的持续集成持续集成是一种每天将开发人员代码的所有工作副本合并到一个共享主线中的实践。 最佳实践包括构建和部署的自动化,具有快速和自测试的构建以及类似生产的测试环境。 在无服务器的...

    新版Kubernetes生产落地全程实践课程

    给大家分享一套课程——新版Kubernetes生产落地全程实践(2021年升级版),完整版...本课程从集群部署到业务迁移、持续集成再到核心知识点梳理,既能快速入门k8s,又能提升k8s生产落地能力,助你少走弯路,避免踩坑。

    这本书介绍了如何使用 Spring Boot 和 Spring Cloud 构建微服务架构,是一个很好的学习资源

    部署和运维:讨论了微服务架构的部署和运维问题,包括容器化部署、持续集成和持续交付、监控和日志管理等方面。 微服务架构的最佳实践:总结了一些微服务架构的最佳实践和设计模式,以及一些常见的陷阱和解决方案。

    quickstart-codepipeline-bluegreen-deployment:AWS快速入门团队

    快速入门为经济高效,容错架构创建了一个持续集成/持续交付管道。 部署由AWS CloudFormation模板自动完成,大约需要15分钟。 您可以在有或没有Git的情况下部署到Amazon S3集成。 此快速入门还提供了一个示例...

    maven+ssm+redis 项目集成.zip

    SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...

    将微信支付和支付宝支付集成到ssm项目中.zip

    SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...

    硝烟中的Scrum和XP EPUB

    他们还尝试过XP实践——持续集成、结对编程、测试驱动开发等等,还试过了把XP跟Scrum组合。 本书描述的是一个成功敏捷团队的工作过程,没有理论、没有引用、没有脚注、没有废话。读者可以把它当作一些基础实践的入门...

    基于SSM+Maven实现的web项目,并且集成了editor.md编辑器.zip

    SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...

    python测试开发

    自动化平台测试开发-Python测试开发实战 1.自动化平台相关功能开发, 2.正则表达式,单元测试 3.自动化测试知识 4.性能测试,持续集成

    fastify-simple-starter-kit:Fastify的简单入门工具包,它试图提供适合中小型应用程序的简单但完整的项目结构

    固定简单入门工具包 一个简单入门工具包,它试图提供一个适用于中小型应用程序的简单但完整的项目结构。... 从全面的测试覆盖范围和持续集成开始。 苗条但坚固的基础-仅足以最大化您的生产力,仅此而已。

Global site tag (gtag.js) - Google Analytics