最近關(guān)注了在構(gòu)建領(lǐng)域非常有前景的兩個(gè)項(xiàng)目Buildkit和基于Buildkit的Earthly項(xiàng)目关翎,之前在公司一直推廣和使用Drone CI項(xiàng)目滋捶,也對(duì)其有過(guò)深入的研究垂涯,當(dāng)時(shí)就有個(gè)想法可不可以將Drone和Earthly結(jié)合起來(lái)鸵赫,同時(shí)利用他們特性和優(yōu)點(diǎn),說(shuō)干就干于是就有了drone-Runner-earthly這個(gè)項(xiàng)目。
drone-runner-earthly是以Buildkit作為運(yùn)行時(shí)的一個(gè)Runner實(shí)現(xiàn)酝静。使用基于Buildkit的Earthly項(xiàng)目节榜,而不是直接使用Buildkit的原因主要是Earthly對(duì)Buildkit進(jìn)行語(yǔ)法擴(kuò)展、功能擴(kuò)展别智,使用起來(lái)要更加方便和強(qiáng)大全跨。
將Earthly(Buildkit)作為運(yùn)行時(shí)的好處
drone-Runner-earthly比Docker運(yùn)行時(shí)提供了更快的運(yùn)行速度,利用Earthly(Buildkit)的內(nèi)置的緩存技術(shù)亿遂,簡(jiǎn)化了CI/CD過(guò)程的緩存定義流程,提供了更好的緩存效率渺杉。
Docker主要是為了運(yùn)行蛇数, Buildkit是為了構(gòu)建更接近CI/CD概念。
將其Earthly和Drone集成起來(lái)也相對(duì)簡(jiǎn)單是越,可直接通過(guò)將Earthly作為命令行工具的方式集成耳舅,不像Docker Runner那樣還要控制容器的生命周期和主動(dòng)拉取Docker容器的logs,帶來(lái)流程的復(fù)雜性倚评,相對(duì)會(huì)帶來(lái)不確定性和穩(wěn)定性問(wèn)題浦徊,而Earthly則已經(jīng)將這些工作封裝完成了,只需要提供需要執(zhí)行的target結(jié)構(gòu)就可以執(zhí)行并獲得結(jié)果和日志數(shù)據(jù)天梧。
Buildkit可以組建大型群集提高構(gòu)建的可用性盔性、可靠性和性能,更好的應(yīng)對(duì)大規(guī)模并發(fā)構(gòu)建場(chǎng)景呢岗。
Buildkit簡(jiǎn)介
Buildkit對(duì)build architecture(構(gòu)建架構(gòu)冕香,如利用Dockerfile的鏡像構(gòu)建)的一個(gè)大的改革,是一個(gè)源代碼構(gòu)建工具后豫,輸出可以是鏡像可以是編譯后的代碼悉尾,或是tar等多種形式,不僅僅是一個(gè)鏡像構(gòu)建工具挫酿,其底層是利用Runc或者Containerd隔離的容器沙盒運(yùn)行環(huán)境來(lái)構(gòu)建源代碼等构眯。
Earthly簡(jiǎn)介
Earthly 是一個(gè)現(xiàn)代化的構(gòu)建工具,用來(lái)完成容器鏡像構(gòu)建早龟,和提供類(lèi)似Makefile的源代碼構(gòu)建功能惫霸,如官方文檔所說(shuō)的it's like Dockerfile and Makefile had a baby是Dockerfile和Makefile的孩子。
Earthly和Drone結(jié)合的實(shí)現(xiàn)方式
1.將Earthly作為Drone CI的Runner runtime拄衰,好處基于Drone yaml語(yǔ)法它褪,對(duì)于熟悉Drone的用戶(hù)不需要過(guò)多的學(xué)習(xí)負(fù)擔(dān)。
- 將每個(gè)step對(duì)應(yīng)Earthly target的方式翘悉,這需要同時(shí)熟悉Drone和Earthly茫打,利用了Drone控制條件。
- Drone Docker Runner運(yùn)行Earthly image方式,需要卷掛載和網(wǎng)絡(luò)的對(duì)應(yīng)配置老赤。
- 采用ssh方式轮洋,需要執(zhí)行安裝Earthly環(huán)節(jié),影響效率抬旺。
drone-Runner-Earthly實(shí)現(xiàn)了1弊予、2兩種,也可以將兩者結(jié)合使用开财,方便且高效汉柒,開(kāi)箱即用,不需要特殊配置责鳍,提供了Earthly和Drone更好的集成方式碾褂。
為Earthly帶來(lái)的好處
- Earthly和源代碼工具(Gitlab GitHub)直接關(guān)聯(lián)。
- 利用Drone CI提供的web ui历葛,更方便直觀的展示build流程正塌。
- 利用Drone CI 通過(guò)depend_on屬性定義step(對(duì)應(yīng)Earthly的target)執(zhí)行順序,生成依賴(lài)關(guān)系圖svg恤溶,early 這方面的功能還在開(kāi)發(fā)完善乓诽。
- 利用Drone ci 定義不同Triggers條件,更好的完成流程控制咒程。(https://docs.Drone.io/pipeline/docker/syntax/trigger)
5.利用Drone實(shí)現(xiàn)定時(shí)任務(wù)鸠天。 - 利用Drone存儲(chǔ)build logs數(shù)據(jù)歷史,方便后期查詢(xún)分析使用孵坚。