Categories
程式開發

如何以可組合塊的方式重構CI/CD管道


DeliveryConf大會上,VMware主管工程師Bryan Liles討論了構建持續集成交付(CI/CD)管道的一系列原則。 Liles建議,應將CI/CD視為模式而非Jenkins或Spinnaker這樣的具體實現;需要構建一種平台,它由獨立於技術堆棧的可組合部分和可替換組件構成。

演講一開始,Liles介紹了會有多少企業按照傳統的方式構建CI/CD管道,並闡明建立此類管道的目的是實現應用從開發環境到生產環境的遷移。交付過程在本質上就是從源代碼管理方獲取應用的代碼,進而在管道中編譯應用,形成工件並打包(bundle)存儲在倉庫中。最後,管道將打包文件交付給各個環境,例如開發、測試和生產。 Liles指出,如果交付管道看上去非常複雜,那麼這意味著技術棧不應該再繼續複雜下去了。

在Liles看來,工程人員應該將部署管道看成是一些可組合的塊和模式,而非僅注重實際使用的Jenkins或Spinnaker等具體實現。例如,管道中的一部分可以是完成應用構建、運行測試和創建工件的集成塊,該部分可以使用Jenkins實現,但也支持使用Circle CI等其他工具。管道中的另一個塊可以部署應用、徵求批准和執行數據遷移的交付過程。集成和交付塊都具有一些相同的基本組件,例如Webhook觸發器、工作流、通知和批准等。集成塊和交付塊是部署管道這一更大的可組合部分中的一部分。

如何以可組合塊的方式重構CI/CD管道 1

Liles提出:“必須更多地考慮系統的可組合性。”部署管道應該是一種將應用交付至指定目的地的應用發布“平台即服務”(PaaS)。 Liles建議將部署管道重新定義為可組合的PaaS,工程人員可輕易更改其中的各個組件。該模式的典型例子就是Kubernetes。作為構建平台的平台,部署管道可基於Kubernetes實現與上述集成塊和交付塊一樣的基本組件,同時支持使用其它各種不同的工具。例如,集成部分可以使用TektonArgo實現觸發器、工作流、通知和批准塊。

Liles進而指出,Jenkins、Spinnaker或ConcourseCI之類的工具可用於定義如何構建CI/CD管道以及如何使用它們,但應在使用中汲取前車之鑑,避免入坑。由此,他建議應以破舊立新的思維去利用工具:

我們確實需要換種思維去使用各種工具。技術現狀驅動我們到達了當前的位置,但這並非我們所需要的高度。我們應該拓展思維,破舊立新。

Liles最後總結道,工具本身是複雜的,但從生態系統角度看,我們應致力於去構建更小且可組合的工具集。他建議工程人員琢磨一下如何共同改進生態系統,而不是沉溺於如何在現有工具上錦上添花。他認為自己提出的構建方式僅是拋磚引玉,“關注點應是更多地考慮系統中的可組合性。”

原文鏈接:

Reimagining CI/CD Pipelines as Composable Blocks with Bryan Liles