Introducción a la Automatización de Flujos de Trabajo CI/CD
En el ciclo de vida del desarrollo de software moderno, CI/CD (Integración Continua y Despliegue Continuo) ya no es un lujo, sino una necesidad. Automatizar sus procesos de construcción, prueba y despliegue permite a los equipos entregar software de alta calidad más rápido y con menos errores manuales. Sin embargo, configurar estas canalizaciones desde cero puede ser una tarea desalentadora y lenta.
Aquí es donde entran en juego las plantillas de automatización de flujos de trabajo CI/CD y los generadores. Al usar plantillas estandarizadas, puede acelerar su viaje DevOps, garantizar la coherencia entre proyectos y adherirse a las mejores prácticas de la industria sin reinventar la rueda. En esta guía, exploraremos las plataformas CI/CD más populares y proporcionaremos plantillas listas para usar para optimizar su automatización.
GitHub Actions y GitLab CI: Canalizaciones Modernas Nativas de la Nube
GitHub Actions y GitLab CI se han convertido en los líderes de la industria para CI/CD nativo de la nube debido a su profunda integración con los sistemas de control de versiones.
Generador de flujos de trabajo de GitHub Actions (GitHub Actions workflow generator)
Un generador de flujos de trabajo de GitHub Actions le ayuda a crear archivos .github/workflows/*.yml adaptados a la pila tecnológica de su proyecto. Ya sea que esté construyendo una aplicación Node.js, un script de Python o una imagen de Docker, una buena plantilla garantiza que sus secretos se manejen de forma segura y que sus trabajos se ejecuten de manera eficiente.
Plantilla de .github/workflows (Ejemplo de Node.js)
Aquí tiene una plantilla de .github/workflows robusta para un proyecto Node.js que incluye linting, pruebas y construcción:
name: Node.js CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm test
- run: npm run build
Plantilla y Generador de GitLab CI (gitlab CI template & .gitlab-ci.yml generator)
GitLab CI utiliza un único archivo, .gitlab-ci.yml, para definir toda la canalización. El uso de un generador de .gitlab-ci.yml o una plantilla de GitLab CI le permite definir canalizaciones complejas de múltiples etapas con facilidad.
Plantilla básica de .gitlab-ci.yml
stages:
- build
- test
- deploy
build-job:
stage: build
script:
- echo "Compilando el código..."
- npm install
- npm run build
artifacts:
paths:
- dist/
test-job:
stage: test
script:
- echo "Ejecutando pruebas unitarias..."
- npm test
deploy-prod:
stage: deploy
script:
- echo "Desplegando al servidor de producción..."
only:
- main
Canalizaciones de Jenkinsfile: El Estándar Empresarial
Jenkins sigue siendo la columna vertebral de CI/CD para muchas empresas debido a su inmenso ecosistema de complementos y flexibilidad.
Generador de Jenkinsfile y Plantilla de Canalización (Jenkinsfile generator & Jenkinsfile pipeline template)
Un generador de Jenkinsfile simplifica la creación de canalizaciones basadas en Groovy. El uso de una plantilla de canalización de Jenkinsfile garantiza que sus etapas estén claramente definidas y que su entorno esté debidamente aislado.
Plantilla de Jenkinsfile Declarativo
pipeline {
agent any
environment {
APP_NAME = 'mi-aplicacion-genial'
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
echo 'Desplegando a Producción...'
// Agregue sus comandos de despliegue aquí
}
}
}
post {
always {
cleanWs()
}
failure {
echo '¡La canalización falló! Revise los registros.'
}
}
}
CircleCI, Travis, Drone y Bitbucket
Más allá de los "Tres Grandes", varias otras plataformas ofrecen excelentes capacidades de automatización.
Generador de .circleci/config.yml
CircleCI utiliza un formato YAML altamente optimizado. Un generador de .circleci/config.yml le ayuda a gestionar "orbs" (paquetes de configuración reutilizables).
version: 2.1
jobs:
build_and_test:
docker:
- image: cimg/node:20.0
steps:
- checkout
- run: npm install
- run: npm test
workflows:
sample:
jobs:
- build_and_test
Generador de .travis.yml y .drone.yml
Travis CI es conocido por su simplicidad, mientras que Drone CI es famoso por su enfoque centrado en contenedores. Utilice un generador de .travis.yml o un generador de .drone.yml para comenzar rápidamente.
Plantilla de Travis CI:
language: node_js
node_js:
- "20"
script:
- npm install
- npm test
Plantilla de Drone CI:
kind: pipeline
type: docker
name: default
steps:
- name: test
image: node:20
commands:
- npm install
- npm test
Generador de Bitbucket Pipelines (bitbucket-pipelines.yml generator)
Para los equipos que usan Bitbucket, el generador de bitbucket-pipelines.yml es la herramienta de referencia.
image: node:20
pipelines:
default:
- step:
caches:
- node
script:
- npm install
- npm test
branches:
main:
- step:
script:
- npm install
- npm test
- npm run deploy
FAQ: Errores Comunes de CI/CD y Soluciones
¿Por qué mi "flujo de trabajo no se encuentra (workflow not found)"?
Esto suele suceder si el archivo YAML está en el directorio equivocado (por ejemplo, .github/workflow en lugar de .github/workflows) o tiene un error de sintaxis. Verifique la ruta del archivo y use un linter de YAML.
¿Qué debo hacer si el "runner está fuera de línea (runner offline)"?
Si está utilizando ejecutores alojados por usted mismo, asegúrese de que el servicio del ejecutor esté activo y tenga conectividad a Internet. Para los ejecutores alojados por GitHub/GitLab, consulte sus páginas de estado para ver si hay interrupciones del servicio.
¿Cómo solucionar errores de "permiso denegado (permission denied)"?
Verifique si sus scripts de CI/CD tienen permisos de ejecución (por ejemplo, chmod +x script.sh). Además, verifique que el usuario que ejecuta el agente de CI tenga acceso a los directorios de destino o al socket de Docker.
¿Por qué falta una "variable de entorno (environment variable missing)"?
Asegúrese de haber definido sus secretos y variables en la configuración de la plataforma (Repository Secrets en GitHub, CI/CD Variables en GitLab). Recuerde que los secretos a menudo no se pasan a las PR de forks por razones de seguridad.
Impulse su Desarrollo con Tool3M
Construir canalizaciones de CI/CD perfectas es solo una parte del viaje del desarrollador. En Tool3M, ofrecemos una amplia gama de herramientas en línea gratuitas y de alta calidad para ayudarlo con todo, desde el formateo de JSON hasta el procesamiento de imágenes.
¡Consulte nuestras otras herramientas y haga que su flujo de trabajo sea aún más eficiente hoy mismo!