使用 Oracle Cloud Infrastructure DevOps 服務和 Oracle Cloud Infrastructure 函數建置 CI/CD 管線

這個軟體快速交付對有效率地在雲端執行您的應用系統而言至關重要。Oracle DevOps 服務為開發者提供持續的整合與部署 (CI/CD) 平台。您可以使用 DevOps 服務在 Oracle Cloud 上輕鬆建立、測試及部署軟體和應用程式。DevOps 建置及部署管線可減少變更導向的錯誤,並縮短客戶建置及部署版本的時間。

這項服務也提供專用的 Git 儲存區域以儲存您的程式碼,並且支援連線至外部程式碼儲存區域。無論您是要將工作負載移轉至 Oracle Cloud Infrastructure (OCI) 從企業內部部署或其他雲端,或在 OCI 上開發新的應用系統,都可以使用 DevOps 服務簡化軟體交付生命週期。

架構

在此參照架構中,您將使用 OCI DevOps 和 OCI 函數服務來建立和部署 python 應用程式。

應用程式來源代碼由 DevOps 程式碼儲存庫代管。一般使用者會將程式碼確認至程式碼儲存區域。程式碼儲存區域的新確認將會觸發組建管線的啟動。建置管線遵循使用者定義的流程,建立要部署到 OCI 函數服務的函數使用者自建物件。建立的輸出會儲存在容器登錄中,作為 Docker 映像檔。部署管線接著會使用容器登錄的內建映像檔,部署到 OCI Functions 環境。下列架構圖說明如何使用預設影像和自訂影像 (藉由使用 Dockerfile) 來建立及部署應用程式。

為了簡化此範例 CI/CD 工作流程的設定,此範例應用程式會使用 Terraform 自動建立與配置 DevOps 資源。

下圖說明此參照架構。

cicd-pipe-devops-function-arch.png 的描述如下
cicd-pipe-devops-function-arch.png 圖解的描述

cicd-pipe-devops-function-arch-oracle.zip

此架構具有下列元件:
  • 區域

    OCI 區域是一個局部地理區域,其中包含一或多個資料中心 (稱為可用性網域)。區域獨立於其他區域,而且很大距離可加以區隔 (跨國家或甚至是大陸)。此架構使用單一區域。

  • DevOps 專案

    實行 CI/CD 工作流程所需的 DevOps 資源邏輯群組。DevOps 資源可以是使用者自建物件、建立管線、部署管線、外部連線、觸發程式及環境。DevOps 專案可讓您輕鬆為所有 DevOps 資源啟用記錄、監控及通知。

  • 建立管線

    建立管線會從您的原始程式碼儲存區域取得確認 ID,然後使用該原始程式碼執行您的組建指示。建置管線可定義一組建立處理作業的階段:建置、測試及編譯軟體使用者自建物件、將使用者自建物件遞送至 OCI 儲存區域,以及選擇性地觸發部署。您可以在建置規格檔案中定義建置執行的流程和指示。

  • 代碼儲存庫

    DevOps 服務代管的專用 Git 儲存區域。您可以利用 DevOps 程式碼儲存區域儲存、管理、開發原始碼。

  • 部署管線

    將一組使用者自建物件傳遞至目標環境的一連串步驟。您軟體發行版本的流程與邏輯可藉由定義能夠以序列或平行方式執行的階段來控制。

  • 部署階段

    階段是執行管線期間發生的個別動作。DevOps 部署管線包含下列預先定義的階段類型,供您用於您的版本處理作業:

    • 累計部署:Oracle Container Engine for Kubernetes (OKE)、Function 或 instance 群組的增量版次
    • 等待:等待 N 秒
    • 手動核准:若已指定核准則繼續進行;若核准遭拒絕,則停止。
    • 呼叫函數:呼叫函數以執行自訂作業或整合,並傳遞要求參數的使用者自建物件。
  • DevOps 使用者自建物件

    DevOps 使用者自建物件是構成您應用程式之任何檔案、二進位、套裝程式、資訊清單或影像的參照或指標。建立使用者自建物件時,請通知 Oracle DevOps 實際使用者自建物件的來源位置。DevOps 支援 OCI 容器映像檔登錄和 OCI 使用者自建物件登錄儲存區域。

  • 使用者自建物件儲存區域

    使用者自建物件儲存區域會建立儲存區域以群組類似的使用者自建物件。儲存區域建立後,您可以上傳使用者自建物件至儲存區域。這些使用者自建物件是遞送至目標部署環境的文字檔、二進位檔以及部署清單集合。每個使用者自建物件都有一個名稱,此名稱是由其路徑:版本組成。此路徑是用來組織使用者自建物件的字串。

  • OCI 日誌記錄和通知服務

    OCI 日誌記錄服務會儲存與部署有關的日誌。部署程式實際執行輸出和建置的最終結果會顯示為日誌項目。OCI 通知服務可讓您查看部署專案及其資源的最新狀態,並執行任何必要的動作。例如,當重要事件 (例如部署管線中的階段等待核准) 時,系統會通知您。當您收到通知訊息時,您可以前往 DevOps 部署管線並核准階段。

  • 部署環境

    環境是部署使用者自建物件的客戶運算資源集合。環境可以是功能、運算虛擬機器 (VM) 或裸機執行處理或 OKE 叢集。

    • Oracle Kubernetes 叢集 :OCI Container Engine for Kubernetes (OKE) 是一個完全託管、擴展且高可用性的服務,可供您用來將容器化應用系統部署到雲端。
    • 運算執行處理 :OCI 運算服務可讓您在雲端佈建及管理運算主機。您可以使用符合您的 CPU、記憶體、網路頻寬以及儲存資源需求的資源資源配置,部署運算執行處理。
    • 函數:Oracle Functions 是一款完全受管理、多租戶、高可擴充的隨選功能即服務平台。此服務是以企業級 Oracle Cloud Infrastructure 為基礎,由 Fn Project 開放原始碼引擎提供技術支援。
    環境可以位於與部署管線區域不同的 OCI 區域中。這樣的區隔可讓開發者使用相同的部署管線在多個 OCI 區域中部署。

建議

請使用下列建議作為起點,但請注意您的需求可能會與此處所述的架構不同。
  • 函數的記憶體配置與逾時
    您可以透過下列設定更新 func.yaml 檔案以更改組態:
  • 虛擬雲端網路 (VCN)

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

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

    此架構使用公用 VCN 來代管 OKE。您也可以使用專用 VCN。在此情況下,請使用 NAT 閘道讓叢集可透過公用網際網路進行存取。

  • 容器映像檔登錄

    此架構將登錄部署為供內部使用的專用 Docker 登錄。Docker 映像檔會被植入登錄中並進行提取。您也可以使用登錄作為公用 Docker 登錄,讓任何具備網際網路存取權的使用者並瞭解適當的 URL,從 OCI 中的公用儲存區域提取映像檔。

注意事項

使用 OCI DevOps 和 OCI 函數服務建置和部署 Python 應用程式時,請考慮:

  • DevOps 支援 OKE、運算主機及函數的部署。
  • 將執行處理群組部署至「運算」時,僅支援 Linux 主機。
  • 使用 DevOps 部署的使用者自建物件必須位於 OCI 使用者自建物件登錄或容器映像檔登錄儲存區域中。
  • 最佳做法是將每個應用程式與其所有微服務群組成單一專案。

部署

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

  • 使用 Oracle Cloud Infrastructure Resource Manager 中的範例堆疊部署:
    1. 按一下 部署至 Oracle Cloud

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

    2. 選取要部署堆疊的區域。
    3. 請依照畫面上的提示與指示建立堆疊。
    4. 建立堆疊之後,按一下「Terraform 動作」,然後選取計畫
    5. 等待工作完成,並複查計畫。

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

    6. 如果不需要進一步變更,請返回「堆疊詳細資訊」頁面,按一下 Terraform 動作,然後選取套用
  • 在 GitHub 中使用 Terraform 程式碼部署:
    1. 前往 GitHub
    2. 複製或下載儲存庫至您的本機電腦。
    3. 遵循 README 文件中的指示。

探索更多

若要深入瞭解 Oracle DevOps 服務,請參閱下列資源:

致謝

  • 作者:拉胡爾 M R
  • Contributor:L Lukasz Feldman