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. 洛谷P3121 【[USACO15FEB]审查(黄金)Censoring (Gold)】

    双栈+AC自动机 这题其实跟一道KMP算法的题有一些渊源,它就是这道题的简单板. Clear: 给你两个串A,B,每次在B串中从左到右找串A,并将该子串删除,直到找不到为止,问你能删几次. 样例输入: ...

  2. NOIP模拟 13

    我终于又厚颜无耻地赖着没走 ...... T1 矩阵游戏 用了30hmin找规律,然后发现貌似具有交换律,然后发现貌似有通项公式,然后发现貌似每次操作对通项的影响是相同的,然后发现貌似跟N没啥关系.. ...

  3. SSHD服务安全的连接

    SSHD服务 SSH 安全的远程连接 OpenSSH 工具 centos服务端的包:openssh-server centos客户端的包:openssh-clients 主要配置文件一般安装完成后再/ ...

  4. m76 赛后总结

    这次没有炸的太厉害,只是T3崩了,而且..... 这次的心态并没有因为loj的大吉而崩,反而在经受过上一轮的打击之后变得坚强了,心态也平了,没什么可挂念的,因为我什么都没有,所以发扬光脚的不怕穿鞋的精 ...

  5. Wireshark嗅探抓取telnet明文账户密码

    0x00 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直 ...

  6. php ffmpeg截取视频第一帧保存为图片的方法

    php ffmpeg截取视频第一帧保存为图片的方法 <pre> $xiangmupath = $this->getxiangmupath(); $filename = 'chengs ...

  7. Python 基础 面向对象之二 三大特性

    Python 基础 面向对象之二 三大特性 上一篇主要介绍了Python中,面向对象的类和对象的定义及实例的简单应用,本篇继续接着上篇来谈,在这一篇中我们重点要谈及的内容有:Python 类的成员.成 ...

  8. LocalDate类

    LocalDate类与Date类不同.Date类是距离一个固定时间点的毫秒数(UTC 1970.1.1 00:00:00) Date类表示时间点,LocalDate类用来表示日历表示法. import ...

  9. T-SQL Part XI: Login Failed 18456 以及修改Authentication Mode

    这是一个很常见的场景,安装SQL Server时候选择了默认的Windows Authentication Only,然后使用中发现还是需要支持用户名/密码登录. 按照MSDN的文档,然而并没有多大作 ...

  10. 搭建Redis三主三从集群

    Redis三主三从集群规划 10.0.128.19   使用端口 7000  7001 10.0.128.22   使用端口 7002  7003 10.0.128.23   使用端口 7004  7 ...