設定雲端部署的 CI/CD 業務進程

快速交付軟體對在雲端執行高效率的應用程式來說相當重要。Jenkins 是一項熱門產品,可針對 Oracle Cloud 中的工作負載自動執行 Ccontinuous Iintegration (CI) 和 Continuous Deployment (CD) 管線。

架構

在這個參照架構中,Jenkins 是由 Oracle Cloud Infrastructure 代管,可集中管理組建自動化,然後擴展部署規模。持續整合處理作業會使用 Oracle Cloud Infrastructure Registry (OCIR) 和 Container Engine for Kubernetes (OKE) 建立應用程式並進行部署。GitHub 可用來管理原始碼。

GitHub 提供 Web 掛載整合,因此 Jenkins 會在每次存入程式碼之後開始執行自動化組建和測試。範例 Web 應用程式會部署為 CI/CD 管線的一部分,一般使用者可以從 Container Engine for Kubernetes 叢集進行存取。為了簡化程序,基礎架構自動化會使用 Terraform。

在此參考架構中,Terraform 運用能夠在數種不同組態 (從單一 Jenkins VM 到控制器 (伺服器) 和代理程式 (工作者) 節點組態) 中部署 Jenkins 的 Terraform 模組。這表示 Jenkins 模組可併入非 Kubernetes 使用案例的其他架構部署中 (例如 APEX 應用程式開發、VM 上的 WebLogic 等等)。

代理程式組態表示可以重新設定環境,提供不同的運算執行處理來反映工作負載需求。這包括更換代理程式 VM 以避免累計舊相依性、暫時相依性衝突以及建立使用未宣告的相依性問題。

執行 Jenkins 的 VM 節點是使用預先定義的 VM 映像檔來設定,此映像檔已預先建置所有必要的軟體以支援 Jenkins。

下圖說明此參考架構。

cicd-oci.png 的描述如下
cicd-oci.png 圖解描述

cicd-oci-oracle.zip

此架構包含下列元件:
  • 地區

    Oracle Cloud Infrastructure 區域是一個區域化的地理區域,包含一或多個稱為可用性網域的資料中心。區域與其他區域無關,而且大型距離可以區隔 (跨國家或甚至洲)。

  • 可用性網域

    可用性網域是區域內獨立的獨立資料中心。每個可用性網域中的實體資源都會與其他可用性網域中的資源隔離,以提供容錯。可用性網域不會共用基礎架構,例如電源、冷卻或內部可用性網域網路。因此,一個可用性網域的失敗並不會影響區域中的其他可用性網域。

  • 虛擬雲端網路 (VCN) 和子網路

    Jenkins 是在部署在 VCN 中的虛擬機器 (VM) 運算執行處理上執行,您可以將它們區隔到子網路中。Jenkins 代管於區域公用子網路 A,Container Engine for Kubernetes 部署於區域公用子網路 B。

  • 運算執行處理

    Jenkins 建置到運算執行處理 VM。Container Engine for Kubernetes 叢集也會在運算執行處理上執行其節點。

  • Container Engine for Kubernetes

    Container Engine for Kubernetes 是一項完全受管理、可擴展的高可用性服務,可用來將容器化應用系統部署至雲端。您可以指定應用程式所需的運算資源,以及 Container Engine for Kubernetes 在現有租用戶的 Oracle Cloud Infrastructure 上佈建這些資源。

  • 登錄

    登錄是 Oracle 管理的登錄檔,可讓您簡化生產工作流程的開發。登錄可讓您輕鬆儲存、共用及管理開發人工因素,例如 Docker 影像。

  • Jenkins

    Jenkins 是一個開放原始碼自動化伺服器,可讓開發人員可靠地建立、測試及部署軟體。Jenkins 支援主要/代理程式模式,其中建置專案的工作負載由主要代理程式委派給多個代理程式節點。單一 Jenkins 安裝可以代管多個專案,或提供不同的環境來進行組建和測試。

建議

您的需求可能會與此處描述的架構不同。使用下列建議作為起點。

  • 運算資源配置

    此架構使用 Oracle Linux 作業系統映像檔搭配 VM.Standard2.1 資源配置來代管 Jenkins 伺服器和 Container Engine for Kubernetes 叢集節點。如果您的應用程式需要更多記憶體或核心,您可以選擇不同的資源配置。

  • VCN

    建立 VCN 時,請根據計畫連附至 VCN 中子網路的資源數目,決定所需的 CIDR 區塊數目和每個區塊的大小。使用標準專用 IP 位址空間內的 CIDR 區塊。

    建立 VCN 之後,您可以變更、新增及移除其 CIDR 區塊。

    此架構使用公用 VCN 代管 Container Engine for Kubernetes。您也可以使用專用 VCN。在此情況下,請使用 NAT 閘道透過公用網際網路授予叢集存取權。

  • Jenkins

    此架構會在運算執行處理上部署 Jenkins。Jenkins 主節點可用來建立 CI/CD 管線。如果您有多個可以平行建立和執行的管線,您可以使用 Jenkins 代理程式節點來開發更多管線。

  • Container Engine for Kubernetes

    此架構會建置 Container Engine for Kubernetes 叢集。工作節點部署在 VM.Standard2.1 Oracle Linux 作業系統上。此架構使用叢集中的三個工作節點,但是您最多可以在每個叢集上建立 1000 個節點。

  • 登錄

    此架構會將登錄檔部署為用 Docker 登錄檔以供內部使用。Docker 影像會發送至「登錄」,並從該處提取。您也可以使用「登錄」作為用 Docker 登錄,讓任何具有網際網路存取與適當 URL 的知識的使用者能夠從 Oracle Cloud 中的公用儲存區域提取影像。

考量

  • 擴展性

    您可以根據負載來更新 Container Engine for Kubernetes 叢集中的工作節點數目,以擴展應用程式。您也可以減少叢集中的工作節點數目來擴大。在叢集上建立服務時,您可以建立負載平衡器,在指派給該服務的節點之間分配流量。對於 Jenkins,您可以使用 Jenkins 主要節點,為多個管線建立更多代理程式。

  • 應用程式可用性

    容錯域可在單一可用性網域內提供最佳復原能力。您可以在多個可用性網域中部署執行相同作業的運算執行處理。此設計會透過簡介冗餘來移除單一失敗點。

  • 管理功能

    此架構使用 GitHub 上代管的範例 Web 應用程式來控制來源。組建管線中使用登錄來儲存應用程式的 Docker 組建映像檔。

  • 安全

    您可以使用原則來限制誰可以存取您公司的 Oracle Cloud Infrastructure 資源以及存取方式。

    Container Engine for Kubernetes 已與 Oracle Cloud Infrastructure Identity and Access Management (IAM) 整合,可輕鬆使用原生 Oracle Cloud Infrastructure 識別功能進行認證。

建置

GitHub 中提供部署此參照架構所需的程式碼。只要按一下即可將程式碼提取至 Oracle Cloud Infrastructure Resource Manager,建立堆疊並加以部署。或者,從 GitHub 下載程式碼至您的電腦、自訂程式碼,以及使用 Terraform CLI 部署架構。

  • 使用 Oracle Cloud Infrastructure Resource Manager 進行部署:
    1. 一下 部署到 Oracle Cloud

      如果您尚未登入,請輸入租用戶和使用者證明資料。

    2. 複查並接受條款與條件。
    3. 選取要建置堆疊的區域。
    4. 依照畫面上的提示和指示建立堆疊。
    5. 建立堆疊之後,按一下 Terraform 動作,然後選取畫。
    6. 等待工作完成,然後複查計畫。

      若要進行任何變更,請返回「堆疊詳細資訊」頁面,按一下編輯堆疊,然後進行必要的變更。然後再執行一次「畫」動作。

    7. 如果不需要進一步的變更,請返回「堆疊詳細資訊」頁面,按一下 Terraform 動作,然後選取用。
  • 使用 Terraform CLI 部署:
    1. 移至 GitHub
    2. 將程式碼下載或複製到您的本機電腦。
    3. 依照 README.md 中的指示進行。

變更日誌

此日誌會列出重大變更: