附註:

使用 CI/CD 管線將 Terraform 程式碼從 GitLab 儲存區域連線至 OCI 租用戶

簡介

在 Oracle Cloud Infrastructure (OCI) 或任何其他雲端工作時,我們需要清楚的自動化方向,而且基礎架構佈建最重要的自動化功能之一。

使用者想要使用 Terraform 佈建雲端基礎架構,當涉及一些程式碼時,他們想要在程式碼儲存區域上使用 Agile 開發做法進行管理,並以完整的 DevOps 方式進行管理。儲存區域設定初始程式碼之後,任何開發人員都可以提交新的程式碼,並部署從持續整合和持續交付 / 部署 (CI/CD) 管線觸發的新基礎架構。

在本教學課程中,我們將瞭解以靈活的方式開發 Terraform 自動化管理基礎架構管線所需的所有步驟,並使用 GitLab 作為儲存區域提供者。相同的程序適用於其他提供者,例如 GitHub 和 Azure DevOps。

目標

必要條件

作業 1:設定 API 金鑰

  1. 使用服務帳戶或管理員使用者登入您的 OCI 租用戶,並前往使用者設定值

    開啟使用者設定值

    您也可以從 OCI IAM 主控台前往使用者。只要確保此使用者具備在 OCI 上建立或更新基礎架構的所有必要存取權即可。

  2. 移至使用者的資源區段,按一下 API 金鑰新增 API 金鑰。您可以在此選擇下載新的公開金鑰和私密金鑰、上傳您的公開金鑰或貼上您的公開金鑰。

    新增 API 金鑰

  3. 選取任一選項之後,請將金鑰儲存在便利的位置,然後將組態檔儲存如下圖所示。使用 Terraform 連線至您的租用戶時,您需要有此組態檔和私密金鑰。

    儲存組態檔

工作 2:使用 Terraform 程式碼設定 GitLab 儲存區域

  1. 在 GitLab 上建立儲存區域,我們將使用此儲存區域植入 Terraform 程式碼。

    GitLab 儲存區域

  2. 開發連線至租用戶所需的 Terraform 程式碼。在本教學課程中,我們將使用 Terraform 程式碼連線至租用戶,並取得可用性網域的詳細資訊。

    • provider.tf.

      provider "oci" {
                tenancy_ocid     = var.tenancy_ocid
                user_ocid        = var.user_ocid
                fingerprint      = var.fingerprint
                private_key_path = var.private_key_path
                region           = var.region
      }
      
      terraform {
        required_providers {
          oci = {
            version = ">= 3.0.0"
          }
        }
      }
      
    • variables.tf.

      variable "tenancy_ocid" {
              type = string
              default = "ocid1.tenancy.oc1..aaaaaaaacko"
      }
      variable "user_ocid" {
              type = string
              default = "ocid1.user.oc1..aaaaaaaafelq"
      }
      variable "fingerprint" {
              type = string
              default = "72:d4:6c:f8:89"
      }
      variable "private_key_path" {
              type = string
              default =  "oracleidentitycloudservice_user_key.pem"
      }
      variable "region" {
              type = string
              default = "us-ashburn-1"
      }
      
    • oracleidentitycloudservice_user_key.pem.

      content of your private key
      
    • availability-domains.tf.

      data "oci_identity_availability_domains" "ads" {
          #Required
          compartment_id = var.tenancy_ocid
      }
      
    • outputs.tf.

      # The "name" of the availability domain to be used for the compute instance.
      output "name-of-first-availability-domains" {
        value = data.oci_identity_availability_domains.ads.availability_domains[0].name
      }
      

    注意:使用已儲存組態檔中的值,在 variables.tf 檔案中輸入參數值。

作業 3:設定以 YAML 為基礎的 CI/CD 業務進程,並根據代碼合併觸發

  1. 將您的 Terraform 程式碼推送至 GitLab 儲存區域之後,即可建立管線並使用 yaml 檔案進行設定。

    GitLab 儲存區域 CICD

  2. 在儲存庫中建立 .gitlab-ci.yml 檔案,然後新增下列程式碼。

    build-job:
      stage: build
      script:
        - echo "Hello Gitlab"
        - uname -r
        - yum install -y yum-utils
        - yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
        - sed -i 's/$releasever/7/g' /etc/yum.repos.d/hashicorp.repo
        - yum -y install terraform
        - pwd
        - ls -ltra
        - terraform init
        - terraform plan
        - terraform apply -auto-approve
    
    
    test-job1:
      stage: test
      script:
        - echo "This job tests something"
    
    test-job2:
      stage: test
      script:
        - echo "This job tests something, but takes more time than test-job1."
        - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
        - echo "which simulates a test that runs 20 seconds longer than test-job1"
        - sleep 5
    
    deploy-prod:
      stage: deploy
      script:
        - echo "This job deploys something from the main branch."
      environment: dev
    

    注意:

    • 所有 Terraform 命令 initplan 以及 apply 都會在建置階段中執行,但您可以在所需的階段中據以使用它們。
    • 此示範 yml 檔案是以執行 Oracle Linux 7 的 GitLab 代理程式為基礎。根據您的代理程式作業系統和網路可用性,檢查 Terraform 模組的可用性。

認可

其他學習資源

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

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