John Jiang

          a cup of Java, cheers!
          https://github.com/johnshajiang/blog

             :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
            131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
          Continuum入門--實例
              本文雖然是Continuum的入門,但并不涉及Continuum的歷史、下載與安裝,這些內容可以到 Continuum的官方網站 (http://maven.apache.org/continuum/) 上了解。本文主要是以一個實例來闡述使用 Continuum的基本方法,而其中將使用的Maven工程是《Maven入門--概念與實例》中的實例(該文末有下載鏈接)。
          注:轉載時請注明原作者(jiangshachina)及出處(http://www.aygfsteel.com/jiangshachina)!

          1 使用持續集成的好處
          1.1 較早提交,經常提交
              當開發者有規律性地提交文件時,持續集成將是最高效的。這就是意味著,不能提交不完全的代碼,而是保持每次的改動不大,并且有很好的測試。這就可以更好地發現代碼中的錯誤。
          1.2 盡可能頻繁的構建
              頻繁的Build可能要受到需要進行Build的工作量,以及進行Build工作的機器的性能的影響。但頻繁的Build確實可以在開發人員轉移注意力之前,盡可能早的發現錯誤。任何時候,任何一個提交的發生,Continuum都可以觸發一個Build工作。這就意味著,這些Build工作應該更快,對于大量的Build工作或性能測試
          1.3 創建一個穩定的環境
              如果該Build不是其它開發,測試或產品環境中的一員,那么就可以避免定制JDK或其它的本地設置。如果在持續集成環境中,一個Build工作失敗了,它會被從引起它的原因的修改中隔離出來,可以獨立于運行環境來被使用。
          1.4 運行干凈的構建
              快速、重復地構建是十分有用的,同樣重要的是,不會由于舊的Build狀態而發生失敗的Build工作。有規律的考慮問題,就能得到干凈的構建。Continuum默認就是進行干凈的Build工作,未來它還可以允許開發者根據所選的時間表去請求一個初始的checkout。
          2 實例
          2.1 構想
              本實例中需要持續集成的Maven工程是《Maven入門--概念與實例》中的Demo。使用的SCM是Subversion,即假定已經安裝好了Subversion服務器和命令行客戶端。我們的目標是使用Continuum對Maven工程demo(包括它的子工程)進行定時的持續集成。在本文的環境中有如下路徑:
              Continuum_Home=D:\continuum
              SVN_Repoitory=E:\svn-repo\repository
              Maven_Demo=D:\maven\demo
              Continuum_Maven=D:\maven\continuum
            // 該目錄存放從Subversion下載的Maven Demo工程
          2.2 初始化Subversion倉庫
              生成倉庫:svnadmin create SVN_Repository
              將Maven_Demo中的文件導入到倉庫:
                  svn import Maven_Demo file:///SVN_Repoitory/demo -m "initial import demo"
              重新下載倉庫中的文件(在目錄Continuum_Maven中運行如下命令):
                  svn checkout file:///SVN_Repoitory/demo demo
          2.3 啟動Continuum
              假設此時已經安裝了Continuum,但還沒有運行它。要運行Continuum,可以雙擊Continuum_Home\bin\win32\run.bat文件。對于第一次運行,會報一些錯誤:
          ……
          WARN  RDBMS - Error initialising derby schema : Schema 'SA' does not exist
          ERROR 42Y07: Schema 'SA' does not exist
          ……
          這種情況是正常的,因為Continuum后臺使用的是Apache Derby數據庫,在第一次運行之前,Continuum所需要的一些表和數據并不存在。但Continuum會初始化這些數據,當第2次啟動Continuum時,這些錯誤就不會出現了。
              Continuum服務器默認使用8080端口,如果之前該端口已被占用了,那么啟動將失敗。為了解決這個問題,我們需要修改jar文件Continuum_Home\apps\continuum-plexus-application-1.0.3.jar中的\conf\application.xml文件。在該文件中查找8080(該值是唯一的),將改它為你所指定的端口值,本文是使用8081。經過上述過程后,Continuum服務器應該就可以正常啟動了。下面將討論Continuum的初始化配置。
          2.4 初始化配置
              在瀏覽器中使用地址http://localhost:8081/continuum登錄Continuum控制臺界面,如下圖所示。
          Continuum01.gif
          第一次登錄Continuum后,需要進行一些配置。主要包括用戶名/密碼,工作區目錄,Build輸出目錄以及公司信息。主要參數值如下所示:
              Working Directory=D:\continuum\workspace 
              Build Output Directory=D:\continuum\workspace\output
              Base URL=http://localhost:8081/continuum/servlet/continuum
              // 這里的Company信息就借用此Blog站點的信息吧 *_*
              Company Name=BlogJava
              Company Logo=http://www.aygfsteel.com/images/logo.gif
              Company URL=http://www.aygfsteel.com/
           
          提交之后會出現如下畫面(能夠看到BlogJava的logo嗎 *_*)
          Continuum02.gif
          使用初始配置時設置的用戶名及密碼,就可以登錄Continuum控制臺了。
          2.5 修改POM文件
              在目錄Continuum_Maven中執行如下命令,將Maven工程demo重新下載一次
                  svn checkout file:///SVN_Repository/demo demo
          為了能被Continuum使用,且能與Subversion進行配合,需要對原來Maven工程中的POM文件進行修改。在每個POM中加入如下形式的語句:
          <project>
            ……
            
          <ciManagement>
                
          <system>Continuum</system>
                
          <url>http://localhost:8081/continuum/servlet/continuum</url>
              
          <notifiers>
                  
          <notifier>
                    
          <type>mail</type>
                  
          <address>jiangshachina@163.com</address>
                
          </notifier>
              
          </notifiers>
            
          </ciManagement>
             
            
          <scm>
              
          <connection>scm:svn:file://localhost/SVN_Repository/ProjectName</connection>
            
          </scm>
            ……
          </project>
          其中ProjectName要與POM當前所在工程名一致,如對于demo目錄中的POM,ProjectName就是demo。這三個文件修改完畢之后,將它們都提交到Subversion服務器中,在各個POM的當前目錄下執行命令:
              svn commit pom.xml -m "my settings"
          為了每個工程都可以被單獨地運行,需要將整個demo及其子工程都安裝到Maven倉庫中,僅需要在Maven_Demo
          目錄下執行命令:
              mvn install
          2.6 添加Maven工程
              登錄到Continuum控制臺后,點擊左邊“Add Project”組中的“Maven 2.0+ Project”。添加Maven2工程有兩種情況:輸入POM文件的URL;直接上傳POM文件。前者適用于任何Maven工程;后者只能適用于沒有module,即無子工程的Maven工程。由于本文使用的Maven工程demo中有兩個子工程,所以只能使用前一種方法。
          Continuum03.gif
              只需要加載頂層工程的POM文件,Continuum會自動加載其它moudel的POM文件。如上圖所示,在M2 POM Url中輸入:
                  file:///D:/maven/continuum/Demo/pom.xml

          提交之后會看到如下的畫面,即表示Maven工程已經被正確地加載到Continuum中了。
          Continuum04.gif
              加載工程時,Continuum會將這些工程分別下載到Working Directory(見2.4節)中,并在
          Build Output Directory(見2.4節)中為每個工程 生成一個輸出目錄(開始只有一些log文件)。細心的朋友可能會發現,當上述工作完成之后,子工程“CE Maven Demo – App”和“CE Maven Demo – WebApp”的Build狀態仍然是“Queued Build”。其實這是Continuum的一個Bug!Continnum在許多情況下不會自動刷新頁面,需要手動刷新,即點擊“Show projects”按鈕。但請不要使用瀏覽器中的refresh按鈕,這樣可能會重新提交你的請求。這個Bug將在Continuum1.1中被修復。當頁面刷新之后,App和WebApp的Build狀態將與Demo工程一致。
          2.7 第一次Build
              要Build任何一個Maven工程都十分簡單,只需要點擊某個工程右邊“Build Now”按鈕就可以Build該工程了。如我們點擊demo工程對應的“Build Now”按鈕,那么Continuum將按照demo中的POM文件執行Build工作。當Build完成后,可以顯示本次Build的結果狀態:成功,失敗或錯誤(但請隨時手動刷新頁面^_^)。而Build次數也將從0改變為1。
          Continuum09.gif
              點擊上圖表格中的列“Build”中的數字,將可以看到本次Build的詳細過程,如下圖所示。
          continuum10.gif
          2.8 設置時間表
              前面已經談過,持續集成就需要進行有規律的Build。即需要建立一個時間表,讓持續集成服務器按照這個表進行Build。Continuum默認的時間表為:每天的每一個整點進行一次Build,即每天每隔一小時Build一次。我們也可以建立自己的時間表。點擊Administration組中的“Schedules”按鈕就可以發現當前默認使用的時間表,再點擊“Add”按鈕就可以添加新的時間表了,如下圖所示。
          Continuum06.gif
              這些參數項中最關鍵的是Cron Expression,它定義了Continuum執行Build的時間規則,它的語法規則請見參加資源[4]。上圖中規定的時間表是:在每天的14:00-14:59之間,每分鐘都要進行一次Build。勾選上Enable復選框之后,再提交,該Schedule就可以被使用了。
              為了使用新建的Schedule,我們需要進入工程視圖頁面。點擊“Show Projects”-->工程名(如CE Maven Demo),就可以看到該工程的詳細信息,如下圖所示。
          Continuum07.gif
              在工程視圖的Build Definitions項的Goals中可以發現,使用的Schedule就是“DEFAULT_SCHEDULE”時間表。再點擊“Add”按鈕,并在Schedule下拉列表框中,請選擇剛剛新建的“My First Schedule”時間表(如下圖所示),最后再提交后,新的時間表將被采用。
          Continuum08.gif
          4 小結
              根據前面的描述,應該可以對Continuum的使用有些感性上的認識了。由于Continuum是Maven的子項目,它內置支持Maven2,所以能夠與Maven進行良好的集成使用。現時,Continuum也能夠支持Ant與Shell腳本工程。使用Continuum+Maven,能夠對工程進行干凈與頻繁的集成,可以提高Build效率并能促進工程的健康發展。
          5 參數資源
          [1]Continuum官方網站. http://maven.apache.org/continuum/
          [2]Continuum的參考文檔. http://maven.apache.org/continuum/guides/index.html
          [3]Better Build with Maven. http://www.mergere.com/m2book_download.jsp
          [4]Cron Expression語法規則. http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html
          posted on 2006-09-09 11:32 John Jiang 閱讀(6083) 評論(10)  編輯  收藏 所屬分類: Maven原創

          評論

          # re: Continuum入門--實例 2006-11-30 09:41 zhengoodman
          辛苦了,這正是我所需要的。感謝作者能分享自己的經驗。  回復  更多評論
            

          # re: Continuum入門--實例 2006-12-01 08:52 Sha Jiang
          使用Continuum持續集成Maven確實十分方便,幾分鐘就可以成功。
          但在實際的工作中,我是使用CruiseControl對Maven工程進行持續集成。
          沒辦法,CC的人氣太旺了,公司要求用它 :D
          而且從功能上而言,CC仍然還是最好的,而且配置起來也不難。所以可能在較長的時間內,仍然是一種很好的選擇。  回復  更多評論
            

          # re: Continuum入門--實例 2006-12-04 08:41 zhengoodman
          有沒有像Appfuse的ant配置文件那樣的大型項目的maven2配置文件?現在網上關于maven2的都是些基本的操作。不知道有沒有實際一點的例子?  回復  更多評論
            

          # re: Continuum入門--實例 2006-12-04 20:06 Sha Jiang
          Maven應該目前并不流行,所以也沒看到很好的樣例。
          我使用Maven也只是一些最的一段時間,目前使用的項目也不大。  回復  更多評論
            

          # re: Continuum入門--實例 2006-12-05 08:42 zhengoodman
          非常感謝,以后還請多多關照。  回復  更多評論
            

          # re: Continuum入門--實例 2006-12-06 13:11 Sha Jiang
          有問題,可以發郵件給我。
          jiangshachina@163.com
          jiangshachina@gmail.com
          這兩個郵箱,我每天都會打開多次 ^_^

          我也只是Maven的初學者,大家一起討論,一起進步嘛 :D  回復  更多評論
            

          # re: Continuum入門--實例 2007-06-28 16:56 sitinspring
          好,先做個記號,有時間準備從馬恩往Continuun轉。  回復  更多評論
            

          # re: Continuum入門--實例 2007-06-28 16:58 sitinspring
          不知你是否用過Maven的Eclipse plugin,有時間能否談談?  回復  更多評論
            

          # re: Continuum入門--實例 2007-06-29 08:40 Sha Jiang
          > 好,先做個記號,有時間準備從馬恩往Continuun轉。
          "馬恩"?你是指Maven嗎?
          如果是指Maven的話,那么你這句話就很有問題了。
          Maven是Build工具,類似于Ant(其實官方強烈反對大家對Maven的這種評價,他們認為Maven是一個工程管理工具)。Continuum是一個持續集成服務器,類似于CruiseControl,它是Maven項目的一個子項目,天然支持對Maven工程的持續集成。  回復  更多評論
            

          # re: Continuum入門--實例 2007-06-29 08:43 Sha Jiang
          > 不知你是否用過Maven的Eclipse plugin,有時間能否談談?
          我一直沒有用過Maven的Eclpse插件。
          如果你看了我其它文章,就知道我是通過將Maven配置為Eclipse的外部工具的方法而在Eclipse內部使用Maven的。
          插件功能應該要強些,但對我個而言用處不大。  回復  更多評論
            

          主站蜘蛛池模板: 彭山县| 凌云县| 芒康县| 邓州市| 临沂市| 通江县| 图们市| 黑龙江省| 阆中市| 孟州市| 丁青县| 赞皇县| 友谊县| 夏津县| 宜宾市| 长沙县| 星子县| 贵港市| 昭平县| 景德镇市| 饶平县| 郁南县| 临安市| 阳泉市| 沧州市| 乌鲁木齐县| 武鸣县| 长兴县| 新源县| 孝昌县| 桃园县| 博兴县| 卢湾区| 阆中市| 阿荣旗| 许昌市| 白水县| 大化| 长春市| 耒阳市| 开封县|