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. java.io.StreamCorruptedException: invalid stream header: 00000000

    Caused by: java.io.StreamCorruptedException: invalid stream header: 00000000 at java.io.ObjectInputS ...

  2. Kubernetes3-kubectl管理Kubernetes容器平台-1

    一.简介 1.什么是kubectl kubectl前面其实已经用到了一些,它其实就是用于操作kubernetes集群的命令行接口,通过kubectl的各种命令实现各种功能 2.环境还是用上一偏文章 K ...

  3. lrd 模拟 总结

    觉得是时候总结一下达哥的考试了!达哥的考试我就没有考好过,就之前达哥的考试都是人家ak我爆零,然后这次也不例外,我总是想在考场上尝试一些新的东西,其实就是作死行为,有的时候这种行为可以为我带来收益但是 ...

  4. Linux 项目 shell 自动获取报告本机IP (1) | 通过shell 自动获取报告本机IP

    由于电脑设置静态IP经常出现链接不上网络,动态IP又非常不方便,故有了这个想法并实现 原理: Linux,包含PC机器,树莓派等,通过shell 自动获取报告本机IP  | 通过 Mutt+Msmtp ...

  5. python线程threading.Timer源码解读

    threading.Timer的作用 官方给的定义是: """Call a function after a specified number of seconds: t ...

  6. Hadoop4-HDFS分布式文件系统原理

    一.简介 1.分布式文件系统钢结构 分布式文件系统由计算机集群中的多个节点构成,这些节点分为两类: 主节点(MasterNode)或者名称节点(NameNode) 从节点(Slave Node)或者数 ...

  7. C语言程序设计100例之(10):最大公约数

    例10        最大公约数 问题描述 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. 输入数据 第 ...

  8. 什么情况用ArrayList or LinkedList呢?

    ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类.ArrayList 和 LinkedList 都实现 List 接口.先对List做一个简单的了解: ...

  9. window中php的交互模式

    1.配置php的环境变量: 测试: cmd >> php --version 2.在cmd下编写测试脚本 1)  php -r  + php测试代码: 2) php -a + Enter  ...

  10. Zabbix-(五)监控Docker容器与自定义jvm监控项

    Zabbix-(五)监控Docker容器与自定义jvm监控项 一.前言 前文中讲述了Zabbix对服务器硬件方面的监控功能,本文将讲述利用Zabbix监控Docker容器中的Java Web服务,并通 ...