Fundamentos del pipeline
Cómo funciona
bitbucket-pipelines.ymlArchivo de configuración en la raíz del repo
Docker containersCada step se ejecuta en su propio contenedor
TriggersPush, PR, tag, programado o manual
Minutos de buildCuota según el plan contratado
Habilitar Pipelines
# Repository Settings → Pipelines → Enable # Agregar bitbucket-pipelines.yml a la raíz del repo # El primer push activa el pipeline
bitbucket-pipelines.yml
Configuración mínima
image: node:20 pipelines: default: - step: script: - npm install - npm test
Pipelines por rama
pipelines: branches: main: - step: script: - npm run build - npm run deploy
Pipelines de tag y pull request
pipelines: tags: 'v*': - step: script: - npm run release pull-requests: '**': - step: script: - npm test
Steps
Opciones de step
nameNombre visible del step
imageSobreescribir la imagen Docker global
scriptLista de comandos shell a ejecutar
size1x (4 GB) o 2x (8 GB) de memoria
max-timeTiempo de espera en minutos (por defecto 120)
triggermanual para steps solo manuales
Steps en paralelo
- parallel: - step: name: "Lint" script: - npm run lint - step: name: "Test" script: - npm test
Step manual
- step: name: "Deploy to Production" trigger: manual script: - ./deploy.sh prod
Variables
Tipos de variables
Variables de repositorioSettings → Pipelines → Variables
Variables de despliegueCon scope a un entorno de despliegue
Variables segurasCifradas, enmascaradas en los logs
Variables de pipelineDefinidas en línea en el YAML
Usar variables
pipelines: default: - step: script: - echo $MY_VAR - docker login -u $DOCKER_USER -p $DOCKER_PASS
Variables integradas
$BITBUCKET_COMMITSHA completo del commit
$BITBUCKET_BRANCHNombre de la rama
$BITBUCKET_TAGNombre del tag (pipelines de tag)
$BITBUCKET_BUILD_NUMBERNúmero de build incremental
$BITBUCKET_REPO_SLUGSlug del repositorio
Caché
Cachés predefinidos
- step: caches: - node # ~/.npm - pip # ~/.cache/pip - docker # caché de capas Docker script: - npm install - npm test
Caché personalizado
definitions: caches: gradle: ~/.gradle/caches mylibs: vendor/libs pipelines: default: - step: caches: - gradle script: - ./gradlew build
Comportamiento del caché
DuraciónLos cachés expiran después de 7 días
AlcanceCompartido entre todos los pipelines del repo
LimpiarPipelines → Caches → Delete
Artefactos
Pasar archivos entre steps
- step: name: "Build" script: - npm run build artifacts: - dist/** - step: name: "Deploy" script: - ls dist/ # artefactos disponibles - ./deploy.sh
Opciones de artefactos
artifactsPatrones glob de archivos a pasar
DescargaDisponibles en steps posteriores automáticamente
Tamaño máximo1 GB por step
RetenciónDisponibles 14 días después del build
Despliegues
Entornos de despliegue
- step: name: "Deploy Staging" deployment: staging script: - ./deploy.sh staging - step: name: "Deploy Production" deployment: production trigger: manual script: - ./deploy.sh prod
Tipos de entorno
testEntorno de pruebas
stagingEntorno de pre-producción
productionEntorno live, rastreado en el dashboard
Patrones comunes
Build y push de Docker
- step: services: - docker script: - docker build -t myapp:$BITBUCKET_COMMIT . - docker login -u $DOCKER_USER -p $DOCKER_PASS - docker push myapp:$BITBUCKET_COMMIT
Contenedores de servicio
definitions: services: postgres: image: postgres:16 variables: POSTGRES_DB: testdb POSTGRES_PASSWORD: secret pipelines: default: - step: services: - postgres script: - npm test
Step condicional con Pipe
- step: name: "Deploy to S3" script: - pipe: atlassian/aws-s3-deploy:1.1.0 variables: AWS_ACCESS_KEY_ID: $AWS_KEY AWS_SECRET_ACCESS_KEY: $AWS_SECRET S3_BUCKET: my-bucket LOCAL_PATH: dist/