Implementación de CI/CD con Azure DevOps: Guía detallada

Darwingrisalesg
Pragma
Published in
6 min readAug 5, 2024

En el desarrollo de software moderno, la eficiencia, la calidad y la velocidad son factores cruciales. La implementación de prácticas de integración continua (CI) y entrega continua (CD) permite a los equipos de desarrollo entregar software de manera más rápida y confiable. Azure DevOps es una suite de herramientas de desarrollo proporcionada por Microsoft que facilita la implementación de CI/CD. Este artículo proporciona una introducción a CI/CD utilizando Azure DevOps, destacando sus beneficios y ofreciendo una guía básica para comenzar.

¿Qué es CI/CD?

Integración Continua (CI) es una práctica de desarrollo en la que los desarrolladores integran su código en un repositorio compartido varias veces al día. Cada integración se verifica mediante la ejecución automática de pruebas y la construcción del código, lo que ayuda a detectar errores rápidamente.

Entrega Continua (CD) es una práctica donde el código que ha pasado las pruebas automáticas se despliega automáticamente en un entorno de producción o de preproducción. Esto asegura que el código siempre esté en un estado desplegable.

Beneficios de CI/CD

  • Detección Temprana de Errores: Al integrar y probar el código frecuentemente, los errores se detectan y corrigen más rápidamente.
  • Entrega Rápida y Frecuente: Los cambios en el código se despliegan más rápidamente, permitiendo una entrega continua de nuevas funcionalidades y mejoras.
  • Mayor Calidad del Código: La automatización de pruebas y despliegues asegura que el código sea de alta calidad y reduce el riesgo de errores en producción.
  • Feedback Rápido: Los desarrolladores reciben feedback inmediato sobre el estado de su código, lo que facilita un ciclo de desarrollo más ágil y eficiente.

Azure DevOps: Una Visión General

Azure DevOps es un conjunto de servicios que ayudan a los equipos de desarrollo a planificar, desarrollar, entregar y operar aplicaciones. Los servicios clave incluyen:

  • Azure Repos: Repositorios Git privados para el control de versiones.
  • Azure Pipelines: CI/CD para cualquier lenguaje, plataforma y nube.
  • Azure Boards: Herramientas de planificación de trabajo con tableros Kanban, backlogs, sprints y dashboards personalizados.
  • Azure Test Plans: Herramientas de prueba manuales y exploratorias.
  • Azure Artifacts: Gestión de paquetes y dependencias.

Configuración de CI/CD con Azure DevOps

1. Crear un Proyecto en Azure DevOps

  • Inicia sesión en Azure DevOps: Accede a tu cuenta de Azure DevOps desde dev.azure.com.
  • Crea un nuevo proyecto: Proporciona un nombre descriptivo y una breve descripción para tu proyecto. Esto ayudará a identificar el propósito y alcance del proyecto en el futuro.

2. Configurar un Repositorio

  • Navega a la sección de Repositorios (Repos): Una vez que el proyecto esté creado, ve a la sección de Repos donde puedes manejar tu control de versiones.
  • Crea un nuevo repositorio Git: Elige crear un nuevo repositorio y selecciona Git como el sistema de control de versiones. Esto es clave para el manejo eficiente de versiones y colaboraciones en tu código.
  • Clona el repositorio en tu máquina local: Copia la URL del repositorio y usa un comando Git en tu terminal para clonarlo en tu máquina local, permitiendo que puedas trabajar en tu código desde tu entorno de desarrollo.
git clone https://dev.azure.com/tu-proyecto/_git/tu-repositorio
  • Agrega tu código fuente: Después de clonar, añade tu código fuente al repositorio localmente y haz un commit inicial. Luego, empuja los cambios al repositorio remoto.
git add .
git commit -m "Initial commit"
git push origin main

3. Crear una Pipeline de CI

Las pipelines son un componente fundamental en CI/CD, ya que automatizan la construcción, prueba y despliegue de tu código.

  • Ve a la sección de Pipelines y selecciona “Create Pipeline”: Esto te permitirá configurar una nueva pipeline para tu repositorio.
  • Selecciona el repositorio donde está almacenado tu código: Azure DevOps se integrará automáticamente con tu repositorio de Git.
  • Elige un archivo YAML para definir la pipeline o usa el editor visual para configurarla: El archivo YAML es un formato de configuración que define los pasos que la pipeline debe seguir.
  • Aquí tienes un ejemplo básico de un archivo YAML para una aplicación Node.js:
trigger:
- main

pool:
vmImage: 'ubuntu-latest'

steps:
- task: UseNode@2
inputs:
version: '12.x'
- script: |
npm install
npm run build
npm test
displayName: 'Install dependencies, build and test'

Explicación del YAML:

trigger:

trigger:
- main

Esto especifica que la pipeline se ejecutará automáticamente cada vez que se haga un commit en la rama main. De esta manera, cada cambio en la rama principal se verifica y prueba inmediatamente.

pool:

pool:
vmImage: 'ubuntu-latest'

Define el entorno donde se ejecutará la pipeline. En este caso, se usa una máquina virtual (VM) con la imagen de Ubuntu más reciente. Esto asegura que las herramientas y dependencias necesarias estén disponibles.

steps:

steps:
- task: UseNode@2
inputs:
version: '12.x'
- script: |
npm install
npm run build
npm test
displayName: 'Install dependencies, build and test'

Aquí se detallan los pasos que la pipeline seguirá:

  • UseNode@2: Este paso instala la versión 12.x de Node.js en la VM. Es importante asegurar que la versión correcta de Node.js esté disponible para que el código se ejecute de manera consistente.
  • script: Este bloque ejecuta una serie de comandos de shell:
  • npm install: Instala todas las dependencias necesarias definidas en el archivo package.json.
  • npm run build: Construye la aplicación. Esto suele implicar la compilación de código fuente en archivos ejecutables o paquetes listos para despliegue.
  • npm test: Ejecuta las pruebas automatizadas para asegurar que la funcionalidad de la aplicación es correcta.
  • displayName: Proporciona un nombre descriptivo para este conjunto de pasos, facilitando la identificación y depuración en caso de fallos.

4. Crear una Pipeline de CD

Una vez configurada la pipeline de CI, el siguiente paso es crear una pipeline de CD para desplegar automáticamente el código probado en entornos específicos.

  • Crea una nueva pipeline de CD: Similar a la pipeline de CI, pero enfocada en el despliegue.
  • Define los entornos de despliegue: Puedes configurar múltiples entornos como desarrollo, pruebas y producción.
  • Configura los pasos para desplegar tu aplicación: Por ejemplo, si estás desplegando en Azure App Service, podrías usar el siguiente YAML:
trigger:
- main

pool:
vmImage: 'ubuntu-latest'

steps:
- task: UseNode@2
inputs:
version: '12.x'
- script: |
npm install
npm run build
displayName: 'Build application'

- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Your Azure Subscription>'
appType: 'webApp'
WebAppName: '<Your Web App Name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'

Explicación del YAML:

trigger:

trigger:
- main

Define que la pipeline se ejecutará automáticamente en la rama main, lo que asegura que los cambios en la rama principal se desplieguen tan pronto como estén listos.

pool:

pool:
vmImage: 'ubuntu-latest'

Igual que en la pipeline de CI, aquí se especifica que la pipeline de CD se ejecutará en una VM con Ubuntu.

steps:

steps:
- task: UseNode@2
inputs:
version: '12.x'
- script: |
npm install
npm run build
displayName: 'Build application'

Estos pasos son similares a los de la pipeline de CI, asegurando que la aplicación esté lista para ser desplegada:

  • UseNode@2: Asegura que Node.js 12.x esté instalado en el entorno de despliegue.
  • script: Ejecuta los comandos para instalar dependencias y construir la aplicación.
  • displayName: Facilita la identificación de este conjunto de pasos en los logs de la pipeline.

Despliegue en Azure App Service:

- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Your Azure Subscription>'
appType: 'webApp'
WebAppName: '<Your Web App Name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'

Este paso es crucial, ya que maneja el despliegue de la aplicación:

  • AzureRmWebAppDeployment@4: Utiliza esta tarea específica para desplegar la aplicación en Azure App Service.
  • azureSubscription: Especifica la suscripción de Azure que se utilizará para el despliegue.
  • appType: Define el tipo de aplicación, en este caso, una aplicación web (webApp).
  • WebAppName: El nombre de la aplicación web en Azure donde se realizará el despliegue.
  • packageForLinux: Especifica la ruta al paquete que se desplegará, que en este caso es un archivo ZIP generado durante el proceso de construcción.

5. Ejecutar y Monitorear las Pipelines

  • Ejecución manual o automática: Puedes ejecutar las pipelines manualmente o configurarlas para que se ejecuten automáticamente con cada commit.
  • Monitoreo de las pipelines: Utiliza la sección de Pipelines en Azure DevOps para monitorear las ejecuciones, revisando los logs y los resultados de las pruebas. Esto te ayudará a identificar y solucionar problemas rápidamente.

Conclusión

La adopción de CI/CD con Azure DevOps puede transformar el proceso de desarrollo de software al proporcionar una integración y entrega más rápida y confiable. Con Azure DevOps, los equipos pueden automatizar la construcción, prueba y despliegue de aplicaciones, mejorando la calidad del software y acelerando el tiempo de entrega. Al seguir los pasos descritos en este artículo, puedes comenzar a implementar CI/CD en tus proyectos, asegurando que tu software esté siempre en un estado desplegable y listo para ser liberado.

--

--