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