附註:

使用 Oracle Cloud Infrastructure DevOps 自動化 OCI 資源管理程式部署

簡介

Oracle Cloud Infrastructure (OCI) 資源管理程式是一項完全託管的服務,可協助團隊管理及自動化基礎架構即程式碼 (IaC)。它可讓團隊透過 Terraform 組態進行協同合作、定義各種動作的權限、提供狀態鎖定以防止損毀、自動將所有狀態檔案儲存在永久儲存體,以及負責設定 Terraform 提供者。對於所有軟體的交付和部署,不僅僅是 Terraform,還有 OCI DevOps 、端對端、持續整合 / 持續交付 (CI/CD) 平台,適用於具有私有程式碼儲存庫、觸發程式、建置和部署管線等的開發人員。

OCI Resource Manager 內建 Terraform 自動化功能,並與多個原始程式碼控制系統整合,以實現基本 CI/CD。在本教學課程中,我們將探討如何使用 OCI DevOps 在 Terraform 程式碼變更上自動重新部署 OCI 資源管理程式堆疊,以擴展這些 CI/CD 功能。

流程

流程圖表

處理作業會從將新的 Terraform 組態推送至觸發組建和部署管線之程式碼儲存區域的使用者開始。這會建立一個使用 OCI 命令行介面 (CLI) 的 Shell 環境,以新的組態套用 OCI 資源管理程式堆疊。

目標

工作 1:設定 OCI DevOps 程式碼儲存區域

  1. 登入 OCI 主控台,瀏覽至開發人員服務DevOps專案,並建立將保留您 CI/CD 工作流程中所有資源的 DevOps 專案。

  2. 建立程式碼儲存區域並上傳您的 Terraform 組態。有大量的 Oracle 提供的範本可供您使用。在本教學課程中,Terraform 只會變更 OCI 通知主題的描述。

    resource "oci_ons_notification_topic" "test_notification_topic" {
        #Required
        compartment_id = <compartment_id>
        name = "RM_DevOps_Automation_Tutorial"
    
        #Optional
        description = "This is a test notification topic."
    }
    

    起始通知組態

工作 2:建立 Shell 使用者自建物件

我們必須先建立部署管線中使用的使用者自建物件。系統將會執行 Shell 命令檔以執行 OCI CLI,因此請建立命令規格類型的使用者自建物件。在本教學課程中,我們將使用使用者自建物件來源作為內嵌命令:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

建立 Shell 使用者自建物件

如需有關語法及其他參數的詳細資訊,請參閱指令規格文件。我們稍後會將更多詳細資訊新增至此命令檔。

作業 3:建立建置業務進程

部署管線可用來部署使用者自建物件。

  1. 建立部署管線和 Shell 類型的階段。

    建立 Shell 階段

  2. 按一下選取人工因素,然後選取在「任務 2」中建立的人工因素。選取符合您需求的資源配置網路組態

    選取使用者自建物件

    注意:原則:建立階段時,將會連結建議的原則清單,請務必新增這些原則。此外,我們的部署管線將會與 OCI Resource Manager 和 OCI Notifications 互動,因此請務必授予動態群組 ons-topicsorm-stacksorm-jobs 的存取權。如需有關每個服務之權限完整清單的詳細資訊,請參閱原則參照

作業 4:建立組建管線

即使我們不會建立任何使用者自建物件,我們仍需要組建管線來觸發部署管線。

  1. 建立組建管線和觸發部署類型的階段。

    建立組建階段

  2. 按一下選取部署管線,然後選取您在「任務 3」中建立的管線。

    選取部署管線

作業 5:建立觸發程式

我們需要建立在程式碼推播上呼叫的觸發程式。

  1. 瀏覽至觸發程式,然後按一下建立觸發程式

  2. 建立觸發程式頁面中,輸入下列資訊。

    • 來源連線:輸入 OCI 程式碼儲存區域
    • 選取程式碼儲存區域:選取在「工作 1」中建立的儲存區域。
  3. 按一下新增動作,然後輸入下列資訊。

    • 建置管線:選取在「作業 4」中建立的建置管線。
    • 事件:選取植入
    • 建立執行條件:根據您的使用案例輸入。在此範例中,我們將輸入下列資訊。
      • 來源分支:輸入主要
      • 要包含的檔案:輸入 main.tf

    建立觸發程式

作業 6:測試流程

以下是我們在教學課程中追蹤到此時間點的工作流程。

  1. 程式碼推送。
  2. 觸發程式。
  3. 組建管線。
  4. 部署管線。
  5. Shell 命令檔會執行 echo "Running RM apply command"

請先確認工作流程作業,再將更複雜性新增至 Shell 命令檔。

  1. 推送新程式碼。

    推播代碼

  2. 確認觸發組建管線。

    建置中

  3. 確認已觸發部署管線。

    正在進行部署

  4. 確認 Shell 命令檔執行成功

    測試流程成功

一切都如預期般運作。最後一項作業是重新設計 Shell 命令檔,以觸發「資源管理程式」堆疊。

作業 7:修改 Shell 命令檔以觸發資源管理程式堆疊

Shell 階段容器映像檔程式實際執行包括 Shell 解譯器、Shell 公用程式、CLI 以及更多工具。如需詳細資訊,請參閱 Shell Container Image Runtime Details

我們將利用 OCI CLI 呼叫資源管理程式。我們的 shell 程序檔目前看起來如下:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

若要修改 Shell 命令檔,請依照步驟進行:

  1. 建立工作。

    我們將撥打的第一通電話是 create-apply-job。這會在我們的「資源管理程式」堆疊上建立套用工作。我們也會將工作的 job_id 儲存為變數,以便在下一個步驟中參照工作。

    job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
    

    如需詳細資訊,請參閱 OCI CLI Command Reference:create-apply-job

  2. 取得工作狀態。

    我們需要檢查工作是否成功或失敗。若要這麼做,我們會將 job_id 傳送至傳回工作特性的 job get。具體而言,我們關心 lifecycle-state

    job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
    

    如需詳細資訊,請參閱 OCI CLI Command Reference:job get

  3. 分析職務狀態。

    新增邏輯,根據工作成功 (0) 或失敗 (1) 來變更結束代碼。

    if [ $job_state == SUCCEEDED ]; then
      echo "Resource Manager job succeeded"
      exit 0
    else
      echo "Resource Manager job failed"
      exit 1
    fi
    
  4. 在彙總之前的步驟並新增一些額外的列印陳述式之後,您的 shell 程序檔應該如下所示:

    version: 0.1
    component: command
    timeoutInSeconds: 1200
    steps:
    - type: Command
      timeoutinSeconds: 900
      name: Invoke RMS
      command: |
        echo "Running RM apply command"
        job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
        echo "RMS plan job id is:"
        echo $job_id
        job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
        echo "Apply job lifecycle-state is:"
        echo $job_state
        if [ $job_state == SUCCEEDED ]; then
          echo "Resource Manager job succeeded"
          exit 0
        else
          echo "Resource Manager job failed"
          exit 1
        fi
    

注意:這是顯示基本功能的簡單範例。您可依據需求自訂此指令檔。

作業 8:端對端測試

您的完整架構和流程應該如下所示:

流程圖表

確認架構的工作。

  1. 推送新程式碼。

    推播代碼

  2. 確認 Shell 命令檔執行成功。

    Shell 成功

  3. 確認已順利套用 Terraform。

    已更新通知主題

接下來的步驟

本教學課程示範如何使用 OCI DevOps 自動執行 OCI Resource Manager 堆疊部署。這是一個顯示基本流程的簡單範例。建議您採用所學的概念並在其上建置、根據使用案例量身打造,然後將它們併入現有的 CI/CD 管線中。

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center