10秒!GitHub工程團(tuán)隊(duì)轉(zhuǎn)移到Codespaces,開發(fā)環(huán)境「即開即用」
Github宣布:轉(zhuǎn)移到 Codespaces。

GitHub通過博客告知開發(fā)者們,他們將其擴(kuò)展到GitHub團(tuán)隊(duì)和企業(yè)(云)計(jì)劃,開始更廣泛地推出其基于瀏覽器的編碼環(huán)境Codespaces。
這家微軟旗下的公司還宣布,內(nèi)部已經(jīng)從MacOS模式過渡到Codespaces,后者現(xiàn)在是GitHub的默認(rèn)開發(fā)環(huán)境。

GitHub于去年5月首次推出Codespaces,作為具有所有常用GitHub功能的云托管開發(fā)環(huán)境。
它基本上由微軟的Visual Studio Code提供支持,該代碼自2019年起作為基于Web的編輯器提供,并于去年更名為Visual Studio Codespaces。
9 月,微軟還確認(rèn)將Visual Studio Codespaces整合到GitHub Codespaces 中。
GitHub的Codespaces最初是在面向個(gè)人用戶的「有限公開測(cè)試版」中推出的,而現(xiàn)在團(tuán)隊(duì)或企業(yè)(不包括自托管)計(jì)劃中的所有企業(yè)都可以在其 GitHub設(shè)置中主動(dòng)啟用Codespaces,并且他們現(xiàn)在可以在所有私有存儲(chǔ)庫(kù)中使用Codespaces。
通過將編碼環(huán)境帶到云端,開發(fā)人員可以更輕松地加入和協(xié)作項(xiàng)目,并以最少的配置開始編碼。
在這14年中,支持GitHub.com (github/github) 的核心存儲(chǔ)庫(kù)已經(jīng)收到了超過一百萬次提交。這些提交中的絕大多數(shù)來自在 macOS 上構(gòu)建和測(cè)試的開發(fā)人員。

不行就換!
將GitHub遷移到Codespaces能夠解決開發(fā)者環(huán)境不同的問題。
想法有多理想,實(shí)現(xiàn)起來就有多困難。
GitHub.com存儲(chǔ)庫(kù)在磁盤上幾乎占了13GB。
只是簡(jiǎn)單地克隆一下存儲(chǔ)庫(kù),啪,20分鐘就過去了。
結(jié)合依賴設(shè)置,bootstrap一下GitHub.com的代碼空間,45分鐘過去了。
一旦將存儲(chǔ)庫(kù)成功掛載到代碼空間中,應(yīng)用程序還不運(yùn)行了。
14年來,以macOS為中心的設(shè)想付之東流。
但堅(jiān)強(qiáng)的工程團(tuán)隊(duì)又怎么會(huì)輕言放棄!
他們開始質(zhì)疑一直以來的設(shè)想,并在源代碼級(jí)別工作以將GitHub開發(fā)與macOS分離。
最后,雖然速度很慢,但至少可以在Linux主機(jī)上提供可用的GitHub.com代碼空間,從Visual Studio Code連接,交付一些工作。
下面來看看團(tuán)隊(duì)是如何實(shí)現(xiàn)「閃電般速度」的云端開發(fā)環(huán)境。
從45min到5min

使用Codespaces的目標(biāo)是希望能夠?yàn)槭诸^的任務(wù)按需提供開發(fā)環(huán)境,分支和代碼空間之間的映射大致為1:1。
為了支持基于任務(wù)的工作流,團(tuán)隊(duì)希望能夠做到「即開即用」。
團(tuán)隊(duì)不滿足于45分鐘,但是這個(gè)時(shí)間長(zhǎng)度還是能讓人看到希望。
首先是要改變Codespaces克隆github/github的方式。
與之前在配置時(shí)執(zhí)行完整克隆不同,現(xiàn)在Codespaces執(zhí)行的是淺層克隆。
然后在使用最新提交創(chuàng)建代碼空間后,在后臺(tái)執(zhí)行非淺層存儲(chǔ)庫(kù)歷史記錄。
這樣克隆時(shí)間就能從20分鐘縮短到90秒!
下一個(gè)要改進(jìn)的,是緩存支持GitHub.com的軟件和服務(wù)網(wǎng)絡(luò)。
包括傳統(tǒng)的基于Gemfile的依賴項(xiàng)以及用C、Go和自定義構(gòu)建的Ruby編寫的服務(wù)。
團(tuán)隊(duì)提出了一個(gè)解決方案,那就是讓GitHub Action每天晚上夜深人靜的時(shí)候悄悄運(yùn)行。
當(dāng)然是為了克隆存儲(chǔ)庫(kù),引導(dǎo)依賴項(xiàng),還有構(gòu)建和推送結(jié)果的Docker image。
發(fā)布的image隨后被用作github/github的
devcontainer-config-as-code中的基礎(chǔ)鏡像,構(gòu)成Codespaces環(huán)境。

在瀏覽器中通過即時(shí)重新加載來預(yù)覽更改,還能與隊(duì)友共享私有和公共端口。
就憑這兩項(xiàng)更改(以及少量應(yīng)用程序和服務(wù)級(jí)別優(yōu)化),就能將GitHub.com代碼空間的創(chuàng)建時(shí)間從45分鐘縮短到5分鐘。
不過這屆GitHub工程團(tuán)隊(duì)真的很嚴(yán)格。
他們覺得五分鐘,距離「即開即用」的目標(biāo)還有相當(dāng)大的距離。
從5min到10s
快速啟動(dòng)到代碼空間,淺層克隆方法還是很有用的,不過有時(shí)還是需要完整克隆。
所以團(tuán)隊(duì)就想,為什么不能提前克隆和引導(dǎo)存儲(chǔ)庫(kù)呢?
光想不做是大忌。
進(jìn)入預(yù)構(gòu)建:代碼空間池,完全克隆和引導(dǎo),等待開發(fā)人員聯(lián)系。
最終,現(xiàn)在能夠創(chuàng)建可靠的預(yù)配置代碼空間。
而且在10秒內(nèi)就能準(zhǔn)備完畢。
跟以前哼哧哼哧安裝Slack相比,現(xiàn)在新員工可以在更短的時(shí)間內(nèi),從零開始進(jìn)入正常運(yùn)行的開發(fā)環(huán)境。
要是開發(fā)環(huán)境崩潰了,比如太落后,或者測(cè)試數(shù)據(jù)產(chǎn)生了破壞,工程師也能夠快速創(chuàng)建一個(gè)新環(huán)境。

標(biāo)準(zhǔn)化的開發(fā)環(huán)境
另外,切換到Codespaces還能解決掉一些非常現(xiàn)實(shí)的問題。
它消除了本地開發(fā)環(huán)境的脆弱性和單軌模型,但同時(shí)也改善了GitHub開發(fā)人員的體驗(yàn)。
剛開始切換到Codespaces時(shí),用的是8核、16GB RAM的VM。
本來有這些配置已經(jīng)足夠了,但GitHub運(yùn)行的網(wǎng)絡(luò)由不同服務(wù)組成,消耗很大。
所以后來更換成了32核、64GB RAM的VM,給每位工程師的配置都升了級(jí)。
