附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 憑證、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特有的值。
使用 CI/CD 管線將 Terraform 程式碼從 GitLab 儲存區域連線至 OCI 租用戶
簡介
在 Oracle Cloud Infrastructure (OCI) 或任何其他雲端工作時,我們需要清楚的自動化方向,而且基礎架構佈建最重要的自動化功能之一。
使用者想要使用 Terraform 佈建雲端基礎架構,當涉及一些程式碼時,他們想要在程式碼儲存區域上使用 Agile 開發做法進行管理,並以完整的 DevOps 方式進行管理。儲存區域設定初始程式碼之後,任何開發人員都可以提交新的程式碼,並部署從持續整合和持續交付 / 部署 (CI/CD) 管線觸發的新基礎架構。
在本教學課程中,我們將瞭解以靈活的方式開發 Terraform 自動化管理基礎架構管線所需的所有步驟,並使用 GitLab 作為儲存區域提供者。相同的程序適用於其他提供者,例如 GitHub 和 Azure DevOps。
目標
-
使用敏捷開發做法設定 Terraform 自動化管理基礎架構管線。
-
根據 GitLab 代理程式將連線至 OCI 租用戶的使用者設定 API 金鑰。
-
設定將推送所有 Terraform 程式碼的 GitLab 儲存區域,並設定初始 Terraform 程式碼以取得 OCI 租用戶詳細資訊。
-
設定以 YAML 為基礎的 CI/CD 管線,此管線會在儲存庫中植入並核准新代碼後立即觸發 Terraform 動作。
必要條件
-
必要存取 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 中允許的 OCI 和原則。使用者應可存取想要使用 Terraform 代碼建立或更新的對應資源。
-
存取 GitLab 以建立儲存區域、後續管線和程式碼植入。
-
對軟體開發之敏捷方法的基本理解。
作業 1:設定 API 金鑰
-
使用服務帳戶或管理員使用者登入您的 OCI 租用戶,並前往使用者設定值。
或
您也可以從 OCI IAM 主控台前往使用者。只要確保此使用者具備在 OCI 上建立或更新基礎架構的所有必要存取權即可。
-
移至使用者的資源區段,按一下 API 金鑰和新增 API 金鑰。您可以在此選擇下載新的公開金鑰和私密金鑰、上傳您的公開金鑰或貼上您的公開金鑰。
-
選取任一選項之後,請將金鑰儲存在便利的位置,然後將組態檔儲存如下圖所示。使用 Terraform 連線至您的租用戶時,您需要有此組態檔和私密金鑰。
工作 2:使用 Terraform 程式碼設定 GitLab 儲存區域
-
在 GitLab 上建立儲存區域,我們將使用此儲存區域植入 Terraform 程式碼。
-
開發連線至租用戶所需的 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 業務進程,並根據代碼合併觸發
-
將您的 Terraform 程式碼推送至 GitLab 儲存區域之後,即可建立管線並使用
yaml
檔案進行設定。 -
在儲存庫中建立
.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 命令
init
、plan
以及apply
都會在建置階段中執行,但您可以在所需的階段中據以使用它們。 - 此示範
yml
檔案是以執行 Oracle Linux 7 的 GitLab 代理程式為基礎。根據您的代理程式作業系統和網路可用性,檢查 Terraform 模組的可用性。
- 所有 Terraform 命令
相關連結
認可
- 作者 - Lovelesh Saxena (主要軟體工程架構師)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Connect Terraform Code from a GitLab Repository to an OCI Tenancy using a CI/CD Pipeline
F94453-01
March 2024
Copyright © 2024, Oracle and/or its affiliates.