Build Pipeline es una secuencia de etapas automatizadas que el código recorre desde el momento del commit hasta un artefacto listo para desplegar. El pipeline incluye compilación, ejecución de pruebas, análisis estático y preparación del paquete de lanzamiento. Según Google Cloud DORA, 2025, los equipos con un pipeline bien configurado logran 440 veces más rapidez en la entrega de cambios en comparación con equipos sin automatización.
Puntos clave
Build Pipeline es una secuencia formalizada de pasos que se ejecutan automáticamente con cada cambio de código. Cada paso verifica un aspecto determinado de calidad: compilabilidad, corrección de pruebas, ausencia de vulnerabilidades, cumplimiento del estilo de código. Si algún paso falla, el pipeline se detiene.
El concepto de pipeline proviene de la línea de producción — como en una fábrica donde cada estación agrega valor al producto. En el desarrollo, cada etapa agrega confianza de que el código está listo para su lanzamiento. Los pipelines modernos se definen como código (Pipeline as Code) y se almacenan en el repositorio Git junto con el proyecto.
Según Continuous Delivery Foundation, 2025, un build pipeline maduro reduce el tiempo desde el commit hasta el lanzamiento de semanas a minutos. Esto se logra mediante la automatización completa y la ejecución paralela de etapas independientes.
En lugar de configurar a través de una interfaz web, un pipeline moderno se describe en archivos YAML o Groovy. Jenkinsfile, `.gitlab-ci.yml`, `.github/workflows/build.yml` son ejemplos de Pipeline as Code. Ventajas: versionado, revisión de código, reproducibilidad.
Jenkins tiene dos sintaxis. Declarativo — más simple, con una estructura clara de stages/steps. Scripteado — más flexible, basado en Groovy. Para la mayoría de los proyectos, se recomienda el enfoque declarativo por ser más legible y predecible.
Un build pipeline típico para una aplicación móvil incluye varias etapas clave. Cada etapa cumple su función y filtra problemas potenciales en una fase temprana.
El pipeline comienza clonando el repositorio. Luego se instalan las dependencias: paquetes Gradle/Maven, CocoaPods, SPM (Swift Package Manager), paquetes npm. El uso de almacenamiento en caché en esta etapa acelera las compilaciones posteriores en un 50-70%.
Antes de la compilación, se ejecutan herramientas de calidad de código: Detekt o ktlint para Kotlin, SwiftLint para Swift, ESLint para JavaScript. Verifican el cumplimiento del estilo de código y encuentran posibles errores a nivel de análisis de código.
El código se compila a formato binario y las pruebas unitarias se ejecutan en paralelo. Para Android es `./gradlew testDebugUnitTest`, para iOS — `xcodebuild test -scheme App -destination 'platform=iOS Simulator'`. El fallo de las pruebas detiene inmediatamente el pipeline.
name: Mobile Build Pipeline
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew detekt
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew testDebugUnitTest
- run: ./gradlew jacocoTestReport
build-release:
needs: [lint, unit-tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v4
with:
name: release-apk
path: app/build/outputs/apk/release/app-release.apk
Después de una compilación exitosa, se ejecutan las pruebas que requieren que la aplicación se ejecute: Espresso para Android, XCTest/XCUITest para iOS, Detox para React Native. En esta etapa, el artefacto se despliega en un simulador o dispositivo real a través de servicios de farm (Firebase Test Lab, BrowserStack, Sauce Labs).
La configuración adecuada del pipeline determina la eficiencia de todo el proceso CI/CD. La configuración incluye la elección de disparadores, la definición de etapas paralelas y secuenciales, la parametrización y la integración con servicios externos.
Principales disparadores: push al repositorio, pull request (especialmente para revisión de código con verificaciones automáticas), creación de etiqueta Git (para compilaciones de lanzamiento), programación (nightly build). El disparador de pull request es el más práctico para el trabajo en equipo, ya que identifica problemas antes de la fusión del código.
Las etapas independientes (linting, pruebas en diferentes versiones de SO) deben ejecutarse en paralelo para acelerar. Las dependientes — secuencialmente. Los sistemas CI modernos gestionan automáticamente las tareas paralelas, distribuyéndolas entre los agentes disponibles.
Un pipeline largo ralentiza el ciclo de desarrollo y reduce la motivación del equipo. La optimización del tiempo de compilación es una de las principales tareas de un ingeniero DevOps al trabajar con build pipelines.
Gradle Build Cache guarda los resultados de compilaciones anteriores. Si el código fuente de un módulo no ha cambiado, no se recompila. La compilación incremental en Swift y Kotlin funciona de manera similar. El tamaño de la caché puede alcanzar gigabytes, pero el ahorro de tiempo oscila entre el 30% y el 70%.
Las pruebas unitarias se pueden ejecutar en múltiples agentes simultáneamente, distribuyendo las clases de prueba. Sharding es una técnica de dividir las pruebas en grupos (shards). GitHub Actions admite `strategy.matrix`, Jenkins — Parallel Test Executor, Gradle — `--parallel --max-workers`.
Cada etapa adicional agrega tiempo. Analice el pipeline regularmente: ¿qué etapas se pueden combinar? Por ejemplo, el linting puede ejecutarse en paralelo con la compilación en lugar de antes. Las pruebas de integración — solo para pull requests, no para cada commit.
pipeline {
agent any
options {
timestamps()
timeout(time: 30, unit: 'MINUTES')
}
stages {
stage('Parallel Checks') {
parallel {
stage('Lint') {
steps { sh './gradlew detekt' }
}
stage('Unit Tests') {
steps { sh './gradlew test' }
}
}
}
stage('Build') {
steps { sh './gradlew assembleRelease' }
}
}
}
El build pipeline es un elemento crítico de la cadena de suministro de software y su seguridad no puede ignorarse. El compromiso del pipeline puede llevar a la inyección de código malicioso en el artefacto de lanzamiento, afectando a todos los usuarios de la aplicación.
Ataques conocidos: SolarWinds (2020), Codecov (2021), 3CX (2023) — todos explotaron vulnerabilidades en pipelines CI/CD. Vector común — un atacante obtiene acceso a las credenciales del servidor de compilación y modifica el código en la etapa de compilación. Resultado — un lanzamiento malicioso firmado con un certificado legítimo.
Nunca almacene claves de firma, tokens de API y contraseñas en el repositorio o en variables de entorno del sistema CI en texto plano. Use secretos del sistema CI (GitHub Secrets, GitLab CI Variables), HashiCorp Vault, AWS Secrets Manager. Minimice el acceso a los secretos — cada pipeline solo debe recibir las claves necesarias para sus pasos específicos.
Cada artefacto que sale del pipeline debe estar firmado criptográficamente y contener attestation — prueba de origen (provenance). Herramientas: framework SLSA, attestation in-toto, cosign para firmar contenedores. La verificación de la firma debe realizarse antes del despliegue en cualquier entorno.
name: Secure Build Pipeline
on: [push]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan dependencies
run: ./gradlew dependencyCheckAnalyze
- name: SAST scan
run: ./gradlew detekt
sign-attest:
needs: security-scan
runs-on: ubuntu-latest
steps:
- run: ./gradlew assembleRelease
- name: Sign APK
run: jarsigner -keystore ${{ secrets.KEYSTORE }} \
app-release.apk ${{ secrets.KEY_ALIAS }}
- name: Generate provenance
uses: actions/attest-build-provenance@v1
El build pipeline es un sistema complejo que requiere monitoreo constante. Sin métricas, es imposible determinar si el pipeline se ha ralentizado y qué etapa se ha convertido en un cuello de botella.
Monitoree: duración total del pipeline, tiempo de cada etapa, tasa de fallos de compilación, tiempo de espera en cola. Para un equipo grande (>20 desarrolladores), se recomienda configurar un panel en Grafana o Datadog con estadísticas agregadas por semana/mes.
Cada fallo del pipeline requiere una respuesta. Configure notificaciones en mensajeros (Slack, Telegram, Discord) con un enlace al registro de errores y el nombre del autor del commit. Para fallos críticos — PagerDuty u Opsgenie con escalamiento.
Herramientas como Act (para GitHub Actions) o Jenkins Pipeline Unit Test permiten ejecutar el pipeline localmente sin hacer commit. Esto acelera el desarrollo y la depuración de pipelines, especialmente al agregar nuevas etapas o cambiar la configuración.
Preguntas frecuentes
Build pipeline es una parte del pipeline CI/CD responsable de la compilación y preparación del artefacto. El pipeline CI/CD es más amplio: incluye despliegue, monitoreo posterior al lanzamiento y verificaciones de infraestructura.
Con cada push al repositorio. Para pull requests — obligatorio antes de la fusión. Nightly build — para pruebas largas (e2e, rendimiento) que no son necesarias para cada commit.
Para proyectos nuevos — YAML (GitHub Actions, GitLab CI, Bitrise). Es legible y simple. Groovy (Jenkins) es más potente pero más difícil de mantener. La elección depende del sistema CI utilizado.
Métodos principales: almacenamiento en caché de dependencias, ejecución paralela de etapas independientes, sharding de pruebas, exclusión de pruebas largas del pipeline para cada commit, uso de agentes de compilación potentes.
Analice los registros: qué prueba específica falló y por qué. Si la prueba es inestable (flaky) — agregue un mecanismo de reintento. Si es un error real — corrija el código, no desactive la prueba. Desactivar pruebas es el último recurso.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también