附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
使用 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 資源管理程式堆疊。
目標
- 變更 Terraform 時自動重新部署 OCI 資源管理程式堆疊。
工作 1:設定 OCI DevOps 程式碼儲存區域
-
登入 OCI 主控台,瀏覽至開發人員服務、DevOps 、專案,並建立將保留您 CI/CD 工作流程中所有資源的 DevOps 專案。
-
建立程式碼儲存區域並上傳您的 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"
如需有關語法及其他參數的詳細資訊,請參閱指令規格文件。我們稍後會將更多詳細資訊新增至此命令檔。
作業 3:建立建置業務進程
部署管線可用來部署使用者自建物件。
-
建立部署管線和 Shell 類型的階段。
-
按一下選取人工因素,然後選取在「任務 2」中建立的人工因素。選取符合您需求的資源配置和網路組態。
注意:原則:建立階段時,將會連結建議的原則清單,請務必新增這些原則。此外,我們的部署管線將會與 OCI Resource Manager 和 OCI Notifications 互動,因此請務必授予動態群組
ons-topics
、orm-stacks
和orm-jobs
的存取權。如需有關每個服務之權限完整清單的詳細資訊,請參閱原則參照。
作業 4:建立組建管線
即使我們不會建立任何使用者自建物件,我們仍需要組建管線來觸發部署管線。
-
建立組建管線和觸發部署類型的階段。
-
按一下選取部署管線,然後選取您在「任務 3」中建立的管線。
作業 5:建立觸發程式
我們需要建立在程式碼推播上呼叫的觸發程式。
-
瀏覽至觸發程式,然後按一下建立觸發程式。
-
在建立觸發程式頁面中,輸入下列資訊。
- 來源連線:輸入 OCI 程式碼儲存區域。
- 選取程式碼儲存區域:選取在「工作 1」中建立的儲存區域。
-
按一下新增動作,然後輸入下列資訊。
- 建置管線:選取在「作業 4」中建立的建置管線。
- 事件:選取植入。
- 建立執行條件:根據您的使用案例輸入。在此範例中,我們將輸入下列資訊。
- 來源分支:輸入主要。
- 要包含的檔案:輸入 main.tf 。
作業 6:測試流程
以下是我們在教學課程中追蹤到此時間點的工作流程。
- 程式碼推送。
- 觸發程式。
- 組建管線。
- 部署管線。
- Shell 命令檔會執行
echo "Running RM apply command"
。
請先確認工作流程作業,再將更複雜性新增至 Shell 命令檔。
-
推送新程式碼。
-
確認觸發組建管線。
-
確認已觸發部署管線。
-
確認 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 命令檔,請依照步驟進行:
-
建立工作。
我們將撥打的第一通電話是
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 。
-
取得工作狀態。
我們需要檢查工作是否成功或失敗。若要這麼做,我們會將
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 。
-
分析職務狀態。
新增邏輯,根據工作成功 (0) 或失敗 (1) 來變更結束代碼。
if [ $job_state == SUCCEEDED ]; then echo "Resource Manager job succeeded" exit 0 else echo "Resource Manager job failed" exit 1 fi
-
在彙總之前的步驟並新增一些額外的列印陳述式之後,您的 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:端對端測試
您的完整架構和流程應該如下所示:
確認架構的工作。
-
推送新程式碼。
-
確認 Shell 命令檔執行成功。
-
確認已順利套用 Terraform。
接下來的步驟
本教學課程示範如何使用 OCI DevOps 自動執行 OCI Resource Manager 堆疊部署。這是一個顯示基本流程的簡單範例。建議您採用所學的概念並在其上建置、根據使用案例量身打造,然後將它們併入現有的 CI/CD 管線中。
相關連結
認可
- 作者 - Cody Brinkman (雲端架構師)、Qian Chen (技術人員成員、OCI 開發人員工具與服務) 和 Nandan Kandregula (OCI 開發人員工具和服務軟體開發經理)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Use Oracle Cloud Infrastructure DevOps to Automate OCI Resource Manager Deployments
G16606-01
October 2024