vjame

          優(yōu)化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數(shù)據(jù)加載中……

          svn+ant+tomcat+hudson 持續(xù)構(gòu)建WEB應(yīng)用最佳實踐

          經(jīng)過幾天的研究,終于實現(xiàn)自動構(gòu)建部署WEB應(yīng)用的目標(biāo),詳細配置過程記錄如下

          一、準(zhǔn)備安裝包
          jdk1.6.0_26
          apache-ant-1.8.2
          apache-tomcat-5.5.27
          hudson-2.1.0

          二、在hudson中配置環(huán)境,包括jdk、ant、svn信息等

          將hudson-2.1.0拷貝到tomcat/webapps目錄下,啟動tomcat,startup.bat

          打開IE在地址欄中輸入 http://localhost:8080/hudson-2.1.0/

          進入系統(tǒng)管理-》系統(tǒng)設(shè)置  

          JDK環(huán)境配置




          ANT環(huán)境配置



          MAVEN環(huán)境配置        


          SHELL命令設(shè)置重要) windows下輸入cmd   



          MAVEN構(gòu)建環(huán)境配置  ,主要是mvn選擇和目標(biāo)命令配置  



          郵件通知配置,用戶默認郵件后綴將加在構(gòu)建用戶名后面作為郵件地址,以便每次構(gòu)建郵件通知項目成員  
            
           


          三、在hudson中創(chuàng)建一個新任務(wù),為了配置方便,我們這里選擇自由風(fēng)格



          下面是項目的詳細配置

          SCM配置, url中輸入工程代碼倉庫地址,這里涉及到權(quán)限驗證,需要輸入用戶和密碼




          構(gòu)建觸發(fā)配置,poll scm 采用調(diào)度輪詢源代碼庫,配置幫助可以查看輸入框后的幫助

             


          ANT構(gòu)建配置

          首先選擇 Add build step,選擇 Invoke Ant ,然后在ant version中下拉選擇前面配置的ant-1.8.2,targets不是必填項,默認是ant構(gòu)建default目標(biāo) default="deploy"
             



           
          項目郵箱通知相關(guān)干系人, Recipients 為項目負責(zé)人,一般填寫經(jīng)理郵箱,
          第一個選項為給所有人發(fā)送每一次不穩(wěn)定的構(gòu)建
          第二個選項為發(fā)送給所有與這次構(gòu)建相關(guān)的成員

               

          最后不要忘記點擊Save按鈕保存配置   


          build.xml

          <?xml version="1.0" encoding="utf-8"?>
          <project name="category" basedir="." default="deploy">
              
          <property name="lib.dir" value="${basedir}/WebRoot/WEB-INF/lib" />
              
          <property name="src.dir" value="${basedir}/java" />
              
          <property name="build.dir" value="${basedir}/build" />
              
          <property name="app.dir" value="D:\apache-tomcat-5.5.27">
              
          </property>
              
          <property name="runtime.lib" value="${app.dir}\common\lib" />
              
          <property name="deploy.lib" location="${basedir}/deploylib" />
              
          <property name="deploy.dir" value="${app.dir}\webapps" />
              
          <property name="app.url" value="http://localhost:8899/">
              
          </property>

              
          <property name="javac.debug" value="on" />
              
          <property name="javac.optimize" value="off" />
              
          <property name="javac.target" value="1.5" />
              
          <property name="javac.source" value="1.5" />


              
          <condition property="tomcat.open">
                  
          <http url="${app.url}" />
              
          </condition>

              
          <condition property="tomcat.close">
                  
          <not>
                      
          <http url="${app.url}" />
                  
          </not>
              
          </condition>

              
          <path id="project.class.path">
                  
          <fileset dir="${lib.dir}">
                      
          <include name="***.jar" />
                  
          </fileset>
                  
          <fileset dir="${deploy.lib}">
                      
          <include name="*.jar" />
                  
          </fileset>
              
          </path>

              
          <target name="init">
                  
          <tstamp />
                  
          <property environment="env" />
                  
          <delete dir="${build.dir}" />
                  
          <mkdir dir="${build.dir}" />
              
          </target>

              
          <target name="compaile" depends="init">
                  
          <javac srcdir="${src.dir}" destdir="${build.dir}" encoding="utf-8" classpathref="project.class.path" source="${javac.source}" target="${javac.target}" debug="true">
                  
          </javac>
                  
          <copy todir="${build.dir}">
                      
          <fileset dir="${basedir}/src">
                      
          </fileset>
                      
          <fileset dir="${src.dir}">
                          
          <include name="**/*.xml" />
                          
          <include name="***.properties" />
                      
          </fileset>
                  
          </copy>
              
          </target>

              
          <target name="war" depends="compaile">
                  
          <copy todir="${basedir}/WebRoot/WEB-INF/classes">
                      
          <fileset dir="${build.dir}">
                      
          </fileset>
                  
          </copy>
                  
          <war destfile="${basedir}/${ant.project.name}.war" basedir="${basedir}/WebRoot" webxml="${basedir}/WebRoot/WEB-INF/web.xml">
                  
          </war>
              
          </target>

              
          <target name="tomcat-start">
                  
          <!-- ALL OK -->
                  
          <exec dir="${app.dir}/bin" executable="cmd">
                      
          <env path="${app.dir}" key="CATALINA_HOME" />
                      
          <env path="${app.dir}\temp" key="CATALINA_TMPDIR" />
                      
          <env path="${app.dir}" key="CATALINA_BASE" />
                      
          <arg value="/C startup.bat" />
                  
          </exec>
                  
          <!--
                  C:\>SCHTASKS /Create /RU SYSTEM /SC ONSTART /TN StartupTomcat /TR "D:\apache-tomcat-5.5.27\bin\startup.bat"
                  <exec executable="SCHTASKS">
                      <arg value="/Run"/>
                      <arg value="/TN"/>
                      <arg value="startup"/>
                  </exec>
                  
          -->
                  
          <!-- 
                  <exec executable="${app.dir}/bin/startup.bat" spawn="true" vmlauncher="false">
                  <env key="CATALINA_HOME" value="${app.dir}" />
                  <arg line="/c start ${app.dir}/bin/startup.bat" />
                  </exec>
                  
          -->
                  
          <!-- 
                  <java jar="${app.dir}/bin/bootstrap.jar" fork="true">
                  <jvmarg value="-Dcatalina.home=${app.dir}"/>
                      <arg line="start"/>
                  </java>
                   
          -->
              
          </target>

              
          <target name="tomcat-stop" if="">
                  
          <!--<exec dir="${app.dir}/bin"  executable="cmd">
              <env path="${app.dir}" key="CATALINA_HOME" />
              <arg value="/c shutdown.bat" />
              </exec>
              <echo>111</echo>
          -->
                  
          <!--
                  C:\>SCHTASKS /Create /RU SYSTEM /SC ONSTART /TN ShutdownTomcat /TR "D:\apache-tomcat-5.5.27\bin\shutdown.bat"
                  <exec executable="SCHTASKS">
                      <arg value="/Run"/>
                      <arg value="/TN"/>
                      <arg value="ShutdownTomcat"/>
                  </exec>
                  
          -->
                  
          <java jar="${app.dir}/bin/bootstrap.jar" fork="true">
                      
          <jvmarg value="-Dcatalina.home=${app.dir}" />
                      
          <arg line="stop" />
                  
          </java>
                  
          <waitfor maxwait="5" maxwaitunit="second">
                      
          <available file="errors.log" />
                  
          </waitfor>
              
          </target>


              
          <target name="deploy" depends="war">
                  
          <antcall target="tomcat-stop" />
                  
          <waitfor maxwait="60000">
                      
          <not>
                          
          <http url="${app.url}" />
                      
          </not>
                  
          </waitfor>
                  
          <echo>wati for tomcat close</echo>
                  
          <delete dir="${deploy.dir}/${ant.project.name}">
                  
          </delete>
                  
          <copy todir="${deploy.dir}" file="${basedir}/${ant.project.name}.war">
                  
          </copy>
                  
          <antcall target="tomcat-start" />

              
          </target>
          </project>


          將build.xml文件放置到工程根目錄下,hudson構(gòu)建會自動執(zhí)行ANT
          自動部署可以使用catalina-ant.jar中的deploy和undeploy命令,但是這種方式將要在tomcat中反復(fù)部署war,最終導(dǎo)致jvm內(nèi)存不足,所以選擇
          shutdown和startup方式來操作tomcat,已達到持續(xù)構(gòu)建的目標(biāo)
          啟動和停止tomcat的方式有多種,其中可以在ant中調(diào)用windows計劃任務(wù),具體查看文件中的注釋。
          整個配置涉及到啟動2個tomcat,所以需要更改tomcat/conf/server.xml文件中的相關(guān)端口,保證2個tomcat端口不沖突

          hudson持續(xù)構(gòu)建命令行輸出





          posted on 2011-08-31 20:40 lanjh 閱讀(2712) 評論(1)  編輯  收藏 所屬分類: Java Web

          評論

          # re: svn+ant+tomcat+hudson 持續(xù)構(gòu)建WEB應(yīng)用最佳實踐[未登錄]  回復(fù)  更多評論   

          I've just read your article and found it such a good guide for us to come to know CI~ Thanks for sharing~!
          2011-09-01 10:26 | GuoGuo
          主站蜘蛛池模板: 会泽县| 闵行区| 余江县| 贞丰县| 额济纳旗| 平利县| 漳平市| 峡江县| 庐江县| 绍兴县| 大洼县| SHOW| 澄江县| 茌平县| 大港区| 黔西县| 临猗县| 东乌| 光山县| 丰台区| 蓬莱市| 皮山县| 嘉祥县| 历史| 长岛县| 桂东县| 安龙县| 道真| 徐州市| 化州市| 江油市| 富平县| 织金县| 灵台县| 梓潼县| 咸丰县| 垦利县| 舟山市| 屏边| 金阳县| 永定县|