Note:

Uso de Oracle Cloud Infrastructure DevOps para automatizar los despliegues de OCI Resource Manager

Introducción

Oracle Cloud Infrastructure (OCI) Resource Manager es un servicio totalmente gestionado que ayuda a los equipos a gestionar y automatizar su infraestructura como código (IaC). Permite a los equipos colaborar en la configuración de Terraform, definir permisos para diversas acciones, proporcionar bloqueo de estado para evitar la corrupción, almacenar automáticamente todos los archivos de estado en el almacenamiento persistente y se encarga de configurar el proveedor de Terraform. Para la entrega y el despliegue de todo el software, no solo de Terraform, hay OCI DevOps, una plataforma de integración continua/entrega continua (CI/CD) integral para desarrolladores con repositorios de código privado, disparadores, creación y despliegue de pipelines, etc.

OCI Resource Manager ha incorporado automatización para Terraform e integraciones con varios sistemas de control de código fuente para lograr una integración y despliegue continuos básicos. En este tutorial, veremos cómo podemos utilizar OCI DevOps para ampliar estas capacidades de integración y despliegue continuos mediante el nuevo despliegue automático de pilas de OCI Resource Manager en cambios de código de Terraform.

Flujo

Diagrama de Flujo

El proceso comienza con un usuario que transfiere una nueva configuración de Terraform al repositorio de código, que dispara los pipelines de compilación y despliegue. Como resultado, se crea un entorno de shell que utiliza la interfaz de línea de comandos (CLI) de OCI para aplicar la pila de OCI Resource Manager con la nueva configuración.

Objetivos

Tarea 1: Configuración del repositorio de código DevOps de OCI

  1. Conéctese a la consola de OCI, vaya a Developer Services, DevOps, Projects y cree un proyecto DevOps que contendrá todos los recursos del flujo de trabajo de integración y despliegue continuos.

  2. Cree un repositorio de código y cargue la configuración de Terraform. Hay muchas plantillas proporcionadas por Oracle que puede utilizar. En este tutorial, Terraform simplemente cambia la descripción de un tema de OCI Notifications.

    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."
    }
    

    Configuración de notificación inicial

Tarea 2: Creación de un artefacto de shell

Primero tenemos que crear el artefacto utilizado en el pipeline de despliegue. Como ejecutaremos un script de shell para ejecutar la CLI de OCI, cree un artefacto de tipo Especificación de comando. En este tutorial, utilizaremos el origen de artefacto para que esté en línea con los siguientes comandos:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Crear artefacto de shell

Para obtener más información sobre la sintaxis y parámetros adicionales, consulte la documentación de especificación de comandos. Agregaremos más detalles a este script más adelante.

Tarea 3: Creación de un pipeline de despliegue

Los pipelines de despliegue se utilizan para desplegar artefactos.

  1. Cree un pipeline de despliegue y una etapa de tipo Shell.

    Crear etapa de shell

  2. Haga clic en Seleccionar artefacto y seleccione el artefacto creado en la tarea 2. Seleccione la Unidad y la Configuración de red que satisfagan sus requisitos.

    Seleccionar artefacto

    Nota: Políticas: al crear etapas, se enlazará una lista de políticas recomendadas, asegúrese de agregarlas. Además, nuestro pipeline de despliegue interactuará con OCI Resource Manager y OCI Notifications, así que asegúrese de otorgar a su grupo dinámico acceso a ons-topics, orm-stacks y orm-jobs. Para obtener más información sobre una lista completa de permisos para cada servicio, consulte Referencia de políticas.

Tarea 4: Creación de un pipeline de creación

Aunque no crearemos ningún artefacto, todavía necesitamos un pipeline de compilación para disparar nuestro pipeline de despliegue.

  1. Cree un pipeline de creación y una etapa del tipo Despliegue de disparador.

    Crear etapa de creación

  2. Haga clic en Seleccionar pipeline de despliegue y seleccione el pipeline que ha creado en la tarea 3.

    Seleccionar pipeline de despliegue

Tarea 5: Creación de un Disparador

Necesitamos crear un disparador que llame a transferencias de código.

  1. Vaya a Disparadores y haga clic en Crear disparador.

  2. En la página Crear disparador, introduzca la siguiente información.

    • Conexión de origen: introduzca repositorio de código de OCI.
    • Seleccionar repositorio de código: seleccione el repositorio creado en la tarea 1.
  3. Haga clic en Agregar acción e introduzca la siguiente información.

    • Pipeline de compilación: seleccione el pipeline de compilación creado en la tarea 4.
    • Evento: seleccione Empujar.
    • Condiciones de ejecución de compilación: introduzca según su caso de uso. En este ejemplo, introduciremos la siguiente información.
      • Rama de origen: introduzca main.
      • Archivos para incluir: introduzca main.tf.

    Crear disparador

Tarea 6: Prueba del flujo

Este es el flujo de trabajo que hemos seguido hasta este punto en el tutorial.

  1. Transferencia de código.
  2. Disparador.
  3. Pipeline de compilación.
  4. Pipeline de despliegue.
  5. El script de shell ejecuta echo "Running RM apply command".

Confirme el funcionamiento del flujo de trabajo antes de agregar más complejidad al script de shell.

  1. Insertar nuevo código.

    Código push

  2. Confirmar pipeline de compilación disparado.

    Creación en curso

  3. Confirmar pipeline de despliegue disparado.

    Despliegue en Curso

  4. Confirmar ejecución correcta de script de shell

    Flujo de prueba correcto

Todo funciona como se esperaba. La última tarea es remodelar nuestro script de shell para disparar la pila del gestor de recursos.

Tarea 7: Modificación del script de shell para disparar la pila del gestor de recursos

El tiempo de ejecución de imagen de contenedor de almacenamiento provisional de Shell incluye intérpretes de shell, utilidades de shell, CLI y muchas más herramientas. Para obtener más información, consulte Detalles de tiempo de ejecución de imagen de contenedor de shell.

Utilizaremos la CLI de OCI para llamar a Resource Manager. Nuestro script de shell se ve así:

version: 0.1
component: command
timeoutInSeconds: 1200
steps:
 - type: Command
   timeoutinSeconds: 900
   name: Invoke RMS
   command: |
     echo "Running RM apply command"

Para modificar la secuencia de comandos de shell, siga estos pasos:

  1. Crear un trabajo.

    La primera llamada que haremos es create-apply-job. Esto crea un trabajo de aplicación en nuestra pila de Resource Manager. También guardaremos job_id del trabajo como variable para hacer referencia al trabajo en el siguiente paso.

    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)
    

    Para obtener más información, consulte Referencia de comandos de la CLI de OCI: create-apply-job.

  2. Obtiene el estado de trabajo.

    Debemos comprobar si el trabajo se ha realizado correctamente o ha fallado. Para ello, transferiremos job_id a job get, que devuelve las propiedades del trabajo. En concreto, nos preocupamos por lifecycle-state.

    job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
    

    Para obtener más información, consulte Referencia de comandos de la CLI de OCI: job get.

  3. Analice el estado del trabajo.

    Agregue una lógica para cambiar el código de salida en función de si el trabajo se ha realizado correctamente (0) o ha fallado (1).

    if [ $job_state == SUCCEEDED ]; then
      echo "Resource Manager job succeeded"
      exit 0
    else
      echo "Resource Manager job failed"
      exit 1
    fi
    
  4. Después de agregar los pasos anteriores y agregar algunas sentencias de impresión adicionales, el script de shell debe tener un aspecto similar al siguiente:

    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
    

Nota: Este es un ejemplo sencillo que muestra la funcionalidad básica. Puede personalizar el script según sus necesidades.

Tarea 8: Prueba completa

Su arquitectura y flujo completos deben tener este aspecto:

Diagrama de Flujo

Confirme el funcionamiento de la arquitectura.

  1. Insertar nuevo código.

    Código push

  2. Confirme que el script de shell se ejecute correctamente.

    Shell correcto

  3. Confirme que Terraform se ha aplicado correctamente.

    Se actualizó el tema de la notificación.

Pasos Siguientes

En este tutorial se muestra cómo automatizar los despliegues de pila de OCI Resource Manager con OCI DevOps. Este es un ejemplo sencillo que muestra el flujo básico. Se le anima a que tome los conceptos aprendidos y los desarrolle sobre ellos, los adapte a su caso de uso y los incorpore en sus pipelines de integración y despliegue continuos existentes.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.

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