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

          CruiseControl 的 108 種調度模式

          Posted on 2008-01-05 18:29 切爾斯基 閱讀(2722) 評論(0)  編輯  收藏

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

          "擁抱變化" 是敏捷的態度之一, CruiseControl 正是來實證這種態度的作品. 多種類型的"變化"都會觸發CruiseControl的一次構建過程.

          我們知道CruiseControl能根據源代碼的變化來調度一次構建, 但你知道CruiseControl支持多少種調度模式嗎?

          ---切爾斯基

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


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

          這是 CruiseControl 最經典的調度模式, 可以參見 <modificationset>

          • 一個小擴展, 基于 "部分源代碼變化" 的調度, 參見<modificationset>的 "ignoreFiles" 屬性

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


          2. 基于 "時間變化" 的調度 ( 6 種)

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

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

          2.1 一天之內的調度

          <schedule>

              <ant .../>

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

          </schedule>

          • 每天的某個時間段之內的時間來構建, 參見<pause>插件, 如每天的凌晨2點至6點之間構建:

          <schedule>

              <ant .../>

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

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

          </schedule>

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

          2.2 一周之內的調度

          • 一周內的每天都調度, 這是<ant>, <pause>等的缺省行為

          • 每周的某一天來構建或不構建, 參見<ant>, <

          這樣就有總共 3*2=6 種基于時間的調度


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

          通常我們會將大的項目分成多個小項目來組織構建, 這些小項目之間有依賴關系, 某個項目要等待另外一個成功之后再構建才有意義, 比如說要用到其它project的構建產物來作為輸入, 我們將這種情況稱之為Build Pipeline

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

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

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

          下面描述兩種令上述模式都失效的調度模式

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


          4. 基于 "強制命令" 的調度

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

          • 按需構建, 只有你通過UI或JMX顯式的來觸發構建的時候才構建, 一種方式是<forceonly>插件

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

          在使用CruiseControl的過程中, 通常會遇到某些構建比較耗時, 或者檢查整個源代碼倉庫的時間過長等情況. 對此 CruiseControl 提供了一些優化措施

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


          5. 優化調度

          • 每運行另外的構建一定次數, 才運行一次本構建, 通常用于調度耗時較長的如 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>

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

          • 同時運行多個構建, 參見<threads>插件

          缺少的那一塊

          • CruiseControl用<ant>等Builder來做

          • CruiseControl缺乏對project之間依賴關系, 或Build Pipeline的支持

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

          • CruiseControl已經提供了

          參考

          此文獻給小丸子



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


          網站導航:
           
          主站蜘蛛池模板: 峡江县| 浑源县| 肇东市| 上饶市| 宽城| 星子县| 瑞昌市| 淮南市| 德安县| 上高县| 长兴县| 阜新市| 斗六市| 鹤庆县| 鹤山市| 崇仁县| 辽阳市| 华池县| 泗水县| 涿州市| 开远市| 桐城市| 姚安县| 乐清市| 宣武区| 巢湖市| 连南| 永康市| 商丘市| 紫云| 隆尧县| 灌南县| 普宁市| 沅陵县| 姚安县| 丰顺县| 永福县| 左贡县| 类乌齐县| 苏尼特右旗| 会同县|