# Référence rapide Bitbucket Pipelines

*Pipelines CI/CD, cache, artefacts, déploiements*

> Source: Bitbucket Documentation (support.atlassian.com/bitbucket-cloud) · MIT

## Bases des pipelines

### Fonctionnement

| Command | Description |
|---------|-------------|
| `bitbucket-pipelines.yml` | Fichier de config à la racine du dépôt |
| `Conteneurs Docker` | Chaque étape s'exécute dans son propre conteneur |
| `Déclencheurs` | Push, PR, tag, planification ou manuel |
| `Minutes de build` | Quota selon le niveau d'abonnement |

### Activer les pipelines

```
# Paramètres du dépôt → Pipelines → Activer
# Ajouter bitbucket-pipelines.yml à la racine
# Le premier push déclenche le pipeline
```

## bitbucket-pipelines.yml

### Config minimale

```
image: node:20
pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test
```

### Pipelines par branche

```
pipelines:
  branches:
    main:
      - step:
          script:
            - npm run build
            - npm run deploy
```

### Pipelines tag et pull request

```
pipelines:
  tags:
    'v*':
      - step:
          script:
            - npm run release
  pull-requests:
    '**':
      - step:
          script:
            - npm test
```

## Étapes

### Options d'une étape

| Command | Description |
|---------|-------------|
| `name` | Nom affiché pour l'étape |
| `image` | Remplace l'image Docker globale |
| `script` | Liste des commandes shell à exécuter |
| `size` | 1x (4 Go) ou 2x (8 Go) de mémoire |
| `max-time` | Délai d'expiration en minutes (défaut 120) |
| `trigger` | manual pour les étapes manuelles uniquement |

### Étapes parallèles

```
- parallel:
    - step:
        name: "Lint"
        script:
          - npm run lint
    - step:
        name: "Test"
        script:
          - npm test
```

### Étape manuelle

```
- step:
    name: "Déployer en production"
    trigger: manual
    script:
      - ./deploy.sh prod
```

## Variables

### Types de variables

| Command | Description |
|---------|-------------|
| `Variables de dépôt` | Paramètres → Pipelines → Variables |
| `Variables de déploiement` | Limitées à un environnement de déploiement |
| `Variables sécurisées` | Chiffrées, masquées dans les journaux |
| `Variables de pipeline` | Définies directement dans le YAML |

### Utiliser des variables

```
pipelines:
  default:
    - step:
        script:
          - echo $MY_VAR
          - docker login -u $DOCKER_USER -p $DOCKER_PASS
```

### Variables intégrées

| Command | Description |
|---------|-------------|
| `$BITBUCKET_COMMIT` | SHA complet du commit |
| `$BITBUCKET_BRANCH` | Nom de la branche |
| `$BITBUCKET_TAG` | Nom du tag (pipelines de tag) |
| `$BITBUCKET_BUILD_NUMBER` | Numéro de build incrémental |
| `$BITBUCKET_REPO_SLUG` | Slug du dépôt |

## Cache

### Caches prédéfinis

```
- step:
    caches:
      - node        # ~/.npm
      - pip         # ~/.cache/pip
      - docker      # cache de couches Docker
    script:
      - npm install
      - npm test
```

### Cache personnalisé

```
definitions:
  caches:
    gradle: ~/.gradle/caches
    mylibs: vendor/libs
pipelines:
  default:
    - step:
        caches:
          - gradle
        script:
          - ./gradlew build
```

### Comportement du cache

| Command | Description |
|---------|-------------|
| `Durée` | Les caches expirent après 7 jours |
| `Portée` | Partagé entre tous les pipelines du dépôt |
| `Effacer` | Pipelines → Caches → Supprimer |

## Artefacts

### Passer des fichiers entre étapes

```
- step:
    name: "Build"
    script:
      - npm run build
    artifacts:
      - dist/**
- step:
    name: "Deploy"
    script:
      - ls dist/    # artefacts disponibles
      - ./deploy.sh
```

### Options des artefacts

| Command | Description |
|---------|-------------|
| `artifacts` | Motifs glob des fichiers à transmettre |
| `Téléchargement` | Disponible automatiquement dans les étapes suivantes |
| `Taille max` | 1 Go par étape |
| `Rétention` | Disponible 14 jours après le build |

## Déploiements

### Environnements de déploiement

```
- step:
    name: "Déployer en staging"
    deployment: staging
    script:
      - ./deploy.sh staging
- step:
    name: "Déployer en production"
    deployment: production
    trigger: manual
    script:
      - ./deploy.sh prod
```

### Types d'environnements

| Command | Description |
|---------|-------------|
| `test` | Environnement de test |
| `staging` | Environnement de pré-production |
| `production` | Environnement de production, suivi dans le tableau de bord |

## Patterns courants

### Build et push Docker

```
- step:
    services:
      - docker
    script:
      - docker build -t myapp:$BITBUCKET_COMMIT .
      - docker login -u $DOCKER_USER -p $DOCKER_PASS
      - docker push myapp:$BITBUCKET_COMMIT
```

### Conteneurs de services

```
definitions:
  services:
    postgres:
      image: postgres:16
      variables:
        POSTGRES_DB: testdb
        POSTGRES_PASSWORD: secret
pipelines:
  default:
    - step:
        services:
          - postgres
        script:
          - npm test
```

### Étape conditionnelle avec Pipe

```
- step:
    name: "Déployer sur 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/
```
