Vagrant是構建在虛擬化技術之上的虛擬機運行環境管理工具。經過Vagrant能夠方便實現的對虛擬機的管理,包括創建和刪除虛擬機、配置虛擬機運行參數、管理虛擬機運行狀態、自動化配置和安裝開發環境必須的各種軟件、打包和分發虛擬機運行環境等。git
Vagrant的運行,須要依賴某項具體的虛擬化技術。因爲VirtualBox是一項開源的虛擬化軟件,能夠同時在Windows、Linux、Macintosh、SSolaris等操做系統上運行並支持衆多對衆多操做系統的虛擬化,所以,在Vagrant開發的初期,惟一支持的是VirtualBox。隨着虛擬化技術的快速發展,如今已經有了更多的虛擬化技術可供選擇。VMware、HyperV、Docker等都已經能夠經過Vagrant的管理而工做。Windows的HyperV技術在部分Windows發行版本中的集成,使得Vagrant在「開盒即用」的特性方面前進了一大步。sql
所以,Vagrant是虛擬機管理工具,不是某項具體的虛擬化技術。對於各項虛擬化技術而言,Vagrant提供了一套基於配置文件和命令行的管理工具。也正是由於如此,Vagrant完成了對虛擬化技術在必定程度上的封裝。這爲將虛擬化技術引入到基於桌面運行環境的開發工做流中創造了便利條件。數據庫
在Vagrant沒有出現以前,在服務器端進行開發的人們一般都擁有一個專用的開發賬號。使用這個賬號,開發者能夠在必定限度內配置本身的開發環境、完成編碼、進行測試並完成向開發團隊代碼庫的代碼推送。因而,在團隊合做開發的過程當中,一個問題出現了:當A進行了一次新的代碼推送以後,本來能夠經過的代碼持續集成測試沒法經過了。經過代碼檢查,發現A的代碼出現了異常。而A在本身的開發環境中的測試是能夠經過的。這類錯誤被Vagrant稱做爲「Work on my machine」錯誤。這類錯誤要定位解決一般耗時好久。在一個能夠進行面對面開發的團隊中,問題的定位因爲溝通手段的豐富相對較快。若是是分散在不一樣地方的人在合做開發,那麼要解決此類錯誤,就沒有那麼簡單了。服務器
小張在本身的機器上辛苦的完成了一項功能開發,經過了本機上的各項測試,高高興興的向團隊代碼庫提交的本身的工做成果。心想終於能夠放鬆一下了。「是否是能夠買一隻機械鍵盤犒勞一下?晚上和夥伴們出去聚會吧!嘿嘿。」小A內心美滋滋的想。網絡
「小張,你來一下,代碼有問題」。臨近下班的時候,小A接到QA小組的一個電話。「怎麼回事?」小張一頭霧水的走進了QA小組的辦公區。ssh
「你今天下午提交的代碼,沒法經過測試。你本身作了測試了嗎?」,老王是QA小組測試負責人,他面色凝重的問小張,「我們就要發佈一個新的代碼版本了。這個時候你的代碼出問題,可能會影響代碼發佈的。要不你趕忙看看?明天上午能修復嗎。咱們的測試報告和測試規範在這裏」。數據庫設計
「明明沒有問題的呀」,出了QA的辦公區,小張仍然疑惑不解。「在個人機器上明明是能夠運行的。並且爲了晚上的聚會,測試規範中定義的各項測試也是提早跑過的呀。看來今天晚上的聚會要取消了。「小張無奈的拿出電話,打算給好友們打電話,通知本身沒法參加晚上的聚會了。工具
好吧,藉助Vagrant,每個開發者均可以獲得一份服務器運行環境的虛擬機,能夠以虛擬機的方式運行一個微型的」生產環境「。這樣,在提交代碼以前,開發這就能夠在虛擬機上完成」生產環境「的驗證。天然能夠解決上面的問題了。測試
搭建一個開發環境,須要完成操做系統的安裝,必要的開發支撐軟件的安裝,配置操做系統和代碼運行環境。若是全部的操做都須要由人來手動操做的話,一個下午的時間是必要的。搭建開發環境是團隊中新人加入時的必不可少的第一課。而團隊的老人們,無可避免的會接到無數的「新手」的發問。更不用說,當著名的Wxdows系統須要從新安裝系統的時候,不管誰,基本上一天的工做時間算是交代了,更不用說各種開發軟件的配置若是會影響代碼執行結果的時候會引入什麼樣的「災難」了。使用Vagrant實現開發環境的快速搭建成爲提高效率的顯著功能特性之一。優化
Vagrant提供了統一的安裝程序配置環境:
vagrantfile
)實現對服務器的統一配置。shared folder
)實現代碼編輯向「服務器」的快速提交Provisioning scripts
)實現服務器上的運行環境的快速創建小李是進入開發團隊的新人。從學校畢業出來,小李就到了一個公司從事服務器端的軟件開發工做。因爲興趣愛好的緣由,他新近加入了這個網遊開發團隊。他接到的第一個命令就是「搭建一個服務器工做日誌分析系統,爲服務器代碼優化改進作準備」。
小李從團隊項目經理那裏獲得了服務器環境安裝手冊以及服務器日誌數據庫設計文檔。小李須要在本身的機器上用虛擬機安裝一套服務器環境,用以進行日誌數據的分析和提取。
「好吧,估計這幾天的時間要搭到系統安裝裏去了。」小李作好了心理準備,打開了服務器環境安裝手冊。意外的,手冊很簡單:
- 安裝Vagrant和VirtualBox,從文件服務器(地址XX.XX.XX.XX/Software)下載Vagrant、VirtualBox安裝文件,並完成安裝
- 執行
git clone git@xx.xx.xx.xx:vagrantconfig.git
獲取vagrant配置文件- 進入vagrantconfig目錄,運行
Vagrant up ftp://xx.xx.xx.xx/vagrant/trusty-server-cloudimg-amd64-vagrant-disk1
- 執行
vagrant ssh
驗證安裝- 從文件服務器(xx.xx.xx.xx/data)下載日誌數據庫dump文件,完成Mysql數據庫內容的加載
- ……
「這就完了?」半個小時後,小李目瞪口呆的看着本身機器上運行的虛擬機,一套服務器日誌系統已經加載完成了。小李已經能夠着手進行數據的分析並開始作具體編碼設計了。
若是還在爲「Work on my machine」錯誤頭疼,若是安裝開發環境仍是團隊心頭的痛,那爲何不試試用用Vagrant呢?
對於須要在服務器端進行開發的人,Vagrant管理的虛擬機鏡像提供了統一的生產運行環境。開發者能夠爲所欲爲的決定何時想「服務器」端發佈程序,何時在「服務器」端進行必要的測試,而絲絕不用擔憂會影響生產環境服務器的穩定運行。
對於各種設計人員,使用Vagrant,可讓設計人員能夠爲所欲爲的選擇本身的開發用操做系統、設計軟件、編輯IDE軟件,能夠經過與虛擬機之間的共享目錄,快速實現設計文件在生產環境中的測試驗證。
對於系統維護人員,使用Vagrant,能夠隨意進行對系統安裝設置的過程進行演練,驗證工程安裝手冊的完備程度。也能夠對系統維護中的各項操做指令隨意進行實驗。這對於提高售後服務團隊的問題快速解決能力,得到實戰經驗的很是重要的手段。
開源的開發者經常沒法像一個普通團隊那樣面對面的坐在一塊兒進行開發工做。因爲開發團隊是一種鬆散的組織模式,所以,也不是每個開發者均可以得到在服務器端上的開發受權。此時Vagrant就提供給這些開發者必要的代碼運行環境,極大程度的提高了開源開發者向開發中心小組提交代碼的質量。此外,Vagrant的虛擬機分享模式,也使得開源開發者得到統一的服務器運行環境的成本變得異乎尋常的低廉。