使用 Github 動作和 Oracle Cloud Infrastructure DevOps Service 為雲端部署建立 CI/CD 管線
- 為了避免將所有部署目標公開到位於部分安全層以外的服務。
- 部署程序的部分可能因基礎架構的程式碼 (IaC) 可能屬於部署程序的一部分而有所不同。
- 儘可能降低部署程序中延遲的潛在影響。因此,執行最後步驟僅由相關的本機連線和相依性控制。
- 能夠集中管理及發行跨多個環境的控制資產。沒有分散式來源。
此參照架構可將服務部分在 Oracle Cloud 外部 (例如 GitHub 和 OCI 中的其他軟體 (例如 DevOps),來說明這些考量事項。此參照架構會查看 Oracle Cloud Infrastructure (OCI) 平台的部署處理作業 (CD):Oracle Container Engine for Kubernetes (OKE)、Function 及 Compute 執行處理。通用容器映像檔是使用個別服務 (因此元素是通用元素) 所建立,然後由 DevOps 部署,因此不會直接與 OKE 通訊。
使用管線部署自動執行軟體版本會增加開發人員生產力,並可讓您更頻繁地釋出功能,並發生較少錯誤。它可協助避免建置期間的停止工作時間,並將更新應用程式的複雜性自動化。Oracle DevOps 可供客戶將內部部署或其他雲端的工作負載移轉至 OCI,以及在 OCI 上開發新應用系統的客戶使用。
架構
在此參照架構中,範例應用程式是使用 GitHub 動作和 OCI DevOps 服務從 GitHub 部署。應用程式已部署至 OKE 叢集。
下圖說明此參考架構。
- 區域
OCI 區域是包含一或多個資料中心 (稱為可用性網域) 的本地化地理區域。區域與其他區域無關,而且大型距離可以區隔 (跨國家或甚至洲)。
架構使用單一區域。
- 外部 CI 系統
This architecture uses GitHub Actions as an external continuous integration system. GitHub Actions automate, customize, and run software development workflows from the GitHub repository. Here, GitHub Actions is used to build code and then containerize it using Docker. When the containerized image is ready, GitHub Actions pushes the image to an OCI artifact repository (alternately, the artifact is put in a central location where the GitHub actions can be configured to nudge DevOps to retrieve the artifact. This means content is pulled, not pushed). After completing the transfer to Artifact Repository, it kicks off the OCI DevOps deployment pipeline. You can also use other continuous integration systems like Jenkins or Gitlab based on your requirements.
如果使用 IaC 技術,則在部署之前,管線可以使用資源管理程式等服務來建立環境,一旦完成,請使用「資源管理程式」刪除這些資源。
Devops 部署管線也可以安全地儲存產生的輸出,以進行報告。
- DevOps 專案
DevOps 專案是實行連續整合與部署 (CI/CD) 工作負載所需的資源邏輯群組。DevOps 資源可以是使用者自建物件、部署管線以及環境。DevOps 專案可讓您輕鬆啟用所有 DevOps 資源的記錄日誌、監督及通知。
- 部署管道
部署管線會保留必須滿足才能將一組使用者自建物件傳遞至環境的需求。管線包含階段,這些階段是管線的建構區塊。管線可以有循序或平行執行的階段,因此您可以控制軟體版本的流程和邏輯。
- 部署階段階段是執行管線時所發生的個別動作。DevOps 部署管線包括下列預先定義的階段類型,供您在釋出處理作業中使用:
- 機動部署:OKE、函數或執行處理群組的增量版本。
- 等待:等待 N 秒。
- 手動核准:如果已核准,則繼續進行;如果核准遭拒,則停止。
- 呼叫函數:呼叫函數並傳送要求參數的使用者自建物件,以執行自訂作業和整合。
- DevOps 人工因素
DevOps 使用者自建物件是構成應用程式之任何檔案、二進位檔案、套裝程式、資訊清單或影像的參照或指標。建立構件時,您必須向 Oracle DevOps 告知實際構件的來源位置。DevOps 支援 OCI 容器映像檔登錄和 OCI 使用者自建物件登錄儲存區域。
- 人工因素儲存區域
「使用者自建物件儲存區域」可用來建立儲存區域以群組相似的使用者自建物件。建立儲存區域之後,即可將使用者自建物件上傳至該儲存區域。這些使用者自建物件是將傳遞至目標部署環境的文字檔、二進位檔案及部署清單的集合。每個使用者自建物件都有由其 path:version 組成的名稱。路徑是用來組織人工因素的字串。
- OCI 記錄日誌與通知服務
OCI 日誌記錄服務會儲存與部署相關的日誌。建置程式實際執行輸出和建置的最終結果會顯示為日誌項目。OCI 通知服務可檢視部署專案及其資源的最新狀態,並採取任何必要的動作。例如,系統會在重要事件 (例如建置管線中等待核准的階段) 時通知您。當您收到通知訊息時,可以移至 DevOps 建置管線並核准階段。
- 建置環境
環境是部署使用者自建物件之客戶的運算資源集合。環境可以是功能、運算虛擬機器 (VM)、裸機執行處理或 OKE 叢集。
- Oracle Kubernetes 叢集 (OKE):Oracle Container Engine for Kubernetes 是一項完全受管理、可擴展的高可用性服務,可用來將容器化應用系統部署到雲端。
- 運算執行處理:OCI 運算服務可讓您在雲端佈建及管理運算主機。您可以啟動資源配置符合您 CPU、記憶體、網路頻寬以及儲存資源需求的運算執行處理。
- 函數:Oracle Functions 是一個完全受管理的多租用戶、高度可擴展、隨選、函數即服務平台。它是建置在企業級 OCI 上,並由 Fn 專案開源引擎提供。
建議
- VCN
建立 VCN 時,請根據計畫連附至 VCN 中子網路的資源數目,判斷所需的 CIDR 區塊數目和各個區塊的大小。使用標準專用 IP 位址空間內的 CIDR 區塊。
建立 VCN 之後,您可以變更、新增及移除其 CIDR 區塊。
此架構使用公用 VCN 代管 OKE 叢集。您也可以使用專用 VCN。在此情況下,請使用 NAT 閘道透過公用網際網路授予叢集存取權。
- 運算資源配置
此架構使用 Oracle Linux 作業系統映像檔搭配 E3 或 E4 彈性資源配置與最少資源,來代管 OKE 叢集節點中的運算主機。如果您的應用程式需要更多的記憶體或核心,您可以選擇不同的資源配置。
- OKE
此架構會部署至 OKE 叢集作為目標端點。工作節點部署在 E3 或 E4 Oracle Linux 作業系統上。此架構使用叢集中的三個工作節點,但是您最多可以在每個叢集上建立 1,000 個節點。
- 容器映像檔登錄
此架構會將登錄檔部署為專用 Docker 登錄檔以供內部使用。Docker 映像檔會推送至登錄,並從登錄提取。您也可以使用「登錄」作為公用 Docker 登錄檔,讓任何具有網際網路存取與適當 URL 的知識的使用者能夠從 Oracle Cloud 中的公用儲存庫提取影像。
- 人工因素登錄
此架構會建立 OKE 叢集使用之軟體與組態的使用者自建物件。架構會建立供內部使用的物件登錄儲存庫。軟體二進位檔案、文字及部署組態會上傳至物件登錄儲存庫,並從中下載。
注意事項
部署此參照架構時,請注意下列幾點。
- DevOps 支援的建置
DevOps 支援 OKE、運算主機以及函數的部署。此架構會部署到 OKE 叢集。請考慮根據需求部署到其他端點。
- Linux 支援
運算執行處理的執行處理群組部署只支援 Linux 主機。
- 已部署的使用者自建物件
要使用 DevOps 部署的使用者自建物件必須在 OCI 使用者自建物件登錄或容器映像檔登錄儲存區域中。
- 群組應用程式
最好的作法是,將每個應用程式及其所有微服務組成單一專案。確定分割程序的價值主張已瞭解,並維護分處。