ant  一个自动化构建的工具

可以帮你实现自动化打包和发布到web环境上。

项目目录如下:

项目一:common-framework

项目二:estun-platform-web

其中项目一是项目二的框架,需要先把项目一打包成jar包,然后把这个jar包传到项目二的lib里面,供项目二使用。

整体流程如下:

一:把项目一打包成jar包

二:把项目二打包成war包(记得传项目一的jar包进来lib里面)

三:把war包传到tomcat的webapps下进行发布。

四:这里也可以不用传war包,直接通过tomcat的manmger 管理页面进行发布。

具体详解如下:

#####################################################

一:common-framework.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="common-framework" basedir="./common-framework" default="jar">

<property environment="env" />
<property name="temp" value="temp"/>
<property name="jar.dir" value="${basedir}"/>
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src"/>

<target name="init">
<delete dir="${temp}"/>
<delete file="${basedir}/common-framework.jar" />
<mkdir dir="${temp}"/>
</target>

<target name="cp3" >
<echo message="拷贝rt.jar ,开始。。。"/>
<copy todir="${lib.dir}">
<fileset dir="${env.JAVA_HOME}/jre/lib">
<include name="rt.jar" />
</fileset>
</copy>
<echo message="拷贝jar,完成!"/>
</target>

<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>

<target name="compile" depends="init,cp3">
<javac srcdir="${src.dir}" destdir="${temp}" classpathref="classpath"/>
</target>

<target name="cp4" depends="compile">
<copy todir="${temp}">
<fileset dir="${src.dir}">
<include name="**/**.*" />
<exclude name="**/*.jar"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>

<target name="jar" depends="cp4">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${temp}"/>
</target>

</project>

#####################################################

二和三:build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="start_tomcat" basedir="./estun-platform-web">

<!-- 流程说明:
1.定义变量
2.初始化工作:删除build目录,建build目录

3.下载svn代码到文件夹
4.替换文件夹中的文件
5.javac编译;war打包

6.停tomcat
7.删除tomcat下的webapps下的文件夹和war包
8.把war包传到tomcat/webapps下
9.启动tomcat
-->

<!-- 1.定义变量 -->
<echo message="1.定义变量,开始。。。"/>
<!-- 加载环境变量 -->
<property environment="env" />
<!-- java源代码目录 -->
<property name="src.dir" location="src" />
<!-- 构建目录 -->
<property name="build.dir" location="build" />
<!-- class文件目录 -->
<property name="build.classes" location="${build.dir}/classes" />
<!-- 打包目录 -->
<property name="build.war" location="${build.dir}/war" />
<!-- 打包后的文件名-->
<property name="war.name" value="estun-platform-web" />
<!-- WebContent 根目录 -->
<property name="web.root" value="WebContent" />
<property name="web.WEB-INF" location="${web.root}/WEB-INF" />
<property name="web.lib" location="${web.WEB-INF}/lib" />
<!-- common-framework 根目录-->
<property name="common-framework.dir" location="../common-framework" />

<!-- tomcat根目录 -->
<property name="tomcat.home" location="/opt/apache-tomcat-8.0.36" />
<property name="tomcat.webapps" location="${tomcat.home}/webapps" />
<property name="tomcat.lib" location="${tomcat.home}/lib" />
<property name="tomcat.bin" location="${tomcat.home}/bin" />

<property name="ant.dir" value="${env.ANT_HOME}" />

<echo message="1.定义变量,完成!"/>

<!-- 2.初始化工作:删除build目录,建build目录 -->
<target name="init" description="初始化">
<echo message="2.初始化工作:删除build目录,建build目录,开始。。。"/>
<delete dir="${build.dir}"/>
<mkdir dir="${build.dir}" />
<mkdir dir="${build.classes}" />
<mkdir dir="${build.war}" />
<echo message="2.初始化工作:删除build目录,建build目录,完成!"/>
</target>

<!-- 3.下载svn代码到文件夹 jenkins自己完成这个操作 -->
<!-- 通过jenkins更新svn代码。当然,也可以通过ant更新svn代码 -->

<!-- 4.替换文件夹中的文件 -->
<target name="cp" depends="init">
<echo message="4.替换webapps中的文件,开始。。。"/>
<delete file="${src.dir}/main/resource/jdbc.properties" />
<delete file="${src.dir}/main/resource/site.properties" />
<delete file="${src.dir}/main/resource/upload.properties" />
<copy todir="${src.dir}/main/resource">
<fileset dir="/root/.jenkins/workspace/workspace/webapps">
<include name="**/*.*" />
</fileset>
</copy>
<echo message="4.替换webapps中的文件,完成!"/>
</target>

<!-- 4.1拷贝jre/lib/rt.jar文件到webapps/lib下 -->
<target name="cp2" depends="cp">
<echo message="拷贝rt.jar 和 common-framework.jar,开始。。。"/>
<copy todir="${web.lib}">
<fileset dir="${env.JAVA_HOME}/jre/lib">
<include name="rt.jar" />
</fileset>
</copy>
<delete file="${web.lib}/common-framework.jar" />
<copy todir="${web.lib}">
<fileset dir="${common-framework.dir}">
<include name="common-framework.jar" />
</fileset>
</copy>
<echo message="拷贝rt.jar 和 common-framework.jar,完成!"/>
</target>

<!-- 5.javac编译;war打包 -->
<!-- 定义编译时的classpath(定义路径,编译java文件时用到的jar包) -->
<path id="compile.path">
<fileset dir="${web.lib}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${tomcat.lib}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${ant.dir}/lib">
<include name="**/*.jar" />
</fileset>
<pathelement location="${build.classes}"/>
</path>

<target name="compile" depends="cp2" description="编译">
<echo message="编译开始。。。" />
<javac destdir="${build.classes}" srcdir="${src.dir}" includeantruntime="false" fork="true" nowarn="on" debug="true" >
<compilerarg line="-encoding UTF-8 " />
<compilerarg line="-Xlint:unchecked" />
<classpath refid="compile.path" />
</javac>
<echo message="编译完成!" />

<echo message="拷贝非java文件,开始。。。" />
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/activity/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/apply/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/article/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/center/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/comment/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/enterprise/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/fund/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/help/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/main/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/member/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/message/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/news/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/order/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/partner/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/pay/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/product/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/reward/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/service/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/shop/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/task/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/user/java" excludes="**/*.java"/>
</copy>
<copy todir="${build.classes}" >
<fileset dir="${src.dir}/wxpay/java" excludes="**/*.java"/>
</copy>

<copy todir="${build.classes}" >
<fileset dir="${src.dir}/main/resource" excludes="**/*.java"/>
</copy>

<echo message="拷贝非java文件,完成!" />
</target>

<!-- 删除webapps/lib下的rt.jar -->
<target name="del" depends="compile" description="删除jar">
<echo>删除jar,开始。。。</echo>
<delete file="${web.lib}/rt.jar" />
<echo>删除jar完成!</echo>
</target>

<target name="war" depends="del" description="打包war文件">
<echo>打包开始。。。</echo>
<war destfile="${build.war}/${war.name}.war" webxml="${web.WEB-INF}/web.xml">
<!-- 将非jar和非class文件拷贝到war包的对应路径下。 -->
<fileset dir="${web.root}">
<include name="**/**.*" />
<exclude name="**/*.jar"/>
<exclude name="**/*.class"/>
</fileset>
<!-- 将jar和class文件拷贝到war包的对应路径下。 -->
<lib dir="${web.lib}" />
<classes dir="${build.classes}" />
</war>
<echo>打包完成!</echo>
</target>

<!--
6.停tomcat
7.删除tomcat下的webapps下的文件夹和war包
8.把war包传到tomcat/webapps下
9.启动tomcat
-->

<target name="stop_tomcat" depends="war" >
<echo message="停止tomcat,开始。。。" />
<exec executable="/bin/sh" failonerror="false" append="true">
<arg line="-c 'kill -9 `/usr/sbin/lsof -n -P -t -i :8080` '" /> <!-- 系统要有lsof命令-->
</exec>
<sleep seconds="5"/>
<echo message="停止tomcat,完成!" />
</target>

<!-- 删除tomcat-webapps下的war包和目录;复制war包到tomcat的webapps下 -->
<target name="delcopy" depends="stop_tomcat" description="删除和拷贝">
<echo>删除tomcat->webapps下的war包和目录;复制war包到tomcat->webapps下,开始。。。</echo>
<delete file="${tomcat.webapps}/${war.name}.war" />
<delete dir="${tomcat.webapps}/${war.name}" />
<copy todir="${tomcat.webapps}">
<fileset dir="${build.war}" includes="*.war" />
</copy>
<echo>删除和拷贝war完成!</echo>
</target>

<target name="start_tomcat" depends="delcopy" >
<echo message="启动tomcat,开始。。。" />
<!-- <exec executable="${tomcat.bin}/startup.sh" failonerror="false" /> -->
<exec executable="/bin/sh" failonerror="false" append="true" >
<arg line="-c '${tomcat.bin}/catalina.sh start'" />
</exec>
<sleep seconds="6"/>
<echo message="启动tomcat,完成!" />
</target>

</project>

jenkins方面的设置:

a。系统管理-Global Tool Configuration

在这里添加ant的路径,需要添加,不然ant时会失败。

b。系统管理-系统设置

添加build_id的全局变量,需要添加,不然tomcat启动时,会失败。

之前就是因为没有加这个环境变量,导致一直启动tomcat启不启来,苦恼了我多日,

虽然现在知道了解决方案,但还是不知道为什么。

网上有人说是因为你启动tomcat是最后一步,当你执行完ant的最后一步后,jenkins就认为构建结束了,就会把相关构建进程给杀掉,但是实际你这时tomcat start并未完成启动好就被杀掉了。那如果是这样的话,为什么加了个build_id的全局变量后,就会好了呢? 高手知道的请留言。

c。系统管理-管理节点-新建节点:

这里我添加一个节点。为什么我要添加一个节点呢?

因为jienkins是发布在我A环境,但是我要发布的web环境是在B环境,我不想在B环境再部署一个jenkins,我想通过A环境的jenkins来把war包部署到B环境,

所以我就新增了一个B环境的节点。后面点击立即构建时,都是到B环境上进行的。

接上图

d。新建job项目-源码管理:

e。新建job项目-构建:

f。

这时点击立即构建,就可以了,可以看日志了

#####################################################

四:

a。jenkins做如下操作:

a。1:系统管理-系统设置-全局属性:

键:BUILD_ID

值:allow_to_run_as_daemon

a。2:

b。tomcat下的conf的tomcat-users.xml文件最下面添加这么一句话:

<user username="admin" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

c。构建前,要确保你项目名下有war文件,如下图:

d。点击立即构建后,日志如下:

这时jenkins会把test001下的war包传到tomcat/webapps下,然后发布。

(我的环境再传war包时有一段时间)

出现上图的success,说明发布完成,这时通过浏览器访问 http://ip:8080/包名/

#####################################################

ant 自动化构建环境。的更多相关文章

  1. Jenkins + Jmeter +Ant自动化集成环境搭建(一)

    所需工具 一.jmeter 工具下载 https://jmeter.apache.org/  配置环境JDK等及各种插件可以看小七之前的教程 二.Ant安装(http://ant.apache.org ...

  2. Jmeter+Jenkins+Ant自动化集成环境搭建

    搭建环境: JDK:jdk1.8.0_92 Ant:apache-ant-1.9.7 Jmeter: apache-jmeter-3.0 Jenkins:jenkins-2.19.3 具体环境配置 1 ...

  3. Jenkins+Jmeter+Ant自动化集成环境搭建

    1.搭建环境,安装以下工具 JDK:jdk1.7.0_79 Ant:apache-ant-1.9.7 Jmeter: apache-jmeter-3.0 Jenkins: jenkins-1.651. ...

  4. 搭建JMETER+ANT自动化接口测试环境步骤(一)

    一.环境准备: 1.JDK    下载            地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html ...

  5. Grunt自动化构建环境搭建

    1.环境准备 需要安装Git.Node.Bower.Grunt.Ruby NodeJS https://nodejs.org/en/ Ruby    http://rubyinstaller.org/ ...

  6. Jenkins+Ant+TestNG+Testlink自动化构建集成(完整版)

    这段时间折腾自动化测试,之前都是在Eclipse工程里面手工执行自动化测试脚本,调用Testlink API执行测试用例,目前搭建Jenkins自动化构建测试的方式,实现持续构建,执行自动化测试. 硬 ...

  7. JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建

    在JMeter接口测试不断深入的过程中,发现可以和jenkins和ant一起搭配进行自动化的构建.下面是jmeter自动化构建的整理笔记. 准备环境 需要本机上确定安装了jmeter.ant和jenk ...

  8. Jenkins+Ant+TestNG+Testlink自动化构建集成

    这段时间折腾自动化测试,之前都是在Eclipse工程里面手工执行自动化测试脚本,调用Testlink API执行测试用例,目前搭建Jenkins自动化构建测试的方式,实现持续构建,执行自动化测试. 硬 ...

  9. jmeter + ant + jenkins 自动化集成环境搭建

    所需工具 一.jmeter 工具下载 https://jmeter.apache.org/  配置环境JDK等及各种插件 二.Ant安装(http://ant.apache.org/) 安装Ant是为 ...

随机推荐

  1. linux 编译引用动态库时,报GLIBC_2,14 not found的处理方法

    这种错误一般是其引用的libc.so,其中含有版本较高的函数导致. 查看及解决办法: objdump -p ./libdmapi.so 显示: version References: ... requ ...

  2. C/C++顺序数据结构——动态数组测试

    这是一篇顺序表数据结构——动态数组的测试, 实现 //初始化数组 //插入 //根据位置删除 //根据值删除 //查找 //打印 //释放动态数组的内存 //清空数组 //获得动态数组容量 //获得动 ...

  3. 一张图牢记vim常用命令

    1.示例(前提要切到命令状态) ^  光标移动到行首 $  光标移动到行尾 set nu 显示行号 :%s/foo/bar/g 会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g) 参 ...

  4. python学习之【第十六篇】:Python中的常用模块之OS模块、sys模块、random模块

    1. OS模块 OS模块是与操作系统交互的一个接口.内部提供了以下方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname& ...

  5. python手册学习笔记3

    笔记3 > http://www.pythondoc.com/pythontutorial3/datastructures.html 装饰器 def log(text): def decorat ...

  6. docker项目——搭建飞机大战小游戏

    项目2:搭建打飞机小游戏,验证数据持久化(最底下有链接) 第一步:拉取镜像 [root@localhost docker-image]# docker load < httpd_img.tar. ...

  7. Resource Path Location Type Target runtime Apache Tomcat v6.0 is not defined(项目报错)已解决

    我换了开发工具后,导入的项目不是这里报错就是那里不错.不过,我喜欢.在tomcat里面部署项目后,定位到报错行时,总是提示我这句话:Description Resource Path Location ...

  8. Kickstart Round H 2019 Problem B. Diagonal Puzzle

    有史以来打得最差的一次kickstart竟然发生在winter camp出结果前的最后一次ks = = 感觉自己的winter camp要凉了 究其原因,无非自己太眼高手低,好好做B, C的小数据,也 ...

  9. nyoj 115-城市平乱 (BFS)

    115-城市平乱 内存限制:64MB 时间限制:1000ms 特判: No 通过数:5 提交数:8 难度:4 题目描述: 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维 ...

  10. 领扣(LeetCode)二维区域和检索 个人题解

    给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, col1) = (2, 1) ,右 ...