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