La integración y entrega continua (CI/CD) son prácticas esenciales en el desarrollo moderno de software que permiten a los equipos de desarrollo automatizar la integración de código y la entrega de aplicaciones. En este tema, aprenderás cómo implementar CI/CD en tus proyectos de Ionic para mejorar la eficiencia y la calidad del desarrollo.

Objetivos de Aprendizaje

  • Comprender los conceptos básicos de CI/CD.
  • Configurar un pipeline de CI/CD para un proyecto Ionic.
  • Integrar herramientas populares de CI/CD como GitHub Actions y CircleCI.
  • Automatizar pruebas y despliegues.

Conceptos Básicos de CI/CD

Integración Continua (CI)

La integración continua 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 es verificada por una build automatizada, lo que permite detectar errores rápidamente.

Entrega Continua (CD)

La entrega continua extiende la integración continua al automatizar el despliegue de la aplicación a un entorno de producción o preproducción. Esto asegura que el software puede ser liberado de manera segura y rápida en cualquier momento.

Configuración de un Pipeline de CI/CD

Herramientas Populares de CI/CD

  • GitHub Actions: Una plataforma de CI/CD integrada en GitHub que permite automatizar flujos de trabajo directamente desde el repositorio.
  • CircleCI: Una plataforma de CI/CD que se integra con GitHub y Bitbucket para automatizar la construcción, prueba y despliegue de aplicaciones.

Ejemplo de Configuración con GitHub Actions

Paso 1: Crear un Archivo de Workflow

Crea un archivo llamado ci.yml en el directorio .github/workflows/ de tu proyecto.

name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install

    - name: Build the app
      run: npm run build

    - name: Run tests
      run: npm test

Explicación del Archivo

  • name: Nombre del workflow.
  • on: Eventos que desencadenan el workflow (push y pull_request en la rama main).
  • jobs: Define los trabajos que se ejecutarán.
    • build: Nombre del trabajo.
    • runs-on: Especifica el sistema operativo en el que se ejecutará el trabajo.
    • steps: Pasos a seguir en el trabajo.
      • Checkout code: Clona el repositorio.
      • Set up Node.js: Configura Node.js.
      • Install dependencies: Instala las dependencias del proyecto.
      • Build the app: Construye la aplicación.
      • Run tests: Ejecuta las pruebas.

Ejemplo de Configuración con CircleCI

Paso 1: Crear un Archivo de Configuración

Crea un archivo llamado config.yml en el directorio .circleci/ de tu proyecto.

version: 2.1

jobs:
  build:
    docker:
      - image: circleci/node:14
    steps:
      - checkout
      - run:
          name: Install dependencies
          command: npm install
      - run:
          name: Build the app
          command: npm run build
      - run:
          name: Run tests
          command: npm test

workflows:
  version: 2
  build_and_test:
    jobs:
      - build

Explicación del Archivo

  • version: Versión de la configuración de CircleCI.
  • jobs: Define los trabajos que se ejecutarán.
    • build: Nombre del trabajo.
    • docker: Especifica la imagen de Docker a usar.
    • steps: Pasos a seguir en el trabajo.
      • checkout: Clona el repositorio.
      • run: Ejecuta comandos en el contenedor Docker.
  • workflows: Define los flujos de trabajo.
    • build_and_test: Nombre del flujo de trabajo.
    • jobs: Lista de trabajos a ejecutar en el flujo de trabajo.

Automatización de Pruebas y Despliegues

Pruebas Automatizadas

Las pruebas automatizadas son esenciales para asegurar la calidad del código. Puedes integrar pruebas unitarias y de extremo a extremo en tu pipeline de CI/CD.

Ejemplo de Pruebas Unitarias

"scripts": {
  "test": "ng test --watch=false"
}

Ejemplo de Pruebas de Extremo a Extremo

"scripts": {
  "e2e": "ng e2e --protractor-config=e2e/protractor-ci.conf.js"
}

Despliegue Automatizado

El despliegue automatizado permite liberar nuevas versiones de tu aplicación de manera rápida y segura.

Ejemplo de Despliegue con GitHub Actions

- name: Deploy to Firebase
  uses: w9jds/firebase-action@master
  with:
    args: deploy --only hosting
  env:
    FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

Ejercicio Práctico

Ejercicio 1: Configurar CI/CD con GitHub Actions

  1. Crea un archivo ci.yml en el directorio .github/workflows/ de tu proyecto.
  2. Configura el archivo para que ejecute los pasos de construcción y pruebas.
  3. Realiza un commit y verifica que el workflow se ejecute correctamente en GitHub.

Ejercicio 2: Configurar CI/CD con CircleCI

  1. Crea un archivo config.yml en el directorio .circleci/ de tu proyecto.
  2. Configura el archivo para que ejecute los pasos de construcción y pruebas.
  3. Realiza un commit y verifica que el workflow se ejecute correctamente en CircleCI.

Soluciones

Solución al Ejercicio 1

name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'

    - name: Install dependencies
      run: npm install

    - name: Build the app
      run: npm run build

    - name: Run tests
      run: npm test

Solución al Ejercicio 2

version: 2.1

jobs:
  build:
    docker:
      - image: circleci/node:14
    steps:
      - checkout
      - run:
          name: Install dependencies
          command: npm install
      - run:
          name: Build the app
          command: npm run build
      - run:
          name: Run tests
          command: npm test

workflows:
  version: 2
  build_and_test:
    jobs:
      - build

Conclusión

En esta sección, has aprendido los conceptos básicos de CI/CD y cómo configurar pipelines de CI/CD utilizando herramientas populares como GitHub Actions y CircleCI. La automatización de pruebas y despliegues es crucial para mantener la calidad y la eficiencia en el desarrollo de aplicaciones Ionic. Con estas habilidades, estarás mejor preparado para gestionar y escalar tus proyectos de manera efectiva.

En el próximo módulo, exploraremos temas avanzados como la optimización del rendimiento y el uso de Capacitor en tus aplicaciones Ionic. ¡Sigue adelante!

© Copyright 2024. Todos los derechos reservados