用Docker和Git搭建在線開發(fā)環(huán)境
為什么要在云端搭建開發(fā)環(huán)境
如今,在傳統(tǒng)的開發(fā)模式下,版本控制,自動化測試,持續(xù)集成都已經(jīng)陸陸續(xù)續(xù)放到的云端。
- 測試工程師,可以用過自動化測試腳本在云端做大規(guī)模的回歸測試
- 運維工程師,可以通過自動化的部署工具在云端快速部署應(yīng)用
- 產(chǎn)品負(fù)責(zé)人,可以通過版本控制工具控制產(chǎn)品的發(fā)布
唯獨開發(fā)工程師還在利用手中的電腦,筆記本等設(shè)備來完成開發(fā)工作。
在項目開發(fā)階段,我們通常面臨下面幾個問題:
1. 在項目啟動階段,如何讓開發(fā)工程師快速搭建,并配置開發(fā)環(huán)境,來縮短項目啟動時間和成本。
2. 在項目開發(fā)階段,如何讓開發(fā)工程師有:
- 完全相同的開發(fā)環(huán)境,來降低調(diào)試成本。
- 近似于產(chǎn)品環(huán)境的架構(gòu),來降低部署時因環(huán)境差異帶來的風(fēng)險。
- 降低對開發(fā)設(shè)備性能和種類要求,來降低設(shè)備成本。
- 靈活的分配開發(fā)資源(CPU,內(nèi)存,存儲),讓需要大量開發(fā)資源的工程師快速拿到資源。
云端開發(fā)環(huán)境要解決的問題總結(jié)
基于以上思考,我總結(jié)了以下4個云端開發(fā)環(huán)境要解決的問題:
- 保證每個開發(fā)工程師都能快速的獲得一致的“開箱即用”的開發(fā)環(huán)境
- 開發(fā)環(huán)境擺脫開發(fā)設(shè)備的種種限制,例如操作系統(tǒng),設(shè)備性能
- 讓開發(fā)環(huán)境盡可能模擬產(chǎn)品環(huán)境的結(jié)構(gòu)。
- 靈活的分配開發(fā)資源
在云端搭建開發(fā)環(huán)境的挑戰(zhàn)
一個“開箱即用”的開發(fā)環(huán)境應(yīng)該包括:功能完備的代碼編輯器, 一個應(yīng)用運行環(huán)境,一個調(diào)試工具箱。
- 為了擺脫設(shè)備的限制,集成開發(fā)環(huán)境可以用HTML5等主流瀏覽器兼容技術(shù)實現(xiàn)。
- 為了靈活的分配資源和模擬產(chǎn)品環(huán)境,可以將應(yīng)用運行環(huán)境放在云端,并使用容器技術(shù)配置。
- 調(diào)試工具包括日志的輸出,斷點等功能。
技術(shù)難點總結(jié)
- 在線的集成開發(fā)環(huán)境:兼容各大主流瀏覽器
- 隔離的運行環(huán)境:隔離,可定制,高效
- 調(diào)試代碼:查看日志,可設(shè)置跟蹤斷點
潛在的可選技術(shù)
基于技術(shù)難點,我做了一些調(diào)查研究,選擇了幾個備選的開源技術(shù)。
- 在線集成開發(fā)環(huán)境: ICEcoder, Eclipse Orino, Codiad
- 隔離的運行環(huán)境: 云端虛擬機, Docker
- 代碼調(diào)試: fluentd
目前,只確定了使用Docker來實現(xiàn)運行環(huán)境。
集成在線開發(fā)環(huán)境,我使用Git來解耦代碼運行環(huán)境和編輯環(huán)境,并代碼同步。
代碼調(diào)試,我使用獨立的fluentd服務(wù)收集日志,通過SSH登錄到虛擬機查看fluent收集的Docker日志。
云端開發(fā)環(huán)境的架構(gòu)概要
下面這張圖是一個簡單的架構(gòu)說明。首先,使用Git來解耦代碼的編輯和運行環(huán)境。
我在云端,使用Docker搭建了Git裸庫,裸庫中用Git hook來同步代碼。使用Docker來運行應(yīng)用,通過瀏覽器來檢查結(jié)果。
因為,代碼的編輯和運行環(huán)境的分離,開發(fā)工程師可以靈活的選擇開發(fā)工具。開發(fā)工具可以是在線編輯器,也可以是本地的編輯器。
借助于Docker的靈活性,開發(fā)工程師可以快速配置出應(yīng)用運行環(huán)境,并分享給開發(fā)團(tuán)隊成員。
概念驗證
- 在本地編輯代碼
- 用Git同步到云端
- 用docker運行代碼查看結(jié)果