posts - 56, comments - 77, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          /*************************/

          "擁抱變化" 是敏捷的態(tài)度之一, CruiseControl 正是來實(shí)證這種態(tài)度的作品. 多種類型的"變化"都會(huì)觸發(fā)CruiseControl的一次構(gòu)建過程.

          我們知道CruiseControl能根據(jù)源代碼的變化來調(diào)度一次構(gòu)建, 但你知道CruiseControl支持多少種調(diào)度模式嗎?

          ---切爾斯基

          /*************************/


          1. 基于 "源代碼變化" 的調(diào)度 ( 3 種)

          這是 CruiseControl 最經(jīng)典的調(diào)度模式, 可以參見 <modificationset>

          • 一個(gè)小擴(kuò)展, 基于 "部分源代碼變化" 的調(diào)度, 參見<modificationset>的 "ignoreFiles" 屬性

          • 一個(gè)小擴(kuò)展, "不需要任何源代碼變化" 的調(diào)度, 參見<modificationset>的 "requiremodification" 屬性(Deprecated), 和


          2. 基于 "時(shí)間變化" 的調(diào)度 ( 6 種)

          這是另外一種常用的調(diào)度模式, 通常用于 Nightly Build. 但是 CruiseControl 并沒有從架構(gòu)級(jí)別上支持這種調(diào)度, 基于時(shí)間的調(diào)度被分散到各個(gè)插件中, 得自己去看文檔尋找

          以常用的幾種插件為例, 我們來看看CruiseControl支持的幾種基于 "時(shí)間變化" 的調(diào)度模式

          2.1 一天之內(nèi)的調(diào)度

          <schedule>

              <ant .../>

              <pause starttime="0200" endtime="0600"/>

          </schedule>

          • 每天的某個(gè)時(shí)間段之內(nèi)的時(shí)間來構(gòu)建, 參見<pause>插件, 如每天的凌晨2點(diǎn)至6點(diǎn)之間構(gòu)建:

          <schedule>

              <ant .../>

              <pause starttime="0000" endtime="0200"/>

              <pause starttime="0600" endtime="2359"/>

          </schedule>

          從這里我們可以看出CruiseControl缺少對(duì) <not> 的支持

          2.2 一周之內(nèi)的調(diào)度

          • 一周內(nèi)的每天都調(diào)度, 這是<ant>, <pause>等的缺省行為

          • 每周的某一天來構(gòu)建或不構(gòu)建, 參見<ant>, <

          這樣就有總共 3*2=6 種基于時(shí)間的調(diào)度


          3. 基于 "依賴變化" 的調(diào)度 ( 6 種)

          通常我們會(huì)將大的項(xiàng)目分成多個(gè)小項(xiàng)目來組織構(gòu)建, 這些小項(xiàng)目之間有依賴關(guān)系, 某個(gè)項(xiàng)目要等待另外一個(gè)成功之后再構(gòu)建才有意義, 比如說要用到其它project的構(gòu)建產(chǎn)物來作為輸入, 我們將這種情況稱之為Build Pipeline

          CruiseControl并沒有對(duì)項(xiàng)目之間的依賴, 或曰Build Pipeline提供顯式建模或支持, 只是有一些插件來局部支持

          /*************************/

          由于 <modificationset> 可以包含多個(gè)插件, 并且缺省是 OR 的關(guān)系, 所以你基本上可以正交的應(yīng)用前面提到的所有調(diào)度模式, 這樣你就能得到 3 * 6 * 6 = 108 種調(diào)度模式

          下面描述兩種令上述模式都失效的調(diào)度模式

          /*************************/


          4. 基于 "強(qiáng)制命令" 的調(diào)度

          • 固定時(shí)間間隔的構(gòu)建, 不管有沒有源代碼變化, 一種方式是前面提到的<alwaysbuild>插件

          • 按需構(gòu)建, 只有你通過UI或JMX顯式的來觸發(fā)構(gòu)建的時(shí)候才構(gòu)建, 一種方式是<forceonly>插件

          /*************************/

          在使用CruiseControl的過程中, 通常會(huì)遇到某些構(gòu)建比較耗時(shí), 或者檢查整個(gè)源代碼倉庫的時(shí)間過長等情況. 對(duì)此 CruiseControl 提供了一些優(yōu)化措施

          /*************************/


          5. 優(yōu)化調(diào)度

          • 每運(yùn)行另外的構(gòu)建一定次數(shù), 才運(yùn)行一次本構(gòu)建, 通常用于調(diào)度耗時(shí)較長的如 Clean Build 等, 參見

          <schedule interval="60">
              <ant target="masterbuild" />
              <ant target="cleanbuild" multiple="5"/>
          </schedule>

          <modificationset>
              <cvs localworkingcopy="/home/project">
              <timebuild username="you_guys_are_not_agile" time="2300"/>
          </modificationset>

          • 先進(jìn)行耗時(shí)耗資源少的檢查, 有變化后再全面檢查取得所有變化, 參見<compound>插件

          • 同時(shí)運(yùn)行多個(gè)構(gòu)建, 參見<threads>插件

          缺少的那一塊

          • CruiseControl用<ant>等Builder來做

          • CruiseControl缺乏對(duì)project之間依賴關(guān)系, 或Build Pipeline的支持

          • CruiseControl的插件容器基本上是 OR 的關(guān)系, 缺乏對(duì)邏輯關(guān)系的顯式建模, 應(yīng)該提供 AND, NOT 等關(guān)系, 這樣我們就能組合應(yīng)用已有的插件. CruiseControl的現(xiàn)狀是分別提供了<compound>, <composite>, <compoundpublisher>等插件

          • CruiseControl已經(jīng)提供了

          參考

          此文獻(xiàn)給小丸子



          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邵阳县| 长武县| 于田县| 高尔夫| 盐津县| 乌苏市| 富川| 西丰县| 大埔区| 新田县| 固镇县| 神木县| 兴安盟| 台南县| 菏泽市| 临邑县| 普兰县| 高清| 青岛市| 泰安市| 涪陵区| 习水县| 高台县| 山丹县| 仁布县| 泰和县| 十堰市| 荔浦县| 信宜市| 宿州市| 陈巴尔虎旗| 遂溪县| 宁安市| 桃园县| 仪陇县| 彩票| 衡阳市| 江都市| 西乡县| 塘沽区| 乌兰浩特市|