qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          自動化的高效團隊開發環境

           1、引子

            這兩天無意翻到幾個月前的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%以上。

          posted on 2013-05-22 10:27 順其自然EVO 閱讀(226) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 盈江县| 夹江县| 新田县| 高碑店市| 承德县| 准格尔旗| 哈尔滨市| 贞丰县| 交城县| 武义县| 突泉县| 乌海市| 庐江县| 贺兰县| 称多县| 栾城县| 疏附县| 本溪市| 富阳市| 杭州市| 肃南| 金乡县| 玉山县| 启东市| 深泽县| 大邑县| 牡丹江市| 翼城县| 六盘水市| 义乌市| 新源县| 高安市| 横山县| 保德县| 常宁市| 彰化县| 盱眙县| 新昌县| 兴国县| 牟定县| 贡觉县|