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. DP动态规划学习笔记

    作为考察范围最广,考察次数最多的算法,当然要开一篇博客来复习啦. 子曰:温故而知新,可以为师矣 我复习DP时有一些自己对DP的理解,也就分享出来吧. ——正片开始—— 动态规划算法,即Dynamic ...

  2. 修改tomcat默认使用的jdk版本

    1.windows平台 在csetclasspath.bat文件开头加上如下两句(指定JDK): set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_79  se ...

  3. [考试反思]1013csp-s模拟测试71:徘徊

    分差好大...但是从排名上看也许还可以接受? 不算太炸 但是这个还是算了吧... 其实状态不是很好. T1不会,打的搜索,想到一个剪枝但是感觉没什么用,所以没打. 考后打上,85了...打上另一个就9 ...

  4. NOIP模拟 18

    这次时间分配不合理,沉迷大模拟无法自拔 虽然A了但是根本就没给T3留时间555 T3如果有时间看看数据范围应该可以想到QJ掉20分的555 T1 引子 打这题的时候感觉自己在做图像处理.. 然后调了各 ...

  5. linux常用的命令解释

    1.man命令的操作按键: 按键 用处 空格键 向下翻一页. [Page Down] 向下翻一页. [Page Up] 向上翻一页. [HOME] 直接前往首页. [END] 直接前往尾页. /关键词 ...

  6. Ansible之入门简介

    一.ansible简介 ansible是一款由python语言编写的一款自动化运维工具,它集合了众多运维工具(puppet.cfengine.chef.func.fabric)优点,实现了批量系统配置 ...

  7. JAVA 调用HTTP接口POST或GET实现方式

    HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务器端是网站.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请 ...

  8. Java设计模式之单利模式(Singleton)

    单利模式的应用场景: 单利模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例.并提供一个全局反访问点.单利模式是创建型模式.单利模式在生活中应用也很广泛,比如公司C ...

  9. java多线程与线程并发五:多个线程访问共享对象和数据的方式

    本节的内容主要是对前面几节提到的线程间共享数据的方式做一个总结. 线程之间共享数据有以下几种方式: 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象. 2.如果每个线程执行的代码不同 ...

  10. Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa! 其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring ...