<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫暖潔森

    勇敢做自己

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      13 隨筆 :: 1 文章 :: 70 評論 :: 0 Trackbacks
    最近自己出于對項目持續(xù)構(gòu)建感興趣,特花一點時間對這塊進行研究并取得一些不錯的效果,目前使項目達到了自動化構(gòu)建集成的效果,說一下自己的方案

    持續(xù)集成工具:CruiseControl,俗稱cc
    構(gòu)建工具:Ant (Maven不錯,但還未使用熟練)
    應(yīng)用服務(wù)器:tomcat
    版本控制器:Subversion



    1、cc的設(shè)置

    首先下載CruiseControl,目前版本是2.7.1,打開目錄,找到config.xml文件

    <cruisecontrol>
        <project name="sanitation">

            <listeners>
                <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
               </listeners>

            <bootstrappers>
                <svnbootstrapper localWorkingCopy="projects/${project.name}" />
                       </bootstrappers>

            <modificationset quietperiod="30">
                <svn localWorkingCopy="projects/${project.name}"/>
                      </modificationset>

            <schedule interval="3600">
               <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
              </schedule>

            <log>
               <merge dir="projects/${project.name}/target/test-results"/>
                      </log>

            <publishers>
                <onsuccess>
                    <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
                                </onsuccess>
                <email mailhost="XXXX" returnaddress="XXX" buildresultsurl="XXXX" skipusers="true" spamwhilebroken="true">
                 <always address=XXX@XXX/>
                   <failure address=XXX@XXX/>
                </email>
            </publishers>

        </project>
    </cruisecontrol>


    其中${project.name}根據(jù)實際情況改成自己的項目名稱,<schedule interval="3600">是指過一小時進行下次輪循,這里單位是秒,<publishers>執(zhí)行完畢后可以通過發(fā)送有郵件方式進行通知,上面是成功或失敗都進行通知,這樣 cc環(huán)境就布置完畢

    2、ant腳本

    只摘取關(guān)鍵部分

    <project basedir="." default="deploy-test" name="sanitation">
    <target name="deploy-test" depends="quickstart,fun-test,test" />

    <!-- ===================================
       把打包的文件拷貝到tomcat目錄下
      ==================================== -->
     <target name="quickstart" depends="war" description="santation程序">
      <echo message="打包部署開始..." />
      <antcall target="tomcat.stop" />
      <delete dir="${server.deploy}/${ant.project.name}" />
      <delete file="${server.deploy}/${ant.project.name}.war" />
      <copy todir="${server.deploy}" file="${release.warfile}" />
      <echo message="打包部署結(jié)束..." />
     </target>

    <!-- 執(zhí)行Selenium Web功能測試 -->
     <target name="fun-test" depends="compile">
      <path id="selenium.server.runtime">
       <fileset dir="lib/test" includes="selenium-server-*.jar" />
      </path>

      <delete dir="${functional_test.data}/**" />
      

      <antcall target="tomcat.start" />
      <antcall target="selenium.server.start" />

      <junit printsummary="yes" fork="true" errorProperty="test.failed" failureProperty="test.failed">
       <classpath>
        <path refid="test.classpath" />
        <path location="${test.build}" />
       </classpath>
       <formatter type="xml" />
       <formatter type="brief" usefile="false" />

       <test name="${testcase}" if="testcase" />
       <batchtest todir="${functional_test.data}" unless="testcase">
        <fileset dir="${test.build}">
         <include name="**/view/*Test.class" />
        </fileset>
       </batchtest>
      </junit>
      <antcall target="tomcat.stop" />
      <if>
       <istrue value="${test.failed}" />
       <then>
        <functional_test-report report.dir="${functional_test.report}" data.dir="${functional_test.data}" />
        <fail>Unit tests 失敗. 請于${functional_test.report}目錄觀看錯誤信息報表.</fail>
       </then>
      </if>
     </target>

    <!-- 執(zhí)行JUNIT功能測試 -->

    <target name="test" depends="compile">

      <!-- 檢查 junit.jar -->
      <available classname="junit.framework.TestCase" property="junit.present" />
      <fail unless="junit.present" message="Please copy lib/junit-3.8.1.jar into env.ANT_HOME/lib or Class Path" />
      <!-- 清除上次的data數(shù)據(jù) -->
      <delete dir="${test.data}" />
      <mkdir dir="${test.data}" />
      <!-- 執(zhí)行測試 -->
      <junit printsummary="yes" fork="true" errorProperty="test.failed" failureProperty="test.failed">
       <classpath>
        <path refid="test.classpath" />
        <path location="${test.build}" />
       </classpath>
       <formatter type="xml" />
       <formatter type="brief" usefile="false" />

       <!-- 執(zhí)行單個或批量的test case。
        如果在命令行有定義testcase,
        如: ant -Dtestcase=com.gresoft.sanitation.test.MyTestCase
        則執(zhí)行單個test case. -->
       <test name="${testcase}" if="testcase" />

       <batchtest todir="${test.data}">
        <fileset dir="${test.build}">
         <exclude name="**/functional/**/*Test.class" />
         <exclude name="**/view/*Test.class" />
         <include name="**/*Test.class" />
        </fileset>
       </batchtest>
      </junit>
      <if>
       <istrue value="${test.failed}" />
       <then>
        <test-report report.dir="${test.report}" data.dir="${test.data}" />
        <fail>Unit tests 失敗. 請于${test.report}目錄觀看錯誤信息報表.</fail>
       </then>
      </if>
     </target>


    此腳本主要目的是自動從svn服務(wù)器上更新最新程序并進行編譯,部署,selenium頁面測試,junit功能測試的過程,并自動把運行后結(jié)果以郵件形式進行提醒,這樣整個流程就算結(jié)束,然后一小時后cc自動進行下一次的自動構(gòu)建過程


    問題:其中腳本中  <antcall target="tomcat.stop" />是過程中必須要加入的,如果腳本執(zhí)行完tomcat還沒關(guān)閉,cc會一直處于停止狀態(tài),一小時后也不會繼續(xù)輪循,因為它需要等待一個返回信息目前這好象是cc一個bug

    詳情看:http://confluence.public.thoughtworks.org/display/CC/Starting+a+server+with+cc

    好處:使用此方式可以每小時能跟蹤項目中各組員項目開發(fā)情況,并對系統(tǒng)功能進行持續(xù)測試,把問題可以及時進行反饋以便解決,其中項目中測試完整性是整個過程的最關(guān)鍵部分,測試完整加上持續(xù)集成工具就可以達到項目自動構(gòu)建集成功能


    這是自己一些簡要的步驟,如大家有興趣我可以以后提供更為詳細的步驟!


    一些截圖

     




    參考資料     CruiseControl step by step 搭建你的持續(xù)集成服務(wù)器

    posted on 2008-01-03 11:51 harry520 閱讀(2153) 評論(3)  編輯  收藏 所屬分類: J2EE

    評論

    # re: 關(guān)于每日構(gòu)建|每小時構(gòu)建[未登錄] 2008-01-05 14:32 切爾斯基
    在瀏覽器中輸入 http://10.62.1.11:9001/dashboard/, 你會看到全新的CruiseControl的界面  回復(fù)  更多評論
      

    # re: 關(guān)于每日構(gòu)建|每小時構(gòu)建 2008-01-06 16:13 wuxj888java
    有一篇參考文章
    http://m.tkk7.com/chelsea/archive/2008/01/05/173004.html  回復(fù)  更多評論
      

    # re: 關(guān)于每日構(gòu)建|每小時構(gòu)建 2009-04-08 10:19 zyf
    寫的是蠻詳細的,但是能否再加上注釋???有些步驟看的不太明白呢  回復(fù)  更多評論
      

    主站蜘蛛池模板: 免费看又黄又无码的网站| 国产精品永久免费视频| 久久午夜夜伦鲁鲁片免费无码| 亚洲成年看片在线观看| 最近中文字幕大全免费视频| 中文亚洲AV片不卡在线观看| 欧洲亚洲国产精华液| 日本一道本高清免费| 亚洲av日韩av激情亚洲| 国产午夜精品免费一区二区三区| 亚洲精品你懂的在线观看| 国产美女视频免费观看的网站 | www.黄色免费网站| 亚洲人成色77777| 国产猛男猛女超爽免费视频| 久久精品国产亚洲香蕉| 91在线老王精品免费播放| 国产精品亚洲午夜一区二区三区| 免费高清av一区二区三区| 美女扒开尿口给男人爽免费视频 | 久久久免费观成人影院| 亚洲精品午夜无码专区| 9420免费高清在线视频| 亚洲国产最大av| 亚洲av无码成人精品区在线播放| 久久www免费人成看国产片| 亚洲av无码成h人动漫无遮挡 | 精品无码国产污污污免费网站 | 亚洲乱码国产一区三区| 久久国产乱子伦免费精品| 亚洲av午夜精品无码专区| 免费一级国产生活片| 久久久久国色av免费看| 亚洲色无码专区一区| 国产亚洲精品无码拍拍拍色欲| 亚洲午夜免费视频| 亚洲av无码专区青青草原| 亚洲成A∨人片在线观看不卡| 人禽杂交18禁网站免费| rh男男车车的车车免费网站 | 亚洲AV无码一区二区三区性色|