CI/CD
El CI/CD de GitHub se basa en la definición de workflows mediante archivos YAML ubicados en la carpeta .github/workflows del repositorio. Estos workflows permiten automatizar tareas como la construcción, prueba y despliegue de aplicaciones cada vez que se produce un evento relevante en el repositorio (por ejemplo, un push, pull request o publicación de una release).
Estructura básica de un workflow
Un workflow de GitHub Actions está compuesto por uno o varios jobs, que a su vez contienen pasos (steps) que definen las acciones a ejecutar. Los elementos principales son:
- name: Define el nombre del workflow o del job, facilitando su identificación en la interfaz de GitHub.
 - on: Especifica los eventos que activarán la ejecución del workflow, como 
push,pull_request,schedule, entre otros. - jobs: Agrupa los diferentes jobs que se ejecutarán dentro del workflow. Cada job puede ejecutarse en paralelo o depender de la finalización de otros jobs.
 - runs-on: Indica el sistema operativo o runner donde se ejecutará el job (por ejemplo, 
ubuntu-latest,windows-latest,macos-latest). - steps: Lista los pasos a ejecutar dentro de un job. Cada step puede ejecutar comandos de shell o utilizar acciones predefinidas de la comunidad o propias.
 - uses: Permite reutilizar acciones de terceros o propias, facilitando la integración de herramientas y la automatización de tareas comunes.
 - env: Define variables de entorno que estarán disponibles durante la ejecución del job o de pasos específicos.
 - needs: Permite establecer dependencias entre jobs, asegurando que un job no se ejecute hasta que otro haya finalizado correctamente.
 - with: Proporciona parámetros de configuración para las acciones utilizadas en los steps.
 
Ejemplo básico de workflow en GitHub Actions
nname: CI
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
jobs:
  build:
    name: Build
    runs-on: ubuntu-latest
    container:
      image: node:14
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Instalar dependencias
        run: npm install
      - name: Construir aplicación
        run: npm run build
      - name: Guardar artifacts de build
        uses: actions/upload-artifact@v4
        with:
          name: build
          path: build/
  test:
    name: Test
    runs-on: ubuntu-latest
    container:
      image: node:14
    needs: build
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Descargar artifacts de build
        uses: actions/download-artifact@v4
        with:
          name: build
          path: build/
      - name: Ejecutar pruebas
        run: npm test
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Descargar artifacts de build
        uses: actions/download-artifact@v4
        with:
          name: build
          path: build/
      - name: Ejecutar despliegue
        run: ./deploy.sh
En este ejemplo:
- El workflow se activa en cada push o pull request a la rama 
main. - El pipeline está compuesto por tres jobs: 
build,testydeploy. - Cada job puede especificar el entorno de ejecución, en este caso usando la imagen de Docker 
node:14para las etapas de build y test, asegurando un entorno consistente para la compilación y pruebas. - En el job build, se clona el repositorio, se instalan las dependencias y se construye la aplicación. Los archivos generados en la carpeta 
build/se guardan como artifacts mediante la acciónactions/upload-artifact, permitiendo que estén disponibles para jobs posteriores. - El job test depende del job 
build(usandoneeds: build), descarga los artifacts generados y ejecuta los tests de la aplicación. - El job deploy depende del job 
test(usandoneeds: test), descarga los artifacts de build y ejecuta el script de despliegue (./deploy.sh). - La estructura declarativa del workflow facilita la organización, reutilización y mantenimiento del pipeline, permitiendo además la integración con otras herramientas y la extensión de funcionalidades según las necesidades del proyecto.
 
Se recomienda revisar la documentación oficial de GitHub Actions para ampliar las capacidades y personalizar los workflows según los requisitos de tu entorno.
Para mantener el workflow limpio y reutilizable, puedes crear una carpeta llamada .github/scripts o similar donde almacenar scripts auxiliares y funciones comunes, evitando la repetición de código y simplificando la definición de los jobs.