ノート:

CI/CDパイプラインを使用した、GitLabリポジトリからOCIテナンシへのTerraformコードの接続

イントロダクション

Oracle Cloud Infrastructure(OCI)または他のクラウドで作業している間、あらゆる場所での自動化に関する明確な指示が必要であり、インフラストラクチャのプロビジョニングに必要な最も重要な自動化の1つです。

ユーザーは、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エージェントに基づいています。エージェントのOSとネットワークの可用性に基づいて、Terraformモジュールの可用性をチェックします。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。