基于Linux CentOS系统 搭建Jenkins+ANT+SVN+Junit4 持续集成自动化构建、单元测试、增量发布平台
2018-08-22 10:58
851 查看
目录
环境准备
- 安装jdk、Tomcat
- 搭建SVN
- 安装ANT
- 安装Jenkins
- 部署项目
安装ANT
安装ANT之前必须安装java环境(即JDK)
ANT版本与JAVA版本必须匹配(笔者的JAVA版本:1.7.0_80,ANT版本对应的是:1.9.2)
从 http://ant.apache.org 上下载tar.gz版ANT
将下载的tar.gz文件放到Linux系统中
解压文件
tar -vxzf apahce-ant-1.9.2-bin.tar.gz
设置文件权限
chmod 777 anache-ant-1.9.2-bin.tar.gz
修改系统配置文件
vi /etc/profile
将ANT配置到系统环境中(与jdk配置相似)
export ANT_HOME=/usr/local/ant export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
配置生效
source /etc/proifle
测试ANT是否安装成功
ant -version
安装Jenkins
下载最新版本(.war),官网:http://Jenkins-ci.org/
安装Jenkins有两种方式:
①:运行java -jar jenkins.war
②:将war包放入Tomcat的webapps目录下,通过 http://Jenkins-ci.org/ 访问
【注意】第一次访问jenkins时,jenkins初始化用户以及密码,密码存放的位置在页面将会显示。
项目部署
- 下载插件,第一次访问时,会显示安装插件页面,可以自定义选择安装插件也可以选择默认安装。(由于本文章使用到ANT、SVN,因此必须安装ANT相关插件、Subversion Plug-in、Publish Over SSH等,若实施过程中发现缺少某些设置项,则首先应该想到可能是插件未安装)
- 登录到Jenkins主界面,在界面左侧工具栏选择系统管理。
- 在系统管理页面右侧,选择系统设置(主要配置一些全局变量,此处可以不做设置,以默认配置就行。)
- 在系统管理页面点击 Global Tool Configuration,配置jdk、ant,不建议使用自动安装。
- 返回到Jenkins首页,在左侧点击新建->输出项目名称->选择构建一个自由风格的软件项目->OK->进入项目配置页面
- 源码管理->选择Subversion(设置SVN地址、用户密码,其他默认)
- 构建->增加构建步骤->选择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部署和单元测试。
- 构建->增加构建步骤->选择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包文件不全,可能是由于项目目录与笔者不一致所致,所以需要自己修改源码相关目录路径,若笔者时间允许将会在后续讲解该插件源码)
相关文章推荐
- [原]接上-Linux环境-Jenkins实战-分布式构建-自动化持续集成(二)SVN构建及发布
- linux+ant+jmeter+jenkins搭建接口自动化持续集成平台
- 在linux上搭建基于ant的android自动化编译系统
- 深入浅出 - Android系统移植与平台开发(六)- 搭建基于Linux的Android开发环境
- Linux平台搭建Jenkins+Maven+Shell实现自动化构建部署
- 搭建持续集成单元测试平台(Jenkins+Ant+Java+Junit+SVN)
- 免费开源程序企业构建集成系统iMatrix平台发布,分享下!
- soapUI+maven+Jenkins 搭建接口自动化持续集成平台
- 使用Azure Slave Plugin基于Azure中国区搭建Jenkins持续集成平台
- 搭建iOS自动化打包平台(利用Jenkins持续集成iOS项目)
- 基于Linux-RHEL5——搭建LAMP平台以及Postfix邮件系统(一)
- 利用Xinc+phing+phpunit+svn在linux上构建持续集成平台
- 基于CentOS+Jenkins+Maven+SVN+Tomcat+Java的自动化持续集成
- 搭建持续集成单元测试平台(Jenkins+Ant+Java+Junit+SVN)
- Centos搭建CI持续集成系统环境--部署gerrit环境完整记录
- Linux平台搭建Jenkins+Maven+Shell实现自动化构建部署
- 基于vCenter/ESXi平台CentOS 6.8系统虚拟机Oracle 12c RAC双节点数据库集群搭建
- 构建基于云平台的小型敏捷团队的持续集成和持续部署
- Kickstart自动化安装部署Centos系统平台的搭建
- Linux上基于网络自动化安装系统(CentOS6.5+DHCP+TFTP+PXE)