Note:

Conexión del código de Terraform de un repositorio GitLab a un arrendamiento de OCI mediante un pipeline de integración y despliegue continuos

Introducción

Al trabajar en Oracle Cloud Infrastructure (OCI) o en cualquier otra nube, necesitamos indicaciones claras sobre la automatización en todos los lugares, y una de las automatizaciones más importantes necesarias es el aprovisionamiento de infraestructura.

Los usuarios desean aprovisionar su infraestructura en la nube con Terraform y, cuando se trata de código, desean gestionarla mediante prácticas de desarrollo de Agile en un repositorio de código y gestionarla de una forma DevOps completa. Una vez configurado el repositorio con el código inicial, cualquier desarrollador puede enviar un nuevo código y desplegar la nueva infraestructura disparada desde un pipeline de integración y despliegue continuos (CI/CD).

En este tutorial, comprenderemos todos los pasos necesarios para configurar el pipeline de infraestructura gestionada por automatización de Terraform de una forma ágil de desarrollo y utilizar GitLab como nuestro proveedor de repositorios. El mismo proceso se aplica a otros proveedores como GitHub y Azure DevOps.

Objetivos

Requisitos

Tarea 1: Configuración de las claves de API

  1. Conéctese a su arrendamiento de OCI con la cuenta de servicio o el usuario administrador y vaya a Configuración de usuario.

    Abrir configuración de usuario

    O bien:

    También puede ir al usuario desde la consola de OCI IAM. Solo asegúrate de que este usuario tenga todo el acceso necesario para crear o actualizar la infraestructura en OCI.

  2. Vaya a la sección Recursos del usuario, haga clic en Claves de API y Agregar clave de API. Aquí, puede optar por descargar las nuevas claves públicas y privadas, cargar su clave pública o pegar su clave pública.

    Agregar clave de API

  3. Una vez que haya seleccionado cualquiera de las opciones, guarde las claves en una ubicación conveniente y guarde el archivo de configuración como se muestra en la siguiente imagen. Necesitará este archivo de configuración y esta clave privada al conectarse a su arrendamiento con Terraform.

    Guardar archivo de configuración

Tarea 2: Configuración del repositorio GitLab con código de Terraform

  1. Cree un repositorio en GitLab. Utilizaremos este repositorio para transferir el código de Terraform.

    GitLab Repositorio

  2. Desarrolle el código de Terraform necesario para conectarse al arrendamiento. En este tutorial, utilizaremos el código de Terraform para conectarnos al arrendamiento y obtener los detalles de los dominios de disponibilidad.

    • 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
      }
      

    Nota: Utilice los valores del archivo de configuración guardado para introducir los valores de parámetro en el archivo variables.tf.

Tarea 3: Configuración de un pipeline de integración y despliegue continuos basado en YAML y un activador basado en la combinación de códigos

  1. Una vez que el código de Terraform se haya transferido al repositorio GitLab, vamos a crear el pipeline y configurarlo mediante un archivo yaml.

    GitLab CICD de repositorio

  2. Cree un archivo .gitlab-ci.yml en el repositorio y agregue el siguiente código.

    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
    

    Nota:

    • Todos los comandos de Terraform init, plan y apply se ejecutan en la etapa de creación, pero puede utilizarlos según corresponda en la etapa que necesite.
    • Este archivo de demostración yml se basa en agentes GitLab que ejecutan Oracle Linux 7. Compruebe la disponibilidad de los módulos de Terraform en función del sistema operativo del agente y la disponibilidad de la red.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.