Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
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
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
- Vuelva a desplegar automáticamente una pila de OCI Resource Manager cuando cambie Terraform.
Tarea 1: Configuración del repositorio de código DevOps de OCI
-
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.
-
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." }
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"
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.
-
Cree un pipeline de despliegue y una etapa de tipo Shell.
-
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.
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
yorm-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.
-
Cree un pipeline de creación y una etapa del tipo Despliegue de disparador.
-
Haga clic en Seleccionar pipeline de despliegue y seleccione el pipeline que ha creado en la tarea 3.
Tarea 5: Creación de un Disparador
Necesitamos crear un disparador que llame a transferencias de código.
-
Vaya a Disparadores y haga clic en Crear disparador.
-
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.
-
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.
Tarea 6: Prueba del flujo
Este es el flujo de trabajo que hemos seguido hasta este punto en el tutorial.
- Transferencia de código.
- Disparador.
- Pipeline de compilación.
- Pipeline de despliegue.
- 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.
-
Insertar nuevo código.
-
Confirmar pipeline de compilación disparado.
-
Confirmar pipeline de despliegue disparado.
-
Confirmar ejecución correcta de script de shell
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:
-
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 guardaremosjob_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.
-
Obtiene el estado de trabajo.
Debemos comprobar si el trabajo se ha realizado correctamente o ha fallado. Para ello, transferiremos
job_id
ajob get
, que devuelve las propiedades del trabajo. En concreto, nos preocupamos porlifecycle-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.
-
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
-
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:
Confirme el funcionamiento de la arquitectura.
-
Insertar nuevo código.
-
Confirme que el script de shell se ejecute correctamente.
-
Confirme que Terraform se ha aplicado correctamente.
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.
Enlaces relacionados
Agradecimientos
- Autores: Cody Brinkman (arquitecto de nube), Qian Chen (miembro del personal técnico, herramientas y servicios para desarrolladores de OCI) y Nandan Kandregula (gestor de desarrollo de software, herramientas y servicios para desarrolladores de OCI)
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.
Use Oracle Cloud Infrastructure DevOps to Automate OCI Resource Manager Deployments
G16598-01
October 2024