Skip to main content

CI/CD新式與舊式架構

CI/CD舊式架構(以Jenkins為例)

         CI的舊式架構中,通常使用CI的工具和腳本執行,需要較多的手工配置和管理,舊式架構為集中化架構;和新式架構相比之下,新式架構較為輕量,講求分散化架構。

 

1 Jenkins介面圖

 

        CI的舊式架構軟體中,通常不會為Docker等虛擬化軟體特別設計,但還是能在效果有限的狀況下搭配Docker。以Jenkins為例,Docker的Container只能當作類似虛擬機器 (Virtual Machine, VM)使用,如圖2所示,不能將Docker的功能進一步強化,而Jenkins的學習曲線較高也是其缺點,且對於Java版本來說(Jenkins的程式語言為Java),Jenkins僅支援JDK11和JDK17。

2 JenkinsDocker架構圖

CI/CD新式架構

新式CI/CD中,GitHub ActionDroneCircle CI等皆以Docker為基礎所開發的CI/CD工具,以GitHub Action為例,當中以CI/CD流程的設定檔稱為YAML檔,YAML檔中可以寫CI/CD的工作流程,工作流程由多個工作任務組合,工作任務裡又再細分多個步驟;任務或步驟可以是環境的建置、抓取專案中的程式碼、測試程式或部署程式等,全看YAML檔的內容。對於新式架構的CI/CD而言,如果以GitHub Action為例,會把工作任務作為一個容器,並在容器裡執行相關指令,例如:從專案裡頭抓取程式碼作為一個容器執行、建置環境為一個容器、部署為一個容器等。新式架構中用Docker容器化的概念處理CI/CD的好處,臚列如下:

l  任何步驟都在Docker 容器內執行,完成後將自動移除容器,不會留下把暫存資料或垃圾資料。

l  與舊式架構相比之下較好維護,不會因為版本問題另開VM

l  藉由YAML檔觸發CI/CD流程,可以加入版控。

1 CI/CD舊式新式比較表

CI/CD

舊式架構

新式架構

優點

l   集中化管理

l   擁有豐富的插件

l   可以結合版控

l   較為輕量

l   Docker服務為基底

缺點

l   不輕量

l   擴展性有限

l   Docker使用程度有限

l   需要套件必須自行開發