自動化的高效團隊開發環境
這兩天無意翻到幾個月前的Evernote筆記,看到了當時對團隊開發環境的一些想法。可惜后來種種,這一想法未能得到實踐,只能將其完善后公諸于眾,立此存照,日后有空可以一試。
考慮這套開發環境是因為我們遇到了這些問題:
開發人員的環境并不統一:dev在osx,ubuntu 11.10和ubuntu 12.04上工作,而ux在windows下工作,協調,解決問題不太方便,尤其是一個bug在A的系統出現,卻在自己的環境下無法復用。
無法即刻搭建和線上同版本的環境,解決線上問題。小團隊節奏很快,當前的工作目錄可能和線上版本差幾天的代碼(diff可能已經是巨量),所以當線上出問題時,將工作環境切換過去非常耗時(尤其是數據庫發生變化時)。
為新員工構建開發環境耗時且問題重重。這和第一點有些類似,即在ubuntu下工作的構建開發環境的流程在osx下會break。尤其是后期我們不斷有開發人員轉換系統到osx下。
當時正好看到一篇關于 vagrant 的文章,感覺這正是我想要的救命稻草。
2、理想的開發環境
我心目中理想的開發環境應該是這樣子的:
編輯環境和運行/測試環境分離。這意味著開發人員,不管是dev還是ux,可以使用任何她喜歡的系統進行內容的編輯,而其產出可以無縫地運行在另一個統 一的環境。無縫是很重要的體驗,如果分離意味著在兩個系統顯示地頻繁切換,那還不如不分離;在此基礎上的統一的環境則讓大家在同一個上下文中交流。
開發人員可以同時工作在好幾個版本下。在途客圈,一個relase(或者一個scrum)以兩周為周期,一周開發,一周測試,然后就上線,如圖所示:
這意味著在任何一周,開發人員同時工作在3個不同的branch上,以week 3第一天為例:Dalian已經部署到線上,Edingburgh交付測試,而Florence正在開發中。開發人員能夠無痛地在這三個環境中任意切換, 就像任務調度一樣,保存上下文,切換到另一個branch,開始工作。作為小團隊,我們不希望甚至不可能將有限的人員切成三份來運作,所以應該通過工具支 持這種開發狀態。
能很好地支持持續集成。travis-ci.org 跑跑開源項目還可以,但商業項目就免了,而且其每次構建都rebuild整套環境這個效率太低。
3、構建理想的開發環境
存在的問題和期望的解決方案已經擺出來了,接下來就是如何實現的問題。這種場景是典型的虛擬機大展拳腳的地方,VmWare會很欣慰地擺出VDI + vSphere的解決方案。不過小團隊人少錢緊,自然只能尋找免費的替代品,即之前提到的 vagrant。
什么是VAGRANT?
我對它的不太確切的理解是:一套自動化創建,部署和使用虛擬機的工具。vagrant 原生支持virtualbox,這就足夠了。通過一系列CLI命令,我們可以很方便地操作虛擬機。
創建并運行虛擬機:
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32 $ vagrant up |
登入虛擬機:
$ vagrant ssh |
打包虛擬機:
$ vagrant package --vagrantfile Vagrantfile.pkg |
更詳細的 vagrant 使用說明請參考其文檔,這里就不詳細介紹。
如何使用VAGRANT構建理想的開發環境
在這個模型中,大家交流的基礎是虛擬機。虛擬機隨時被創建,隨時又銷毀,有一個box服務器 vagrant repo 來統一存儲所有box并提供上傳/下載服務。box服務器提供兩類box:
基準box。每天半夜從GitHub pull相應branch的代碼,并輔以對應的database,自動打包成一個基準box。每個活躍的branch每天都會有一個新的基準box。基準box保存一周足矣。大家新的一天工作的基礎是基準box。
PR box。解決線上問題時,和QA,CI交流使用的box。
任意一個box都是一個沙箱,它包含和線上環境同版本的操作系統,運行環境。同時里面有對應branch的代碼庫和數據庫。數據庫采用線上數據 庫的一個子集,可以讓系統正常運行即可。box和用戶的host OS間可以共享目錄,比如說代碼的目錄,這樣可以讓用戶通過host OS上的個性化編輯環境撰寫代碼。此外,box里的port和host OS的port要能一一映射,這樣用戶完全具有本地的測試體驗。
詳細的環境和工作場景參見下圖:
適用場景
這樣的開發環境能滿足本地辦公團隊,甚至遠程辦公團隊的需要。
同一個地點辦公的團隊,vagrant repo 服務器可以放在本地,以獲得最好的下載速度。
異地辦公或者服務于開源項目的松散團隊,可以把 bagrant repo 放在一個公網服務器,讓參與者都能訪問(安全性不在本文討論)。訪問速度的問題可以通過本地緩存來解決,這樣在多人下載同一個box時會有近乎本地訪問的體驗。
4、免責聲明
如引文所述,本文想法尚未來得及實踐,所以不保證能正常運行,所以 “try it at your own risk”。筆者個人覺得這個想法的靠譜率在90%以上。