您的位置:首页 > 运维架构 > Linux

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

2018-08-22 10:58 851 查看

目录

  • 环境准备
  • 安装ANT
  • 安装Jenkins
  • 项目部署
  • 环境准备

    • 安装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上面载的增量插件代码源,感谢源码作者的分享

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: