Maven實戰讀書筆記(11)

敏捷實踐之一——持續集成 (Continuous Integration)數據庫

1Maven所實現的自動化構建正是持續集成的一個必要前提服務器

2、持續集成還要求開發人員使用版本控制工具和持續集成服務器框架

3Subversion就是當前最流行的版本控制工具,而Hudson則是最流行的開源持續集成服務器軟件工具

 

什麼是持續集成?性能

持續集成就是快速且高頻率地自動構建項目的全部源碼,併爲項目成員提供豐富的反饋信息單元測試

 

什麼叫快速?學習

集成的速度要儘量的快,開發人員不但願本身的代碼提交半天以後才獲得反饋測試

 

什麼叫高頻率?spa

頻率越高越好,例如每隔一小時就是個不錯的選擇,這樣的問題才能儘早地被反映出來版本控制

 

什麼叫自動?

持續集成應該是自動觸發並執行的,不該該有手工參與

 

什麼叫構建?

包括編譯、測試、審查、打包、部署等工做

 

全部源碼是什麼?

全部團隊成員提交到代碼庫裏的最新的源代碼

 

反饋是什麼?

持續集成應該經過各類快捷的方式告訴團隊成員最新的集成狀態,當集成失敗的時候,反饋報告應該儘量地反映失敗得具體細節

 

一個典型得持續集成場景是這樣的

開發人員對代碼作了一些修改,在本地運行構建並確認無誤以後,將更改提交到代碼庫。具備高配置硬件的持續集成服務器每隔30分鐘查詢代碼庫一次,發現更新以後,簽出全部最新的源代碼,而後調用自動化構建工具 (Maven) 構建項目,該過程包括編譯、測試、審查、打包和部署等。然而不幸的是,另一名開發人員在這一時間段也提交了代碼更改,兩處更改致使了某些測試的失敗,持續集成服務器基於這些失敗的測試建立一個報告,並自動發送給相關開發人員。開發人員收到報告後,當即左手調查緣由,並儘快修復

 

一次完整的集成每每會包括如下6個步驟

1、持續編譯:全部正式的源代碼都應該提交到源碼控制系統中 (如Subversion),持續集成服務器按必定頻率檢查源碼控制系統,若是有新的代碼,就觸發一次集成,舊的已編譯的字節碼應當所有清除,而後服務器編譯全部最新的代碼

2、持續數據庫集成:在不少項目中,源代碼不只僅指Java代碼,還包括了數據庫SQL腳本,若是單獨管理它們,很容易形成與項目其餘代碼的不一致,並形成混亂。持續集成也應該包括數據庫的集成,每次發現新的SQL腳本,就應該清理集成環境的數據庫,從新建立表結構,並填入預備的數據。這樣就能隨時發現腳本的錯誤,此外,基於這些腳本的測試還能進一步發現其餘相關的問題

3、持續測試:有了JUnit之類的框架,自動化測試就成了可能。編寫優良的單元測試並不容易,好的單元測試必須是自動化的、可重複執行的、不依賴於環境的,而且可以自我檢查的。除了單元測試,有些項目還會包含一些依賴外部環境的集成測試。全部這些測試都應該在每次集成的時候運行,而且在發生問題的時候能產生具體報告

4、持續審查:諸如CheckstylePMD之類的工具可以幫咱們發現代碼中的壞味道 (Bad Smell),持續集成可使用這些工具來生成各種報告,如測試覆蓋率報告,Checkstyle報告、PMD報告等。這些報告的生成頻率能夠低一些,如每日生成一次,當審查發現問題的時候,能夠給開發人員反饋警告信息

5、持續部署:有些錯誤只有在部署後才能被發現,它們每每是具體容器或者環境相關的,自動化部署可以幫助咱們儘快發現這類問題

6、持續反饋:持續集成的最後一步的反饋,一般是一封電子郵件。在重要的時候將正確的信息發送給正確的人。若是開發者一直受到與本身無關的持續集成報告,他慢慢地就會忽略這些報告。基本得規則是:將繼承失敗報告發送給此次集成相關的代碼提交者,項目經理應該收到全部失敗報告

 

持續集成須要額外的硬件設置

特別是對於持續集成服務器來講,性能越高,集成的速度就越快,反饋的速度也就越快。持續集成還要求開發者使用各類工具,如源碼控制工具、自動化構建工具、自動化測試工具、持續集成軟件等。這一切無疑都增長了開發人員的負擔,然而學習並適應這些工具及流程是徹底值得的,由於持續集成有着不少好處

 

持續集成的好處有哪些?

1、儘早暴露問題:越早地暴露問題,修復問題代碼得成本就越低。持續集成高頻率地編譯、測試、審查、部署項目代碼,可以快速地發現問題並及時反饋

2、減小重複操做:持續集成是徹底自動化的,這就避免了大量重複的手工勞動,開發人員再也不須要手動地去簽出代碼,一步步地編譯、測試、審查、部署

3、簡化項目發佈:每日高頻率的集成保證了項目隨時都是能夠部署運行的,若是沒有持續集成,項目發佈以前將不得不手動地集成,而後花大量精力修復集成問題

4、創建團隊信心:一個優良得持續集成環境能讓團隊隨時對項目的狀態保持信心,由於項目的大部分問題區域已經由持續集成環境覆蓋了

相關文章
相關標籤/搜索