段琳++孫恒一



摘 要 傳統的軟件開發模式經常會遇到開發階段與驗收階段隔離所帶來的諸多問題,基于Bamboo的持續集成系統通過自動化手段為軟件項目開發團隊轉變傳統開發模式、實踐持續集成思想提供了足夠的平臺支持,有利于項目快速反饋機制的建立、有利于盡早發現問題手段的完善,為軟件的高質量交付創造條件。
【關鍵詞】軟件開發模式 持續集成 自動化
1 引言
傳統的軟件項目在開發階段并不要求進行軟件集成,這就造成了應用程序在相當長的一段時間內始終處于無法運行的狀態,尤其在軟件開發團隊規模比較大的情況下這一現象顯得尤為突出。原因很簡單,項目干系人沒有興趣在開發完成之前運行整個應用。針對項目的軟件測試在沒有可運行應用程序的情況下,更多依賴于軟件開發人員自行編寫的單元測試,而這些測試用例對于運行環境來講意義不大。這樣的做法對于那些項目分支的生命周期很長或者把驗收測試放到項目尾聲來做的團隊將是災難性的。為了彌補這一缺失,團隊負責人不得不在開發結束后預留很長的時間作為集成階段,最糟糕的是沒人知道到底要花多長時間完成項目集成。極端的情況是有些項目到了集成階段才發現軟件并不完全滿足用戶需求。
解決以上困難的途徑之一就是采用持續集成。持續集成要求每當有開發人員提交代碼,就要對整個應用實施構建、部署并執行全面的自動化測試進行驗證。這一過程中最重要的原則是如果構建或者測試失敗,則開發團隊應立即停止研發的工作,在最短的時間內予以修復。持續集成的目標是保證正在開發的軟件一直處于正常工作狀態。
持續集成是一種軟件工程實踐,即項目研發團隊對源代碼進行高頻度集成。每次集成都通過自動化構建(包括編譯,發布,自動化測試)來驗證集成效果從而盡快發現并改正軟件錯誤,進而提高軟件質量。企業可以通過建立以持續集成為核心軟件開發控制體系來規范其軟件版本變更行為,實現對軟件版本變更的深入管控,確保軟件版本發布的正確性、合規性及穩定性。
為了能夠深入理解持續集成理論,在實踐中積累應用經驗,特選取Atlassion公司的持續集成管理系統Bamboo進行持續集成系統研究。
2 持續集成系統研究
2.1 Bamboo簡介
Atlassian Bamboo是一款商業的持續集成構建服務器軟件。它是一套持續集成服務系統,它會在代碼庫有變動后有策略的觸發構建、部署及測試以確保新的變化很好地整合到已有的代碼庫中或者通過反饋機制快速將失敗發送給開發團隊;發布管理功能通過腳本執行來規范發布流程。Bamboo實現持續集成的原理圖如圖1所示。
2.2 準備工作
在開始搭建持續集成之前,需要做好版本控制、自動化構建及團隊意識建立三件事情。
2.2.1 版本控制
與項目相關的所有內容都必須提交到一個版本控制庫中,包括產品代碼、測試代碼、數據庫腳本、構建與部署腳本,以及所有用于創建、安裝、運行和測試的相關文件,本次研究采用的版本控制工具為Tortoise SVN。
2.2.2 命令行腳本
持續集成系統是通過命令行來執行自動構建、部署、測試和發布的。這么做是為了確保持續集成是以自動化方式完成整個過程的。應盡量保持腳本整潔、易于理解、易于維護,這樣有利于使用持續集成系統的項目人員更好的協作。
2.2.3 團隊意識建立
嚴格的講,持續集成并不是一種工具,而是一種軟件開發實踐。它需要開發團隊能夠給予支持并嚴格遵守持續集成原則,每個人以增量的方式頻繁提交代碼并認同“修復破壞應用程序的任意修改是最高優先級的任務”,如果團隊無法達成類似共識,那么便無法通過持續集成達到提升軟件質量的目標。
2.3 流程自動化
源代碼提交流程是Bamboo持續集成系統應用中最重要的組成部分。如圖2所示的源代碼變更流程中,交付/開發團隊提交代碼至版本控制庫,觸發構建和單元測試,構建成功則觸發自動化驗收測試,成功則繼續用戶驗收測試以及發布,在每一步出現問題則及時反饋給交付/開發團隊。
這一過程保證了源代碼在提交、構建、單元測試、自動化驗收測試、用戶驗收及發布的各個階段始終處于被控狀態,整個過程以流水線的形式開展并對過程結果予以記錄和反饋,從而實現流程自動化。流水線的輸入是版本控制中的某個具體版本,輸出的是經過測試的發布版本。
有效地阻止那些沒有經過充分測試或不滿足功能需求的版本進入生產環境能避免回歸缺陷,尤其是對那些需要緊急修復并部署到生產環境的情況來說更為重要。在構建、部署、測試以及發布被自動化實現以后,項目團隊能夠更加靈活的處理緊急情況,產品發布根本不會存在任何風險,因為總有一個最近的正確版本作為下一次代碼提交的基礎,一旦有問題則立刻回滾,然后線下修復就可以了。另外自動化還能避免手工易錯步驟帶來的項目風險。
2.4 多種開發語言支持
Bamboo針對不同編程語言的特點,提供多種構建、部署、自動化測試的工具,如圖3所示,構建工具包括Ant、Bower、AWS CodeDeploy、Docker、Grails、Grunt、Maven、MSBuild、NAnt、Node.js、Nodeunit、Devenv、Script等;如圖4所示,測試工具包括JUnit、MBUnit、Mocha Test、MSTest、NUnit、PHPUnit、TestNG等;如圖5所示,部署工具包括Artifact Download、Tomcat、Docker、Heroku、SSH、SCP等。這些工具為實現持續集成自動化提供有力支持。
本次研究以目前主流的三種軟件開發語言Java、MS.Net、PHP為例驗證Bamboo持續集成系統對持續集成的實現。
JAVA項目采用:
Ant+Selenium+Nunit+Tomcat。
MS.Net項目采用:
MSBuild+WatiN+MSTest+Artifact Download。
PHP項目采用:
Selenium+PHPUnit+SSH。
實踐證明,Bamboo提供的持續集成工具能夠很好地發揮作用。
2.5 部署一體化
軟件部署流程的起點是開發人員向版本控制庫提交代碼,持續集成管理系統對這次提交做出響應即觸發部署流程。第一個階段稱為提交階段,通過編譯代碼、運行單元測試、執行代碼分析、創建軟件二進制包,在所有單元測試驗證通過后將可執行代碼打包成可執行文件,并放到一個制品庫(Artifacts Repository)中。Bamboo提供了保存這種過程產物的功能,并能夠將其提供給流水線的后續階段。
第二階段進入驗收階段,主要特點為自動化驗收測試、冒煙測試的執行。持續集成服務系統Bamboo支持多個代理機(agent)同時運行自動化任務。這種并行執行會明顯提高執行效率,更快得到反饋,更快針對反饋做出處理。這個階段是流水線中第一階段成功完成后自動觸發的,該階段完成后同樣會將驗證后的成果放入到制品庫中。
第三階段進入部署階段。前兩個階段的順利完成為第三階段創造了條件,根據不同項目特點,將產品實際部署到任意環境(測試環境、發布環境、生產環境等)。Bamboo在完成整個過程中,需要版本控制、制品倉庫管理、配置管理的全程配合,如圖6的部署基本流程演示了整個部署一體化實現流程。
3 結論
基于Bamboo的持續集成系統通過自動化手段為軟件項目開發團隊轉變傳統開發模式、實踐持續集成思想提供了足夠的平臺支持,有利于項目快速反饋機制的建立、有利于盡早發現問題手段的完善,為軟件的高質量交付創造條件。
參考文獻
[1]Jez Humble,David Farley.持續交付-發布可靠軟件的系統方法[M].北京:人民郵電出版社,2011:87-90.
[2]董越.軟件集成策略:如何有效地提升質量[M].北京:電子工業出版社,2013,277-288.
[3]杜瓦爾,邁耶斯,格洛弗.持續集成軟件質量改進和風險降低之道[M].北京:機械工業出版社,2008,59-66.
作者簡介
段琳(1990-),女,白族,云南省大理市人。碩士研究生學位。研究方向為數字圖像處理。
孫恒一(1989-),男,云南省玉溪市人。碩士研究生學位。研究方向為電力信息化。
作者單位
云南電網有限責任公司信息中心 云南省昆明市 650217