wml

          CruiseControl 配置

          CruiseControl 的概念和好處,我就不在復訴,下面是我的配置環境與配置文件。

          配置環境:

          CruiseControl : cruisecontrol-bin-2.7.zip

          Apache-Ant : 1.7.0

          Junit : 4.0

          JRE : 5.0_12

          Eclipse :

          在此環境中,要保持Ant與Junit的版本協調,最初使用Cruisecontrol-2.7隨包發布的apache-ant-1.6.5進行單元測試時,會報 No tests found in .... ,Ant1.7是支持JUnit4的,所以將Ant升級為1.7.0的版本,問題解決。

          1、設置環境變量

               由于使用ZIP的版本,所以需要設置 JAVA_HOME 的路徑。注意由ANT的版本已升級為1.7.0,所以在config.xm中應該指定ant_home的路徑。

          2、CruiseControl 的config.xml

           

           1<?xml version='1.0' encoding='gb2312'?>
           2<cruisecontrol>
           3    <project name="projectName">
           4
           5        <!-- 用于處理一些項目有關的事件 -->
           6        <listeners>
           7            <!-- 用來訪問項目當前創建的狀態   file: 指定了狀態文件的位置 -->
           8            <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
           9        </listeners>
          10        
          11        <!-- 在 CC 進行創建之前運行,是創建前的準備工作 -->
          12        <bootstrappers>
          13            <!-- 從源碼控制系統更新本地文件: cvsbootstrappers、vssbootstrappers、svnbootstrapper -->
          14            <svnbootstrapper localWorkingCopy="projects/${project.name}" />
          15        </bootstrappers>
          16
          17        <!-- 檢查各個源碼控制系統中是否發生變化;quietperiod: 單位為秒 設定等待的時間 -->
          18        <!-- 第一次的取出工作為手動執行 -->
          19        <modificationset quietperiod="600">
          20            <svn localWorkingCopy="projects/${project.name}"/>
          21        </modificationset>
          22
          23        <!-- 指定了構建的時間間隔 單位為秒-->
          24        <schedule interval="60">
          25            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
          26        </schedule>
          27        
          28        <!-- 指定項目日志保存的地點 -->
          29        <log>
          30            <!-- 通常是指定 CC 的合并日志的目錄 -->
          31            <merge dir="projects/${project.name}/test-reports"/>
          32        </log>
          33        
          34        <!-- 在 build loop 結束之后運行,發布 build 的結果 -->
          35        <publishers>
          36            <!--onsuccess-->
          37                <!--用于對創建過程中產生的人工制品進行發布-->
          38                <!--artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
          39            </onsuccess-->
          40
          41            <!--
          42                mailhost=郵件主機
          43                returnname=發件人
          44                returnaddress=發件地址
                                 defaultsuffix=默認郵件后綴
          45            -->
          46            <htmlemail
          47                charset="UTF-8"
          48                mailhost="smtp.163.com" 
          49                defaultsuffix="@xxx.com"
          50                username="xxx@163.com"
          51                password="xxx"
          52                returnname="CruiseControl"
          53                returnaddress="xxx@163.com"
          54                subjectprefix="構建日志"
          55                xsldir="webapps/cruisecontrol/xsl"
          56                css="webapps/cruisecontrol/css/cruisecontrol.css">
          57                <always address="xxx@xxx.com.cn"/>
          58                <failure address="xxx@xxx,yyy@yyy.com.cn"/>
          59                
          60            </htmlemail>
          61
          62        </publishers>
          63
          64    </project>
          65</cruisecontrol>


          2、build.xml的特性文件

           1
           2projcet.path=xxx
           3
           4projcet.name=xxx
           5
           6catalina.home=xxx
           7
           8catalina.port=xxx
           9
          10catalina.username=xxx
          11
          12catalina.password=xxx


          3、工程的build.xml

           

            1<?xml version="1.0" encoding="UTF-8" ?>
            2
            3<!-- Continuous Integration 工程名稱 Gms 默認任務 CI -->
            4<project default="CI" name="xxx" basedir=".">
            5
            6    
            7    <!-- 特性文件 在特性文件中 注意路徑的正反斜杠問題 -->
            8    <property file="build.properties"/>
            9    
           10    <!-- ================================ 工程參數 ================================ -->
           11    
           12    <!-- 工程中文名稱 -->
           13    <property name="projectName_CN" value="xxx"/>
           14    <!-- 工程目錄 -->
           15    <property name="projectFolder" value="${projcet.path}/${projcet.name}"/>
           16    
           17    <!-- 源程序目錄 -->
           18    <property name="sourceFolder" value="${projectFolder}/src/main/java"/>
           19    <!-- 配置文件目錄 -->
           20    <property name="configFolder" value="${projectFolder}/src/main/config"/>
           21    <!-- 測試程序目錄 -->
           22    <property name="testFolder" value="${projectFolder}/src/test/java"/>
           23    <!-- lib目錄 -->
           24    <property name="libFolder" value="${projectFolder}/WebRoot/WEB-INF/lib"/>
           25    <!-- 編譯程序目錄 -->
           26    <property name="classFolder" value="${projectFolder}/WebRoot/WEB-INF/classes"/>
           27
           28    <!-- 單元測試報告目錄 -->
           29    <property name="reportFolder" value="${projectFolder}/test-reports"/>
           30    <!-- 單元測試報告文件名 -->
           31    <property name="reportFileName" value="junit-noframes.html"/>
           32    
           33    <!-- ================================ 發布設置 ================================ -->
           34    
           35    <!-- 生成war文件 -->
           36    <property name="warFile" value="${projectFolder}/${projcet.name}.war"/>
           37    <!-- web.xml文件 -->
           38    <property name="webFile" value="${projectFolder}/WebRoot/WEB-INF/web.xml"/>
           39    <!-- 生成war文件的基礎路徑 -->
           40    <property name="warSource" value="${projectFolder}/target/classes"/>
           41
           42    <!-- ================================ 路徑設置 ================================ -->
           43    
           44    <!-- 編譯過程中用到的路徑 -->
           45    <path id="compilePath">
           46        <!-- 編譯程序目錄 -->
           47        <pathelement path="${classFolder}" />
           48        <!-- 編譯時lib路徑 -->
           49        <path refid="libPath" />
           50    </path>
           51
           52    <!-- 單元測試時用到的路徑 -->
           53    <path id="jUnitPath">
           54        <!-- 編譯程序目錄 -->
           55        <pathelement path="${classFolder}" />
           56        <!-- 編譯時lib路徑 -->
           57        <path refid="libPath" />
           58    </path>
           59
           60    <!-- 編譯時lib路徑 -->
           61    <path id="libPath">
           62        <!-- lib目錄 -->
           63        <fileset dir="${libFolder}">
           64            <include name="**/*.jar" />
           65        </fileset>
           66    </path>
           67    
           68    <!-- ================================ 持續集成 ================================ -->
           69    
           70    <!-- 集成流程 暫時沒有加入 Test -->
           71    <target name="CI" depends="init,compile,test,makewar,deploy-catalina" description="持續集成"/>
           72
           73    <!-- 1.初始化目標目錄, class ; report -->
           74    <target name="init" description="初始化">
           75        
           76        <echo>正在刪除編譯程序目錄</echo>
           77        <delete dir="${classFolder}" />
           78        <echo>正在創建編譯程序目錄</echo>
           79        <mkdir dir="${classFolder}" />
           80        
           81        <echo>正在刪除單元測試報告目錄</echo>
           82        <delete dir="${reportFolder}" />
           83        <echo>正在創建單元測試報告目錄</echo>
           84        <mkdir dir="${reportFolder}" />
           85    </target>
           86
           87    <!-- 2.編譯程序生成目標類 -->
           88    <target name="compile" depends="init" description="編譯">
           89        <echo>編譯源程序</echo>
           90        <!-- classpathref="編譯路徑" destdir="${編譯程序目錄}" -->
           91        <javac classpathref="compilePath" fork="true" memorymaximumsize="128m"
           92               destdir="${classFolder}" debug="true" deprecation="false"
           93               failonerror="false" verbose="false">
           94            <!-- 源程序目錄 -->
           95            <src path="${sourceFolder}" />
           96            <!-- 測試程序目錄 -->
           97            <src path="${testFolder}" />
           98            <!-- 配置文件目錄 -->
           99            <src path="${configFolder}" />
          100            
          101            <include name="**/*.java" />
          102        </javac>
          103        <copy todir="${classFolder}">
          104            <fileset dir="${configFolder}">
          105                <include name="**/*.*"/>
          106            </fileset>
          107            <fileset dir="${sourceFolder}">
          108                <include name="**/*.xml"/>
          109            </fileset>
          110        </copy>
          111    </target>
          112
          113    <!-- 3.運行JUnit測試 -->
          114    <target name="test" description="執行單元測試">
          115        <echo>運行單元測試用例</echo>
          116        <!-- haltonfailure="true" 出現fail即終止build -->
          117        <junit printsummary="true">
          118            <classpath refid="jUnitPath" />
          119            <!-- 指定測試結果類型 -->
          120            <formatter type="xml"/>
          121            <!-- 批量測試集 todir="${reportFolder}" 單元測試報告目錄 -->
          122            <batchtest todir="${reportFolder}">
          123                <!-- dir="${classFolder}" 編譯程序目錄 -->
          124                <fileset dir="${classFolder}">
          125                    <!-- 包含 -->
          126                    <include name="**/*Test.class"/>
          127                </fileset>
          128            </batchtest>
          129        </junit>
          130        
          131        <echo>生成單元測試報告</echo>
          132        <!-- XSLT格式化XML,生成HTML的報告 todir="${reportFolder}" 單元測試報告目錄 -->
          133        <junitreport todir="${reportFolder}" description="生成單元測試報告">
          134            <fileset dir="${reportFolder}">
          135                <!-- formatter生成報告文件的默認命名規范是TEST-*.xml -->
          136                <include name="TEST-*.xml" />
          137            </fileset>
          138            <!-- format="frames" 生成有框架 noframes 無框架-->
          139            <report format="frames" todir="${reportFolder}" />
          140        </junitreport>
          141    </target>
          142
          143    <!-- 4.打包成war文件 -->
          144    <target name="makewar" depends="" description="發布WAR文件">
          145        <echo>打包成war文件</echo>
          146        <war destfile="${warFile}" webxml="${webFile}">
          147            <!-- 添加web文件,過濾web.xml與測試類 -->
          148            <fileset dir="${projectFolder}/WebRoot" excludes="WEB-INF/web.xml,WEB-INF/classes/**/*Test.class"/>
          149        </war>     
          150    </target>
          151    
          152    <!-- ================================ 依賴TOMCAT管理部署 ================================ -->
          153    
          154    <!--5.部署 此種部署方式有時會導致內存溢出 -->
          155    <target name="deploy-catalina" depends="remove-local-catalina,deploy-local-catalina" description="部署到TOMCAT服務器">
          156        
          157    </target>
          158    
          159    <!-- 執行remove-local-catalina任務后,在應用中有幾個jar文件無法刪除 
          160         解決辦法是在 MEAT-INF目錄下 創建context.xml 內容為:
          161         <?xml version="1.0" encoding="UTF-8"?>
          162         <Context reloadable="true" antiResourceLocking="true"/>
          163    -->
          164    <target name="remove-local-catalina" depends="" description="刪除TOMCAT上部署的應用">
          165        <!--fail unless="env.CATALINA_HOME" message="Tomcat6 Not Found"/-->
          166        <property name="deploy.local.remove.url" value="http://localhost:${catalina.port}/manager/remove"/>
          167        <!-- src="${deploy.local.remove.url}?path=/${projcet.name}" 這個URL是刪除命令 -->
          168        <get dest="deploy-local-remove.txt" 
          169             src="${deploy.local.remove.url}?path=/${projcet.name}"
          170             username="${catalina.username}"
          171             password="${catalina.password}"/>
          172        <loadfile property="deploy.local.remove.result"
          173                  srcfile="deploy-local-remove.txt"/>
          174        <echo>${deploy.local.remove.result}</echo>
          175    </target>
          176    
          177    <target name="deploy-local-catalina" depends="" description="部署應用到TOMCAT">
          178        <property name="deploy.local.urlpath" value="file:///${warFile}"/>
          179        <property name="deploy.local.url.params" value="path=/${projcet.name}&amp;war=${deploy.local.urlpath}"/>
          180        <property name="deploy.local.url" value="http://localhost:${catalina.port}/manager/install"/>
          181        <get src="${deploy.local.url}?${deploy.local.url.params}" 
          182             dest="deploy-local.txt" 
          183             username="${catalina.username}"
          184             password="${catalina.password}"/>
          185        
          186        <loadfile property="deploy.local.result"
          187                  srcfile="deploy-local.txt"/>
          188        <echo>${deploy.local.result}</echo>
          189    </target>
          190    
          191    <!-- ================================ 拷貝部署:Tomcat啟動后,處于運行狀態,Ant始終無法獲得返回狀態 ================================ -->
          192    
          193    <target name="deploy-tomcat" depends="stop-tomcat,copy-tomcat,start-tomcat" description="拷貝方式部署到TOMCAT服務器"/>
          194    
          195    <target name="stop-tomcat" description="調用批處理停止TOMCAT">
          196        <exec dir="${catalina.home}/bin" 
          197              executable="${catalina.home}/bin/shutdown.bat" 
          198              os="Windows 2003, Windows XP, Windows 2000, Windows NT" > 
          199              <arg line="-S" /> 
          200        </exec>
          201        <sleep seconds="5" description="Tomcat關閉后,等待使用文件的釋放"/>
          202        <delete dir="${catalina.home}/webapps/${projcet.name}" description="刪除應用目錄"/>
          203    </target>
          204    
          205    <target name="start-tomcat" description="調用批處理啟動TOMCAT">
          206        <exec dir="${catalina.home}/bin" resolveexecutable="true"
          207              executable="cmd" 
          208              os="Windows 2003, Windows XP, Windows 2000, Windows NT" > 
          209            <arg value="/C startup.bat"/>
          210        </exec> 
          211    </target>
          212
          213    <target name="copy-tomcat" description="部署WAR到TOMCAT">
          214        <copy todir="${catalina.home}/webapps" file="${warFile}"/>
          215    </target>
          216
          217    <!-- ================================ Tomcat擴展Ant部署 ================================ -->
          218    
          219    <target name="deploy" depends="remove-local-catalina,copy-tomcat,start" description="拷貝方式部署到TOMCAT服務器"/>
          220    
          221    <!-- 定義ant擴展的classpath -->
          222    <path id="catalina.ant" location="${catalina.home}/lib/catalina-ant.jar"/>
          223    
          224    <!-- 擴展 start 標簽 -->
          225    <taskdef name="start" classname="org.apache.catalina.ant.StartTask" classpathref="catalina.ant"/>
          226    <!-- 擴展 stop 標簽 -->
          227    <taskdef name="stop" classname="org.apache.catalina.ant.StopTask" classpathref="catalina.ant"/>
          228
          229    <target name="start" description="Start Tomcat application">
          230        <start url="http://localhost:${catalina.port}/manager/" username="${catalina.username}" password="${catalina.password}" path="/${projcet.name}" />
          231    </target>
          232
          233    <target name="stop" description="Stop Tomcat application">
          234        <stop url="http://localhost:${catalina.port}/manager/" username="${catalina.username}" password="${catalina.password}" path="/${projcet.name}" />
          235    </target>
          236    
          237</project>


          此構建文件需要優化,在部署時仍存在各種問題,不夠完善。

          posted on 2007-06-06 17:26 wml 閱讀(4552) 評論(10)  編輯  收藏 所屬分類: CruiseControl

          評論

          # re: CruiseControl 簡單配置 2007-06-21 10:05 spt

          是否可以與我交流一下,我QQ30266191需要你的幫助,我正在搭建CruiseControl2.7謝謝  回復  更多評論   

          # re: CruiseControl 簡單配置 2007-06-25 13:35 wml

          @spt

          不好意思,幾天沒上來,不知你的問題解決沒有,我的公司不方便用QQ溝通,CC的配置文件,與BUILD.XML我更新了一下,看能否對你有幫助,仍有問題可留下你的EMAIL  回復  更多評論   

          # re: CruiseControl 配置[未登錄] 2007-07-19 09:36 豆子

          你好,我在配置cruisecontrol時,老是出現如下
          警告:編碼GBK的不可映射字符
          我統一使用的是UTF-8的編碼格式,不明白為什么還會出現這種錯誤  回復  更多評論   

          # re: CruiseControl 配置 2007-08-15 15:54 lady-killer

          請教:
          我的config.xml文件和你的配置一樣,但運行時總是告訴我update命令錯誤。
          我現在最不清楚的地方,就是CC如何能夠從CVS上拿到最新的版本到指定目錄,多謝指教。  回復  更多評論   

          # re: CruiseControl 配置 2007-09-12 15:16 QIU

          您好,我最近也在搭建CC,但是在發郵件的時候,能不能在發郵件的時候設置那些人更新文件沒有成功,就給他發一封郵件呢??  回復  更多評論   

          # re: CruiseControl 配置[未登錄] 2007-10-11 10:25 wml

          @lady-killer

          在你的CC服務期環境中,是否配置了CVS的環境變量呢?我使用的是SUBVERSION,安裝后會自動配置環境變量.你可嘗試著,配置下環境變量  回復  更多評論   

          # re: CruiseControl 配置 2008-08-23 09:00 小陳同學

          Hi! 大哥哥. 我打開頁面. 出現這種錯誤. 可以指定下我么?
          http://localhost:8180/cruisecontrol/?auto_refresh=true

          Context parameter logDir needs to be set to a directory. Currently set to "logs"

          degui.chen@qq.com  回復  更多評論   

          # re: CruiseControl 配置 2009-01-20 13:57 lennoli

          難題求助高手:“SVN+Cruisecontrol”環境下,系統無法發送郵件
          情況描述:

          1.在公司的內部局域網上使用“SVN+CruiseControl”來進行版本的控制和Delay Build工作。
          2.要求在發現build失敗后可以將相關的失敗郵件發送給提交該部分代碼的開發人員。
          3.公司域內的項目組成員的SVN帳戶全部放在了authz文件中,格式為:domain\username
          4.公司域內成員的郵件系統采用MS-OuLook. 成員的郵件地址格式為:“username@domain.com”
          5.在“CruiseControl”配置已經完成,如果將郵件地址寫死,則整個發送郵件的工作完全正常
          6.在“CruiseControl”配置中和自動動態派發郵件的配置項只有一個:defaultSuffix="@domain.com".
          7.現在的出現的情況是:當build失敗后,系統無法自動的將build失敗的郵件發送給當事人。查看log后得到相關信息:
          無效的郵件地址:“domain\username+@domain.com”。(假設domain為:soft,用戶為:bond)
          ----> 即得到了這樣的一個郵件地址: soft\bond@soft.com
          8.很顯然,CruiseControl是通過拼字符串的方式來得到郵件地址的(但是這樣得到的郵件地址明顯錯誤)
          9.其中“soft\bond”部分來源于SVN,后面的“@soft.com”來源于CruiseControl自身的配置項。
          10.我試著修改SVN中用戶帳戶的格式,不要域信息。修改完畢后發現帳戶無法訪問SVN了。查閱相關資料后得知:SVN在域內使用的時候,域內用戶的帳戶必須遵循“domain\username”的格式。
            回復  更多評論   

          # re: CruiseControl 配置 2009-02-12 17:55 liyq

          Hi!你好,我在配置完cruisecontrol打開頁面
          http://127.0.0.0:8080/cruisecontrol/?auto_refresh=true

          出現提示:

          Context parameter logDir needs to be set to a directory. Currently set to "logs"

          happylixia169@hotmail.com  回復  更多評論   

          # re: CruiseControl 配置[未登錄] 2014-08-20 09:31 smile

          CC設置的自動執行project的時間,為什么一段時間后總是停止不動呢,點擊build也沒有反應。  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 定州市| 西平县| 祁门县| 渝中区| 镇原县| 南郑县| 民县| 格尔木市| 滕州市| 沾益县| 章丘市| 江陵县| 西昌市| 香港| 成都市| 布拖县| 大方县| 黄平县| 绥阳县| 万年县| 陈巴尔虎旗| 栖霞市| 大石桥市| 石楼县| 汽车| 泸溪县| 柘荣县| 临西县| 五莲县| 石楼县| 夏邑县| 乌鲁木齐市| 环江| 凤山县| 临城县| 信阳市| 隆昌县| 天水市| 永吉县| 罗山县| 福鼎市|