vjame

          優化代碼是無止境的
          隨筆 - 65, 文章 - 9, 評論 - 26, 引用 - 0
          數據加載中……

          svn+ant+tomcat+hudson 持續構建WEB應用最佳實踐

          經過幾天的研究,終于實現自動構建部署WEB應用的目標,詳細配置過程記錄如下

          一、準備安裝包
          jdk1.6.0_26
          apache-ant-1.8.2
          apache-tomcat-5.5.27
          hudson-2.1.0

          二、在hudson中配置環境,包括jdk、ant、svn信息等

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

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

          進入系統管理-》系統設置  

          JDK環境配置




          ANT環境配置



          MAVEN環境配置        


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



          MAVEN構建環境配置  ,主要是mvn選擇和目標命令配置  



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


          三、在hudson中創建一個新任務,為了配置方便,我們這里選擇自由風格



          下面是項目的詳細配置

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




          構建觸發配置,poll scm 采用調度輪詢源代碼庫,配置幫助可以查看輸入框后的幫助

             


          ANT構建配置

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



           
          項目郵箱通知相關干系人, Recipients 為項目負責人,一般填寫經理郵箱,
          第一個選項為給所有人發送每一次不穩定的構建
          第二個選項為發送給所有與這次構建相關的成員

               

          最后不要忘記點擊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構建會自動執行ANT
          自動部署可以使用catalina-ant.jar中的deploy和undeploy命令,但是這種方式將要在tomcat中反復部署war,最終導致jvm內存不足,所以選擇
          shutdown和startup方式來操作tomcat,已達到持續構建的目標
          啟動和停止tomcat的方式有多種,其中可以在ant中調用windows計劃任務,具體查看文件中的注釋。
          整個配置涉及到啟動2個tomcat,所以需要更改tomcat/conf/server.xml文件中的相關端口,保證2個tomcat端口不沖突

          hudson持續構建命令行輸出





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

          評論

          # re: svn+ant+tomcat+hudson 持續構建WEB應用最佳實踐[未登錄]  回復  更多評論   

          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
          主站蜘蛛池模板: 仁寿县| 正定县| 德令哈市| 通化县| 扶沟县| 呼图壁县| 怀柔区| 安塞县| 突泉县| 育儿| 秦安县| 年辖:市辖区| 枞阳县| 顺义区| 田阳县| 扎鲁特旗| 天气| 威远县| 肇源县| 剑川县| 启东市| 德庆县| 云林县| 上虞市| 贺州市| 五家渠市| 青岛市| 靖安县| 登封市| 英山县| 西昌市| 库车县| 西盟| 吉木萨尔县| 河津市| 墨江| 南华县| 常宁市| 五原县| 合阳县| 慈利县|