CentOS系统下Apache Ant自动从SVN获取代码并通过Tomcat集群发布工程

来源:互联网 发布:农村淘宝招聘司机吗 编辑:程序博客网 时间:2024/05/21 17:17
关于利用Ant自动从SVN服务器获取代码并通过Tomcat服务器集群发布工程的过程,涉及到Shell编程、Ant服务器配置、SVN服务器配置、Apache httpd服务器、Tomcat集群服务器的配置,相关配置请了解其他博客。

        一、相关服务器配置说明:

          1、Apache httpd与Tomcat服务器集群配置:http://blog.csdn.net/limingzhong198/article/details/19401443;

          2、Ant服务器配置:http://blog.csdn.net/limingzhong198/article/details/19399605;

          3、SVN服务器配置:http://blog.csdn.net/limingzhong198/article/details/21801091;

          4、Shell编程请参考相关的书籍;

        二、关于Ant与Svn服务器的安装目录及其准备工作:

          1、Ant与Svn的安装目录:/usr/local;

          2、准备工作:启动SVN服务器,关闭防火墙,准备好相关的ant与svn的联合发布的jar文件;

        三、操作过程:

          1、在ant目录下新建目录并赋予执行权限:

                [root@localhost ant]# mkdir ant-svn

                [root@localhost ant]# chmod u+x ant-svn

          2、svn服务器下一共两个项目:mvc与test,如下图所示:

               

          3、在ant-svn目录下建立Ant发布所需的build-mvc.xml与build-mvc.properties文件:

                build-mvc.properties内容:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. build.version=1.0.0  
  2.   
  3. svnant.jar=/usr/local/ant/lib/svnant.jar  
  4. svnClientAdapter.jar=/usr/local/ant/lib/svnClientAdapter.jar  
  5. svnjavahl.jar=/usr/local/ant/lib/svnjavahl.jar  
  6. java.lib=/usr/java/jdk1.6.0_30/lib  
  7.   
  8. debuglevel=source,lines  
  9. target=1.6  
  10. source=1.6  
  11.   
  12. workspace=/usr/local/ant/ant-svn/workspace  
  13. dist=${workspace}  
  14.   
  15. build=${workspace}/WebContent/WEB-INF/classes  
  16. lib=${workspace}/WebContent/WEB-INF/lib  
  17.   
  18. src=${workspace}/src  
  19. web=${workspace}/WebContent  
  20. tomcat1.home=/usr/local/tomcat1  
  21. tomcat2.home=/usr/local/tomcat2  
  22.   
  23. warfile=${dist}/${ant.project.name}.war  
  24.   
  25. svnUrl=svn://192.168.31.132/davesvn/mvc  
  26. svnUser=dave  
  27. svnPasswd=davepwd  

                文件重要语句说明:

                3-6行:主要表示的所需要的jar包,包括java的类库;

                8-10行:是配置ant编译所需要的资源级别和debug级别;

                12行:定义临时存放发布工程的文件目录;

                15-19行:建立发布工程的class、lib、src与web主目录;

                20-21行:定义web服务器集群配置下的tomcat节点路径;

                23行:定义发布工程的war包名称;

                25-27行:定义用于抓取svn服务器工程代码的svn服务路径,以及操作svn的用户名及其密码;

                build-mvc.xml内容:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2.   
  3. <project basedir="." name="mvc" default="auto">    
  4.    <property file="build-mvc.properties" />    
  5.     
  6.     <path id="svnant.lib">    
  7.        <pathelement location="${svnjavahl.jar}" />    
  8.        <pathelement location="${svnant.jar}" />    
  9.        <pathelement location="${svnClientAdapter.jar}" />    
  10.    </path>    
  11.     
  12.    <path id="java6">    
  13.         <fileset dir="${java.lib}">    
  14.            <include name="**/*.jar" />    
  15.        </fileset>    
  16.    </path>    
  17.     <path id="project.classpath">    
  18.        <pathelement location="${build}" />    
  19.        <fileset dir="${lib}" />    
  20.     </path>    
  21.    
  22.    <target name="clear">    
  23.       <delete dir="${workspace}" />    
  24.       <delete dir="${tomcat.home}/work/Catalina/localhost/${ant.project.name}" />    
  25.       <delete dir="${tomcat.home}/webapps/${ant.project.name}" />    
  26.       <delete dir="${tomcat.home}/webapps/${ant.project.name}.war" />    
  27.     </target>    
  28.     
  29.     <taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" classpathref="svnant.lib" />    
  30.     
  31.     <target name="svn" depends="clear">    
  32.         <mkdir dir="${workspace}"/>    
  33.         <svn username="${svnUser}" password="${svnPasswd}" javahl="false">    
  34.            <checkout url="${svnUrl}" destPath="${workspace}" />    
  35.         </svn>    
  36.     </target>    
  37.     
  38.     <target name="compile" depends="svn" description="======compile project======">    
  39.         <mkdir dir="${build}" />    
  40.         <copy includeemptydirs="false" todir="${build}">    
  41.             <fileset dir="${src}" excludes="**/*.java"/>    
  42.        </copy>  
  43.             
  44.         <javac includejavaruntime="true" debug="true" debuglevel="${debuglevel}" destdir="${build}" source="${source}" target="${target}" encoding="utf-8">    
  45.             <src path="${src}" />  
  46.             <classpath>    
  47.                <path refid="project.classpath">    
  48.                </path>    
  49.               <path refid="java6">    
  50.              </path>    
  51.           </classpath>    
  52.       </javac>        
  53.     </target>    
  54.    
  55.    <target name="war" depends="compile" description="======compress j2ee war file======">    
  56.         <mkdir dir="${dist}" />    
  57.         <war destfile="${warfile}" webxml="${web}/WEB-INF/web.xml">    
  58.             <fileset dir="${web}">  
  59.                                 <include name="**/*.jsp"/>  
  60.                                 <include name="**/*-servlet.xml"/>  
  61.                                 <include name="**/applicationContext.xml"/>  
  62.                         </fileset>  
  63.                         <lib dir ="${lib}"/>  
  64.                         <classes dir ="${build}"/>    
  65.         </war>    
  66.    </target>    
  67.      
  68.     <target name="shutdowntomcat" description="========shutdowntomcat===========">    
  69.         <exec executable="${tomcat1.home}/bin/shutdown.sh" failonerror="false"></exec>  
  70.         <sleep seconds="10"/>   
  71.         <exec executable="${tomcat2.home}/bin/shutdown.sh" failonerror="false"></exec>   
  72.         <sleep seconds="10"/>   
  73.         <echo message="it is secuessful of tomcat's shutdownning !" />   
  74.    </target>    
  75.         
  76.    <target name="startuptomcat" description="========startuptomcat===========">    
  77.         <sleep seconds="5"/>    
  78.         <exec executable="${tomcat1.home}/bin/startup.sh" failonerror="false"></exec>  
  79.         <sleep seconds="5"/>  
  80.         <exec executable="${tomcat2.home}/bin/startup.sh" failonerror="false"></exec>  
  81.         <echo message="it is secuessful of tomcat's startuping !" />    
  82.     </target>    
  83.     
  84.    <target name="deploy" depends="war">    
  85.         <copy file="${warfile}" todir="${tomcat1.home}/webapps" />  
  86.         <copy file="${warfile}" todir="${tomcat2.home}/webapps" />  
  87.         <echo message="it is secuessful of project deploy !" />    
  88.     </target>    
  89.         
  90.     <target name="auto" depends="shutdowntomcat,deploy,startuptomcat">    
  91.         <echo message="DONE!!!!" />    
  92.     </target>    
  93. </project>    

                文件重要语句说明:

                3行:定义project的相关信息,包括名称,默认处理的target等信息;

                4行:定义ANT引用的属性文件;

                6行:定义了Svn所需要用到的jar包位置;

                12行:定义java类库文件lib;

                17行:定义编译所需要的文件目录及其使用的lib包;

                22行:定义清理相关文件目录的target;

                29行:定义svn抽取代码的相关配置任务;

                31行:定义svn抽取代码的target

                38行:定义编译的target

                55行:根据相关配置生成发布的war

                68行:定义关闭tomcat集群中的节点target,从代码中可以看出,定义了两个tomcat节点

                76行:定义启动tomcat集群中的节点target,从代码中可以看出,定义了两个tomcat节点

                84行:定义发布工程的的target

                90行:定义Ant执行工作的开始target

                注:相关标签的含义请查阅其他的相关资料。

          4、在Ant-Svn目录下建立一个临时存放编译和发布工作的workspace目录:

                [root@localhost ant-svn]# mkdir workspace

                [root@localhost ant-svn]# chmod u+x workspace

          5、建立批量执行发布命令的Shell程序文件batch-ant.sh:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #!/bin/sh  
  2.   
  3. echo "=========================================================================" >> /usr/local/ant/ant-svn/res.log  
  4. echo "============================   batch-ant-exe    =========================" >> /usr/local/ant/ant-svn/res.log  
  5. echo "=========================================================================" >> /usr/local/ant/ant-svn/res.log  
  6.   
  7. date >> /usr/local/ant/ant-svn/res.log  
  8. echo "============================   init the env start   =====================" >> /usr/local/ant/ant-svn/res.log  
  9. export JAVA_HOME=/usr/java/jdk1.6.0_30  
  10. export JAVA_BIN=/usr/java/jdk1.6.0_30/bin  
  11.   
  12. export ANT_HOME=/usr/local/ant  
  13.   
  14. export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin  
  15. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
  16. export JAVA_HOME JAVA_BIN ANT_HOME PATH CLASSPATH  
  17. echo "============================   init the env  end   ======================" >> /usr/local/ant/ant-svn/res.log  
  18.   
  19. echo "============================   close apache the env start   =============" >> /usr/local/ant/ant-svn/res.log  
  20. /usr/local/apache/bin/apachectl -k stop  
  21. echo "============================   close apache the env end     =============" >> /usr/local/ant/ant-svn/res.log  
  22.   
  23. date >> /usr/local/ant/ant-svn/res.log  
  24. echo "============================   execute the ant cmd start    =============" >> /usr/local/ant/ant-svn/res.log  
  25. cd /usr/local/ant/ant-svn  
  26. ant -buildfile build-mvc.xml  
  27. echo &date  
  28. #sleep 1m  
  29. #echo &date  
  30. #ant -buildfile build-test.xml  
  31. #echo "===========================  execute the ant cmd end      ==== =========" >> /usr/local/ant/ant-svn/res.log  
  32. #date >> /usr/local/ant/ant-svn/res.log  
  33.   
  34. echo "============================   open apache the env start   ==============" >> /usr/local/ant/ant-svn/res.log  
  35. /usr/local/apache/bin/apachectl -k start  
  36. echo "============================   open apache the env end     ==============" >> /usr/local/ant/ant-svn/res.log  

                文件重要语句说明:

                9-16行:引入相关的环境变量,包括java、ant;

                20行:关闭apache tomcat集群服务器;

                26行:ant命令,执行build-mvc.xml文件内容;

                35行:启动apache tomcat集群服务器; 

                注:shell编程请参阅其他资料。               

          6、建立监控结果文件:res.log

                [root@localhost ant-svn]# touch res.log

          7、执行批处理Shell脚本batch-ant.sh文件:

                [root@localhost ant-svn]# sh batch-ant.sh

                显示结果:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName  
  2. httpd (no pid file) not running  
  3. Buildfile: /usr/local/ant/ant-svn/build-mvc.xml  
  4.   
  5. shutdowntomcat:  
  6.      [exec] Feb 19, 2014 7:04:09 AM org.apache.catalina.startup.Catalina stopServer  
  7.      [exec] SEVERE: Catalina.stop:   
  8.      [exec] java.net.ConnectException: Connection refused  
  9.      [exec]     at java.net.PlainSocketImpl.socketConnect(Native Method)  
  10.      [exec]     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)  
  11.      [exec]     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)  
  12.      [exec]     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)  
  13.      [exec]     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)  
  14.      [exec]     at java.net.Socket.connect(Socket.java:529)  
  15.      [exec]     at java.net.Socket.connect(Socket.java:478)  
  16.      [exec]     at java.net.Socket.<init>(Socket.java:375)  
  17.      [exec]     at java.net.Socket.<init>(Socket.java:189)  
  18.      [exec]     at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:422)  
  19.      [exec]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  20.      [exec]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  21.      [exec]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  22.      [exec]     at java.lang.reflect.Method.invoke(Method.java:597)  
  23.      [exec]     at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:338)  
  24.      [exec]     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:416)  
  25.      [exec] Feb 19, 2014 7:04:20 AM org.apache.catalina.startup.Catalina stopServer  
  26.      [exec] SEVERE: Catalina.stop:   
  27.      [exec] java.net.ConnectException: Connection refused  
  28.      [exec]     at java.net.PlainSocketImpl.socketConnect(Native Method)  
  29.      [exec]     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)  
  30.      [exec]     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)  
  31.      [exec]     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)  
  32.      [exec]     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)  
  33.      [exec]     at java.net.Socket.connect(Socket.java:529)  
  34.      [exec]     at java.net.Socket.connect(Socket.java:478)  
  35.      [exec]     at java.net.Socket.<init>(Socket.java:375)  
  36.      [exec]     at java.net.Socket.<init>(Socket.java:189)  
  37.      [exec]     at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:422)  
  38.      [exec]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  39.      [exec]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  40.      [exec]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  41.      [exec]     at java.lang.reflect.Method.invoke(Method.java:597)  
  42.      [exec]     at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:338)  
  43.      [exec]     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:416)  
  44.      [echo] it is secuessful of tomcat's shutdownning !  
  45.   
  46. clear:  
  47.    [delete] Deleting directory /usr/local/ant/ant-svn/workspace  
  48.   
  49. svn:  
  50.     [mkdir] Created dir: /usr/local/ant/ant-svn/workspace  
  51.       [svn] Deprecated attribute 'username'. This attribute will disappear with SVNANT 1.3.2. Use svnSetting instead.  
  52.       [svn] Deprecated attribute 'password'. This attribute will disappear with SVNANT 1.3.2. Use svnSetting instead.  
  53.       [svn] Deprecated attribute 'javahl'. This attribute will disappear with SVNANT 1.3.2. Use svnSetting instead.  
  54.   
  55. compile:  
  56.     [mkdir] Created dir: /usr/local/ant/ant-svn/workspace/WebContent/WEB-INF/classes  
  57.     [javac] /usr/local/ant/ant-svn/build-mvc.xml:44: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds  
  58.     [javac] Compiling 4 source files to /usr/local/ant/ant-svn/workspace/WebContent/WEB-INF/classes  
  59.   
  60. war:  
  61.       [war] Building war: /usr/local/ant/ant-svn/workspace/mvc.war  
  62.   
  63. deploy:  
  64.      [copy] Copying 1 file to /usr/local/tomcat1/webapps  
  65.      [copy] Copying 1 file to /usr/local/tomcat2/webapps  
  66.      [echo] it is secuessful of project deploy !  
  67.   
  68. startuptomcat:  
  69.      [echo] it is secuessful of tomcat's startuping !  
  70.   
  71. auto:  
  72.      [echo] DONE!!!!  
  73.   
  74. BUILD SUCCESSFUL  
  75. Total time: 48 seconds  
  76. Wed Feb 19 07:04:52 PST 2014  
  77.   
  78. httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName  

                文件重要语句说明:

                1-2行:执行ant文件的关闭apache tomcat 集群服务器配置的结果;

                3行:执行ant命令;

                5行:执行名为shutdowntomcat的target标签,关闭tomcat服务,包括tomcat1与tomcat2两个节点服务;

                8、27行:表示在关闭tomcat服务时,原本tomcat服务根本没有打开,所以在关闭时提示连接被拒绝;

                46行:执行名为clear的target标签

                49行:执行名为svn的target标签,从svn服务器获取相关项目的代码;

                55行:执行名为compile的target标签,编译工程;

                60行:执行名为war的target标签,生成发布的war包;

                63行:执行名为deploy的target标签,发布工程;

                68行:执行名为startuptomcat的target标签,启动tomcat服务,包括tomcat1与tomcat2两个节点服务

                71行:执行名为auto的target标签,实际上只是一个执行入口;

                74行:表示执行ant命令成功

                78行:执行ant文件的启动apache tomcat 集群服务器配置的结果

          8、在浏览器中输入:http://192.168.31.132/mvc/index.jsp,结果如下图所示:

                

               从图中可以看出发布成功。

          注:1、以上过程在Centos 6.3所属32位系统下调试通过;

                 2、shell脚本中没有处理异常。

http://blog.csdn.net/limingzhong198/article/details/19477823

1 0
原创粉丝点击