[CruiseControl]在Linux上的配置執行個體

來源:互聯網
上載者:User

轉自:http://www.blogjava.net/lihao336/archive/2010/06/29/324822.html

 

CruiseControl配置說明

CruiseControl是一個持續整合工具,持續整合是一個很好的敏捷實踐。在項目中搭建CruiseControl環境,通過執行頻繁的項目構建,及時暴露出隱藏的Bug,從而減少定位以及修改Bug的時間和代價。本文介紹了配置CruiseControl的步驟。配置環境為Ubuntu 9.10,CruiseControl 2.8.3 Binary,版本管理工具為SVN。

一.準備工作

1.配置Java環境

calvin@calvin-desktop:~$ sudo gedit /etc/profile

在檔案末尾添加Java環境變數:

#set java environment

export JAVA_HOME=/home/calvin/development/jdk

export JRE_HOME=/home/calvin/development/jdk/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

登出再登入生效。

2.解壓CruiseControl

解壓到CruiseControl-2.8.3-bin.zip 到/home/calvin/development/cruisecontrol/cruisecontrol-bin-2.8.3中,其中三個值得注意的目錄是:

目錄         內容

projects        存放CruiseControl從原始碼倉庫中檢出的代碼。

logs             存放構建報告和日誌。

artifacts        存放構建成功後產生的輸出檔案(如jar包,apk包等)。

3.從SVN倉庫中checkout出源碼

CruiseControl第一次不支援自動檢出代碼,所以在構建項目之前要先把項目代碼手工checkout到本地。本文假設項目名為sampleproject,SVN原始碼倉庫位於/home/calvin/development/cruisecontrol/DemoSystem/repositoryserver/svnrepository中。

  • 安裝subversion用戶端

calvin@calvin-desktop:~$ sudo apt-get install subversion

  • 在project目錄下建立sampleproject檔案夾,用來存放準備build的工程。

calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3/projects$ mkdir sampleproject

calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3/projects$ svn checkout file:////home/calvin/development/cruisecontrol/DemoSystem/repositoryserver/svnrepository sampleproject

二.配置config.xml

cruisecontrol根據config.xml中配置的項目資訊執行構建。

<cruisecontrol>
    <!-- 這裡的name應該和projects目錄下的項目名一致 -->
    <project name="sampleproject">
        <!--監聽項目狀態的變化 -->
        <listeners> 
            <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
        </listeners>

        <!-- build之前從svn伺服器上更新本地代碼 -->
        <bootstrappers>
            <svnbootstrapper localWorkingCopy="projects/${project.name}/trunk" />
        </bootstrappers>

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

        <!-- 設定每隔interval秒,CruiseControl去檢查並執行一次構建 -->
        <schedule interval="60">
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/trunk/build.xml" target="all"/>
        </schedule>

        <!-- 發布構建結果 -->
        <publishers>
            <onsuccess>
                <!-- 將構建的結果(如jar包,apk包等)發布到指定的位置 -->
                <artifactspublisher dir="projects/${project.name}/trunk/dist"
                    dest="../logs/SampleCCProject" />
            </onsuccess>

            <!--htmlemail buildresultsurl="http://211.94.155.199:8080/cruisecontrol/buildresults/mobiletv  mailhost="localhost" returnname="CruiseControl result" returnaddress="localhost@localhost"-->
                <!--failure address="caojie@cienet.com.cn" />
                <success address="${mail.address.mobiletv" />
            </htmlemail>

            <htmlemail>
                <success address="${mail.address.mobiletv}"/>
                <failure address="caojie@cienet.com.cn"/>
            </htmlemail>-->            

            <email mailhost="smtp.263xmail.com"
                   returnaddress="calvinlee@cienet.com.cn"
                   skipusers="true"
                  reportsuccess="fixes"
                  subjectprefix="[CruiseControl]"
                  buildresultsurl="http://buildserver:8080/cruisecontrol/buildresults">
                  <failure address="calvinlee@cienet.com.cn" />
                  <success address="calvinlee@cienet.com.cn" />
            </email>
        </publishers>
    </project>
</cruisecontrol>

 

 

三.配置cruisecontrol.sh

cruisecontrol.sh是cruisecontrol的啟動指令碼,通過這個指令碼中初始化一些環境變數,開始執行build loop,並開啟jetty伺服器。

開啟cruisecontrol.sh,在檔案末尾找到

$JAVA_HOME/bin/java $CC_OPTS -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder "-Dcc.library.dir=$LIBDIR" "-Djetty.logs=$JETTY_LOGS" -jar "$LAUNCHER" $@ -jmxport 8000 -webport 8080 -rmiport 1099 &

去掉 & 符號,這樣啟動cruisecontrol時,阻止將其放到後台執行,要關閉cruisecontrol時,按下 Ctrl+C 即可。

修改-jmxport、-webport、-rmiport等參數可以自訂項目構建結果的發布連接埠。

PS:

如果項目的log檔案比較大,或者構建時使用記憶體較多,可以在cruisecontrol.sh中增加JAVA命令列參數,擴大JVM的記憶體,以免出現OutOfMemory錯誤:

CC_OPTS="-Xms128m -Xmx256m"

四.配置dashboard-config.xml

dashboard用來顯示cruisecontrol管理的所有項目的構建狀態資訊。

dashboard-config.xml用來配置dashboard的顯示,其中,配置<features allowforcebuild="true"/>,那麼在每個項目的右側有一個按鈕,單擊該按鈕將強迫該項目進行構建,而不必等到其下一次檢查,也不必等到它有版本變化。

 

 <dashboard>
  <buildloop   logsdir="" artifactsdir="" />
  <features allowforcebuild="true"/>
  <trackingtool projectname="" baseurl="" keywords=""/>
  <subtabs>
   <subtab class="net.sourceforge.cruisecontrol.dashboard.widgets.ErrorsAndWarningsMessagesWidget" />
  </subtabs>
 </dashboard>

 

 

五.運行cruisecontrol

1.給cruisecontrol.sh 添加執行許可權

calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3$ sudo chmod +x cruisecontrol.sh

2.運行 cruisecontrol.sh 指令碼

calvin@calvin-desktop:~/development/cruisecontrol/cruisecontrol-bin-2.8.3$ ./cruisecontrol.sh

六.查看項目構建結果

1.通過http://localhost:8080/dashboard/ 訪問項目構建結果。

其中,項目有三種狀態:

Discontinued:表示CruiseControl可以找到該項目的記錄檔,但在config.xml中並沒有配置該項目,這種情況下CruiseControl不會去構建它。

Inactive:表示在config.xml中配置了該項目,但是沒有發現關於這個項目的Log資訊,即在CruiseControl的日誌目錄中還沒有該項目的記錄檔,或記錄檔被人為刪除了。CruiseControl會根據配置資訊對這個項目進行檢查新版本並進行構建。

Active:表示CruiseControl即可以找到該項目的記錄檔,又在config.xml中可以發現它。此時,這個項目可能是構建成功,也可能是構建失敗,還可能是構建中。

2.通過http://localhost:8080/cruisecontrol/ 查看項目構建計劃

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.