基于Linux CentOS系统 搭建Jenkins+ANT+SVN+Junit4 持续集成自动化构建、单元测试、增量发布平台

目录

环境准备

  • 安装jdk、Tomcat
  • 搭建SVN
  • 安装ANT
  • 安装Jenkins
  • 部署项目

安装ANT

  1. 安装ANT之前必须安装java环境(即JDK)

  2. ANT版本与JAVA版本必须匹配(笔者的JAVA版本:1.7.0_80,ANT版本对应的是:1.9.2)

  3. http://ant.apache.org 上下载tar.gz版ANT

  4. 将下载的tar.gz文件放到Linux系统中

  5. 解压文件

    tar -vxzf apahce-ant-1.9.2-bin.tar.gz 
  6. 设置文件权限

    chmod 777 anache-ant-1.9.2-bin.tar.gz 
  7. 修改系统配置文件

    vi /etc/profile 

    将ANT配置到系统环境中(与jdk配置相似)

    export ANT_HOME=/usr/local/ant export
    PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH  
  8. 配置生效

    source /etc/proifle 
  9. 测试ANT是否安装成功

    ant -version 

安装Jenkins

  1. 下载最新版本(.war),官网:http://Jenkins-ci.org/

  2. 安装Jenkins有两种方式:
    ①:运行java -jar jenkins.war
    ②:将war包放入Tomcat的webapps目录下,通过 http://Jenkins-ci.org/ 访问
    【注意】第一次访问jenkins时,jenkins初始化用户以及密码,密码存放的位置在页面将会显示。


项目部署

  1. 下载插件,第一次访问时,会显示安装插件页面,可以自定义选择安装插件也可以选择默认安装。(由于本文章使用到ANT、SVN,因此必须安装ANT相关插件、Subversion Plug-in、Publish Over SSH等,若实施过程中发现缺少某些设置项,则首先应该想到可能是插件未安装)
  2. 登录到Jenkins主界面,在界面左侧工具栏选择系统管理。
  3. 在系统管理页面右侧,选择系统设置(主要配置一些全局变量,此处可以不做设置,以默认配置就行。)
  4. 在系统管理页面点击 Global Tool Configuration,配置jdk、ant,不建议使用自动安装。
  5. 返回到Jenkins首页,在左侧点击新建->输出项目名称->选择构建一个自由风格的软件项目->OK->进入项目配置页面
  6. 源码管理->选择Subversion(设置SVN地址、用户密码,其他默认)
  7. 构建->增加构建步骤->选择Invoke Ant->Ant Version选择之前配置ant版本。其他不需要设置(其他不设置的情况下是Ant脚本放在项目的根目录下,若不是则需要进入高级…进行设置),该构建设置即是项目自动编译构建的关键所在,而执行这一过程的就是Ant脚本。将bulid.xml脚本添加到你项目的根目录下(注意不是类路径)。bulid.xml脚本模板如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ssm" default="deploy" basedir=".">
    <!-- environment:可以通过${env.XXX}获取Jenkins属性 -->
    <property environment="env" />
    <!-- 项目名称 -->
    <property name="webapp.name" value="ssm" />
    <!-- Tomcat目录 -->
    <property name="catalina.home" value="/usr/java/apache-tomcat-7.0.68" />
    <!-- 编译之后的war包存放位置 -->
    <property name="dist.dir" value="${basedir}/dist" />
    <!-- 项目的WebRoot目录 -->
    <property name="webRoot.dir" value="${basedir}/WebRoot" />
    <!-- 项目的src目录 -->
    <property name="src.dir" value="${basedir}/src" />
    <!-- 项目的config目录 -->
    <property name="config.dir" value="${basedir}/config" />
    <!-- 项目的lib目录 -->
    <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />
    <!-- 项目的build目录,src路径下的文件编译后存放路径 -->
    <property name="build.dir" value="${basedir}/build" />
    <!-- 生成报告junit4.xml路径 -->
    <property name="report.path" value="${env.JENKINS_HOME}/jobs/${env.JOB_NAME}/builds/${env.BUILD_ID}/report" />

    <xmlproperty file="${env.JENKINS_HOME}/jobs/${env.JOB_NAME}/builds/${env.BUILD_ID}/changelog.xml" />
    <!-- 使用eclipse jdt进行编译,而不使用JDK编译  -->
    <!--<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" /> -->

    <!-- 初始化classpath -->
    <path id="project.classpath">
        <!-- 添加项目lib下的jar -->
        <fileset dir="${lib.dir}">
            <include name="*.jar" />
        </fileset>
        <!-- 添加tomcat类路径 -->
        <fileset dir="${catalina.home}/lib">
            <include name="*.jar" />
        </fileset>
        <pathelement location="${build.dir}/classes" />
    </path>

    <!-- get the source compile classpath in a printable form -->
    <pathconvert pathsep="${line.separator}|   |-- " property="echo.path.compile" refid="project.classpath">
    </pathconvert>

    <!-- show classpath jars -->
    <target name="print_classpath">
        <echo message="|-- compile classpath" />
        <echo message="|   |" />
        <echo message="|   |-- ${echo.path.compile}" />
    </target>


    <!-- 删除之前的目录结构 -->
    <target name="clear" description="清理旧文件">
        <echo message="开始清理旧文件..." />
        <delete dir="${build.dir}" />
        <delete dir="${dist.dir}" />
        <delete file="${catalina.home}/webapps/${webapp.name}.war" />
        <delete dir="${catalina.home}/webapps/${webapp.name}" />
        <echo message="结束清理旧文件..." />
    </target>

    <!-- 创建目录结构 -->
    <target name="init" depends="clear" description="创建初始化目录结构">
        <echo message="开始初始化目录结构..." />
        <mkdir dir="${build.dir}/classes" />
        <mkdir dir="${dist.dir}" />
        <mkdir dir="${report.path}" />
        <echo message="结束初始化目录结构..." />
    </target>

    <!-- 编译java -->
    <target name="compile" depends="init" description="编译java文件">
        <echo message="开始编译..." />
        <javac srcdir="${src.dir}" destdir="${build.dir}/classes" includeantruntime="false" nowarn="on" source="1.7" target="1.7" deprecation="true" debug="true" encoding="UTF-8" classpathref="project.classpath">
            <compilerarg line="-Xlint:unchecked" />
            <!-- <classpath refid="project.classpath" /> -->
        </javac>
        <copy todir="${build.dir}/classes">
            <fileset dir="${src.dir}">
                <include name="**/*.xml" />
                <include name="**/*.properties" />
                <include name="**/*.sql" />
            </fileset>
            <fileset dir="${config.dir}">
                <include name="**/*.xml" />
                <include name="**/*.properties" />
                <include name="**/*.sql" />
            </fileset>
        </copy>
        <echo message="结束编译..." />
    </target>

    <!-- 将class文件打成 jar包 -->
    <!--  
        <target name="pack" depends="compile"> 
            <jar jarfile="${build.dir}/${webapp.name}.jar"> 
                <fileset dir="${build.dir}/classes"> 
                    <include name="/*.class"/> 
                </fileset> 
            </jar> 
        </target> 
    -->

    <!-- 打成war包, 名称默认为 项目名 -->
    <target name="war" depends="junit-report" description="将工程打成war包">
        <echo message="开始生成war包..." />
        <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}" webxml="${webRoot.dir}/WEB-INF/web.xml">
            <lib dir="${lib.dir}" />
            <classes dir="${build.dir}/classes" />
            <fileset dir="${webRoot.dir}">
                <include name="*.*" />
            </fileset>
        </war>
        <echo message="结束生成war包..." />
    </target>

    <!-- 进行单元测试 -->
    <target name="junit" depends="compile" description="执行JUNIT测试">
        <echo message="开始执行单元测试..." />
        <junit printsummary="true" showoutput="true">
            <classpath refid="project.classpath" />
            <formatter type="xml" usefile="true" />
            <batchtest fork="on" todir="${report.path}" haltonfailure="no">
                <fileset dir="${build.dir}/classes">
                    <include name="**/test*.class" />
                </fileset>
            </batchtest>
        </junit>
        <echo message="结束执行单元测试..." />
    </target>

    <!-- 产生单元测试报表文档 -->
    <target name="junit-report" depends="junit" description="产生单元测试报告文档">
        <echo message="开始创建单元测试文档..." />
        <junitreport todir="${report.path}">
            <fileset dir="${report.path}">
                <include name="TEST-*.xml" />
            </fileset>
            <report format="frames" todir="${report.path}" />
        </junitreport>
        <echo message="结束创建单元测试文档..." />
    </target>

    <!-- copy war包 到 tomcat的 webapps 目录 -->
    <target name="deploy" depends="war" description="部署项目">
        <echo message="开始部署项目..." />
        <copy file="${dist.dir}/${webapp.name}.war" todir="${catalina.home}/webapps" />
        <echo message="结束部署项目..." />
    </target>

</project>

模板中的<property name="" value="" />标签是配置文件路径的变量,需要我们根据自己项目等情况设置。到此处已经可以完成全量war部署和单元测试。

  1. 构建->增加构建步骤->选择Execute shell->在Command中填入:
java -jar /usr/ant/inte.jar ${JENKINS_HOME} ${JOB_NAME} ${BUILD_ID} ssm

这是一个执行增量编译的java程序插件(inte.jar),其后的第一个参数:Jenkins根目录;第二个参数新建时候所设置的项目名称;第三个参数:当前构建的版本号(Jenkins在每次执行构建时会生成一个版本号);第四个参数:打成增量war包时的名称(例如:最终生成的增量war包名称为:ssm_add.war)。
inte.jar是笔者根据网上别人基于Windows系统的源码修改的,若要配置生成之后的增量war包存放位置,需要自己修改源码properties文件。(由于笔者能力有限,该插件可能存在笔者未发现的问题,若使用中发现增量war包文件不全,可能是由于项目目录与笔者不一致所致,所以需要自己修改源码相关目录路径,若笔者时间允许将会在后续讲解该插件源码)

这是笔者从CSDN上面载的增量插件代码源,感谢源码作者的分享

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值