• ant 自动化构建环境。


    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/包名/

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

  • 相关阅读:
    css选择器中:first-child与:first-of-type的区别
    Chrome 快捷键
    notepad++ html格式化
    Linux VFS的主要的数据结构
    Linux根文件系统介绍
    Linux文件系统测试工具
    p​o​s​t​m​a​r​k​使​用
    虚拟文件系统
    linux文件系统初始化过程(6)---执行init程序
    linux文件系统初始化过程(4)---加载initrd(中)
  • 原文地址:https://www.cnblogs.com/afangxin/p/6656081.html
Copyright © 2020-2023  润新知