最近在參與開源的12306項目,考慮到整個開發團隊都是分布在世界各地的 - 真有身在國外的同仁參與,要在這樣廣泛分布的團隊里確保同樣的開發環境,並且做到新人能快速配置好開發環境不是一件容易的事情。另外,如何快速將產品部署到雲里面的機器上,也將會是一個麻煩的事情。
前一段時間剛好有個項目機會,是關於CHEF的,CHEF就是用來在雲環境里快速部署程序所依賴的軟件的。你可以把它等同於編譯程序用的make、maven之類的工具,只不過CHEF是用來管理軟件配置之間的依賴關系,而不僅僅是安裝文件那么簡單。比如說,要准備一個Java Web的開發環境,從裸機開始,需要安裝Linux系統、安裝JDK、安裝Maven、安裝apache、安裝Mysql。為了讓這些工具配合起來一起工作,需要做一些設置,例如設置Mysql的管理員密碼,設置Java程序訪問MySql的連接字符串,設置apache的端口號等等。很多管理依賴的工具都是基於自定義的DSL實現的,例如make程序需要寫Makefile,Maven需要pom.xml。這種自定義DSL的方式最大的問題就是在開發階段,配置文件寫錯了,排錯非常困難,只能依賴make、maven這些工具自帶的日志功能去排錯。而CHEF使用的是另外一種途徑,CHEF是使用ruby語言開發的,它使用的DSL也就是用ruby描述的,因此在配置出錯時,可以使用與調試ruby一樣的方式來排錯,而且使用編程語言來寫DSL的好處就是彈性足夠大。
正好趁12306項目的機會,我用CHEF和Vagrant做了一個可以快速同步分發開發環境的工具,源碼已經上傳到github:
https://github.com/shiyimin/12306
這是使用說明:
- 下載並安裝Virtual Box 4.2: https://www.virtualbox.org/wiki/Downloads
- 下載並安裝Vagrant: http://vagrantup.com/
- 觀看視頻說明:http://v.youku.com/v_show/id_XNDU4NzA5MDA4.html
這里講解視頻說明里用到的命令:
- 首先整個開發環境使用的是ubuntu,為了保證整個開發環境一致,首先做了一個非常小的ubuntu虛擬機-大小是260M,這個虛擬機里只有最基本的內核和shell,沒有安裝任何工具。vagrant box add base http://files.vagrantup.com/lucid32.box,這個命令就是把虛擬機模板下載到本地,命名為“base”。
- 在github的源代碼里,我寫了一系列的配置工具,保存在“cookbooks”文件夾里,cookbooks文件夾里的每個文件夾包含了要安裝的工具,以及安裝這些工具的方法以及配置手段。可以看到,我在里面安裝了apache2、apt、boost、jdk、maven、mysql等工具。
- 團隊其它成員要准備開發程序時,無論他是否之前有開發環境,只需要將源代碼同步下來,在宿主機的命令行里進入源代碼的根目錄,執行命令:vagrant up。
- 這時vagrant會調用chef,自動一步步安裝cookbooks里每個文件夾對應的程序,並且配置它。
具體的代碼會在后面的文章講到,各位網友可以先把代碼下載下來,並運行一下看看效果。