Arc 4 Quête 19

Les Autres Forges

GitLab CI, Bitbucket Pipelines, Jenkins et portabilité

Le Maître Archiviste te conduit au sommet de la plus haute tour de la Forge. De là, tu découvres un panorama vertigineux : au-delà des terres de GitHub, d'autres forges brillent à l'horizon. Des colonnes de fumée et de lumière s'élèvent de cités lointaines, chacune avec ses propres tours, ses propres feux, ses propres philosophies de construction.

« Tu croyais que la Forge de GitHub était la seule ? Non, jeune Maître. À travers le royaume, d'autres forges opèrent avec des philosophies différentes. GitLab, Bitbucket, Jenkins, et bien d'autres. Un véritable Maître Archiviste les connaît toutes, car chaque forge possède des forces uniques. Aujourd'hui, tu vas découvrir ces terres lointaines et apprendre à forger dans chacune d'elles. »

Pourquoi connaître plusieurs plateformes ?

Tu pourrais te demander : "Si je connais GitHub Actions, pourquoi apprendre autre chose ?" Excellente question. Voici la réponse :

  • Le marché du travail : certaines entreprises utilisent GitLab, d'autres Bitbucket, d'autres encore Jenkins. Connaître plusieurs plateformes te rend beaucoup plus employable.
  • Les besoins varient : un projet open source ira naturellement sur GitHub, mais une entreprise avec des serveurs internes préférera peut-être GitLab auto-hébergé.
  • La portabilité : comprendre les concepts communs te permet de passer d'une plateforme à l'autre en quelques heures, pas en quelques semaines.
  • L'esprit critique : connaître les alternatives te permet de choisir le bon outil plutôt que de subir un choix par défaut.

« Un forgeron qui ne connaît qu'un seul type de forge est prisonnier de sa forge. Celui qui les connaît toutes est libre de choisir. »

GitLab CI/CD - La Forge Impériale

GitLab est souvent considéré comme le concurrent le plus complet de GitHub. Sa force principale : tout est intégré. CI/CD, registre de conteneurs, gestion de projet, sécurité - tout est dans une seule plateforme.

Le fichier .gitlab-ci.yml

Comme GitHub Actions utilise des fichiers dans .github/workflows/, GitLab utilise un unique fichier à la racine du dépôt : .gitlab-ci.yml.

stages:
  - test
  - deploy

test:
  stage: test
  script:
    - echo "Tests en cours..."

deploy:
  stage: deploy
  script:
    - echo "Déploiement en cours..."
  only:
    - main

Les concepts clés de GitLab CI

Concept Description
Stages Les étapes du pipeline, exécutées dans l'ordre
Jobs Les tâches individuelles, rattachées à un stage
Script Les commandes à exécuter dans un job
Runners Les machines qui exécutent les jobs (partagés ou privés)
Artifacts Les fichiers produits par un job, transmis aux suivants

Exemple plus complet

stages:
  - build
  - test
  - deploy

variables:
  APP_NAME: "mon-application"

build:
  stage: build
  script:
    - echo "Construction de $APP_NAME..."
    - mkdir -p build
    - cp src/*.py build/
  artifacts:
    paths:
      - build/

test-unitaire:
  stage: test
  script:
    - echo "Tests unitaires..."
    - python -m pytest tests/

test-lint:
  stage: test
  script:
    - echo "Vérification du style..."
    - python -m flake8 src/

deploy:
  stage: deploy
  script:
    - echo "Déploiement de $APP_NAME..."
  only:
    - main
  when: manual

Les forces de GitLab

  • Tout-en-un : CI/CD, registre de conteneurs Docker, gestion de projet, wiki, pages statiques - tout est intégré nativement.
  • Auto-hébergement : tu peux installer GitLab sur tes propres serveurs. C'est un avantage énorme pour les entreprises qui veulent garder le contrôle de leurs données.
  • Registre de conteneurs intégré : chaque projet GitLab a son propre registre Docker, prêt à l'emploi.
  • Environnements de déploiement : GitLab permet de définir des environnements (staging, production) et de visualiser les déploiements directement dans l'interface.

« La Forge Impériale de GitLab est un royaume autonome. Elle n'a besoin d'aucune autre cité pour fonctionner. Tout est sous un même toit. C'est sa plus grande force - et parfois sa faiblesse, car cette puissance peut être intimidante pour les débutants. »

Bitbucket Pipelines - La Forge des Guildes Marchandes

Bitbucket est la forge de l'écosystème Atlassian - la même famille que Jira (gestion de projet) et Confluence (documentation). Si ton entreprise utilise Jira, Bitbucket s'intègre naturellement.

Le fichier bitbucket-pipelines.yml

Bitbucket utilise aussi un fichier YAML à la racine du dépôt :

pipelines:
  default:
    - step:
        name: Tests
        script:
          - echo "Tests en cours..."

  branches:
    main:
      - step:
          name: Tests
          script:
            - echo "Tests en cours..."
      - step:
          name: Déploiement
          script:
            - echo "Déploiement en cours..."

Les concepts clés de Bitbucket Pipelines

Concept Description
Pipelines Le conteneur global de la configuration
Steps Les étapes individuelles (équivalent des jobs)
Script Les commandes à exécuter dans un step
Pipes Des intégrations pré-construites (déployer sur AWS, Slack, etc.)
Caches Mise en cache des dépendances entre les exécutions

Exemple avec Pipes

Les Pipes sont une spécificité de Bitbucket - ce sont des intégrations prêtes à l'emploi :

pipelines:
  default:
    - step:
        name: Tests
        caches:
          - node
        script:
          - npm install
          - npm test
    - step:
        name: Notification Slack
        script:
          - pipe: atlassian/slack-notify:2.0.0
            variables:
              WEBHOOK_URL: $SLACK_WEBHOOK
              MESSAGE: "Build terminé avec succès !"

Les forces de Bitbucket

  • Intégration Jira : les commits et branches sont automatiquement liés aux tickets Jira. Tu crées une branche depuis un ticket, et tout est tracé.
  • Pipes : des intégrations pré-construites qui simplifient les tâches courantes (déploiement AWS, notifications, etc.).
  • Dépôts privés gratuits : historiquement, Bitbucket offrait des dépôts privés gratuits avant GitHub.
  • Intégration Confluence : la documentation est directement liée au code.

« La Forge des Guildes Marchandes de Bitbucket est tissée dans un réseau commercial. Chaque ticket Jira, chaque page Confluence, chaque commit - tout est relié. Pour les grandes guildes organisées, c'est un avantage considérable. »

Les autres forges notables

Le monde des forges ne se limite pas à ces trois géants. Voici d'autres acteurs importants :

Jenkins - Le Vétéran

Jenkins est l'un des plus anciens outils de CI/CD. Il est entièrement auto-hébergé et extrêmement flexible.

  • Points forts : personnalisation infinie, immense écosystème de plugins (plus de 1800), gratuit et open source.
  • Points faibles : interface vieillissante, configuration complexe, maintenance nécessaire.
  • Fichier de config : Jenkinsfile (syntaxe Groovy)
pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'echo "Tests en cours..."'
            }
        }
    }
}

Jenkins reste très utilisé dans les grandes entreprises qui ont investi massivement dans leurs infrastructures.

CircleCI - Le Sprinter du Cloud

CircleCI est une plateforme CI/CD cloud-native, reconnue pour sa rapidité et son efficacité.

  • Points forts : très rapide, excellent support Docker, bonne interface.
  • Points faibles : coût qui augmente vite avec l'usage, moins de fonctionnalités annexes.
  • Fichier de config : .circleci/config.yml

Travis CI - Le Pionnier Open Source

Travis CI a été historiquement la plateforme CI/CD favorite des projets open source. Il a popularisé le concept de CI/CD intégrée aux forges.

  • Points forts : simple à configurer, pionnier de l'intégration avec GitHub.
  • Points faibles : a perdu en popularité après son rachat, offre gratuite réduite.
  • Fichier de config : .travis.yml

Forgejo/Gitea Actions - L'Alternative Libre

Forgejo et Gitea sont des forges auto-hébergées, légères et open source. Leur système d'Actions est compatible avec GitHub Actions - tu peux souvent réutiliser tes workflows directement !

  • Points forts : léger, auto-hébergé, compatible GitHub Actions, respectueux de la vie privée.
  • Points faibles : communauté plus petite, moins d'actions tierces disponibles.
  • Fichier de config : .forgejo/workflows/ ou .gitea/workflows/ (même syntaxe que GitHub Actions)

« Chaque forge a été bâtie par des artisans différents, avec des philosophies différentes. Jenkins est le vétéran indestructible, CircleCI le sprinter, Travis le pionnier, et Forgejo la voie libre. Aucune n'est parfaite, mais chacune excelle dans son domaine. »

Tableau comparatif

Voici un résumé pour t'aider à comprendre les différences :

Critère GitHub Actions GitLab CI Bitbucket Pipelines
Fichier de config .github/workflows/*.yml .gitlab-ci.yml bitbucket-pipelines.yml
Auto-hébergement Non (sauf runners) Oui (GitLab CE/EE) Non
Registre Docker GitHub Packages Intégré nativement Non intégré
Marketplace/Plugins GitHub Marketplace Catalogue CI/CD Pipes Atlassian
Intégration projet Issues, Projects Boards, Epics, Milestones Jira, Confluence
Gratuit (CI) 2000 min/mois 400 min/mois 50 min/mois
Force principale Communauté, Actions Tout-en-un Écosystème Atlassian
Idéal pour Open source, startups Entreprises, DevOps Équipes sur Jira

Comment choisir la bonne plateforme ?

Le choix dépend de ton contexte. Voici un guide simple :

  • Tu fais de l'open source ? - GitHub. La communauté est là, les contributeurs connaissent la plateforme.
  • Ton entreprise veut tout contrôler en interne ? - GitLab auto-hébergé. Données sur tes serveurs, personnalisation totale.
  • Ton équipe utilise déjà Jira ? - Bitbucket. L'intégration native avec l'écosystème Atlassian est un gain de temps énorme.
  • Tu veux une solution légère et libre ? - Forgejo/Gitea. Parfait pour un serveur personnel ou une petite équipe.
  • Tu as un système complexe existant ? - Jenkins. Sa flexibilité est inégalée pour les cas particuliers.

Le choix d'une forge n'est pas une question de meilleur ou de pire. C'est une question de contexte. Le meilleur marteau est celui qui convient au clou que tu dois enfoncer.

La portabilité - L'art de ne pas être prisonnier

Un piège courant : mettre toute ta logique CI/CD dans le fichier YAML de ta plateforme. Si tu changes de forge un jour, tu dois tout réécrire.

La solution ? Garder la logique dans des scripts, pas dans le YAML.

Mauvaise approche (tout dans le YAML)

# .github/workflows/ci.yml - Difficile à porter
name: CI
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install -r requirements.txt
      - run: python -m pytest tests/ --cov=src
      - run: python -m flake8 src/ --max-line-length=120
      - run: echo "Tous les tests passent !"

Bonne approche (logique dans un script)

D'abord, crée un script scripts/test.sh :

#!/bin/bash
# scripts/test.sh - La logique est ici, pas dans le YAML
echo "Installation des dépendances..."
pip install -r requirements.txt

echo "Lancement des tests..."
python -m pytest tests/ --cov=src

echo "Vérification du style..."
python -m flake8 src/ --max-line-length=120

echo "Tous les tests passent !"

Ensuite, chaque fichier YAML appelle simplement ce script :

# GitHub Actions
- run: bash scripts/test.sh

# GitLab CI
script:
  - bash scripts/test.sh

# Bitbucket Pipelines
script:
  - bash scripts/test.sh

Résultat : si tu changes de plateforme, tu n'as qu'à réécrire le fichier YAML minimal. Toute ta logique reste intacte.

Cette approche s'appelle le "shell-first CI". C'est une bonne pratique adoptée par les équipes DevOps expérimentées. En bonus, tu peux tester tes scripts en local avant de les pousser !

« Les Maîtres Archivistes les plus sages ne s'enchaînent jamais à une seule forge. Ils écrivent leurs parchemins de manière à pouvoir les emporter n'importe où. C'est la portabilité - et c'est une compétence qui vaut de l'or. »

Exercice pratique - Forger sur trois enclumes

Prouve ta maîtrise des Forges en écrivant le même pipeline sur trois plateformes :

  1. Crée un dépôt multi-forge avec un script de test
  2. Écris le pipeline GitHub Actions dans .github/workflows/ci.yml
  3. Écris le pipeline GitLab CI dans .gitlab-ci.yml
  4. Écris le pipeline Bitbucket Pipelines dans bitbucket-pipelines.yml
  5. Les trois pipelines doivent appeler le même script de test
  6. Commite le tout et lance la vérification

Étape 1 - Créer le dépôt

mkdir multi-forge
cd multi-forge
git init -b main

Étape 2 - Créer le script de test

Crée un dossier scripts/ et un fichier scripts/test.sh :

mkdir scripts

Écris le contenu de scripts/test.sh :

#!/bin/bash
# scripts/test.sh - Script de test portable

echo "=== Lancement des tests ==="

# Test 1 : vérifier que le fichier README existe
if [ -f "README.md" ]; then
    echo "PASS : README.md existe"
else
    echo "FAIL : README.md manquant"
    exit 1
fi

# Test 2 : vérifier que le dossier scripts existe
if [ -d "scripts" ]; then
    echo "PASS : dossier scripts/ existe"
else
    echo "FAIL : dossier scripts/ manquant"
    exit 1
fi

echo "=== Tous les tests passent ==="

Rends-le exécutable :

chmod +x scripts/test.sh

Étape 3 - Créer un README

echo "# Multi-Forge" > README.md
echo "Projet de démonstration CI/CD multi-plateforme." >> README.md

Étape 4 - Écrire le pipeline GitHub Actions

mkdir -p .github/workflows

Contenu de .github/workflows/ci.yml :

name: CI
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lancer les tests
        run: bash scripts/test.sh

Étape 5 - Écrire le pipeline GitLab CI

Contenu de .gitlab-ci.yml (à la racine) :

stages:
  - test

test:
  stage: test
  script:
    - bash scripts/test.sh

Étape 6 - Écrire le pipeline Bitbucket Pipelines

Contenu de bitbucket-pipelines.yml (à la racine) :

pipelines:
  default:
    - step:
        name: Tests
        script:
          - bash scripts/test.sh

Étape 7 - Tout commiter

git add .
git commit -m "Ajouter les pipelines CI pour GitHub, GitLab et Bitbucket"

Étape 8 - Lancer la vérification

bash verifier.sh
.\verifier.ps1

Récapitulatif des concepts

Concept Description
GitLab CI/CD Plateforme CI/CD intégrée à GitLab, fichier .gitlab-ci.yml
Bitbucket Pipelines CI/CD intégré à Bitbucket, fichier bitbucket-pipelines.yml
Jenkins Outil CI/CD auto-hébergé, très flexible, fichier Jenkinsfile
CircleCI Plateforme CI/CD cloud-native rapide
Travis CI Pionnier de la CI/CD pour l'open source
Forgejo/Gitea Forges auto-hébergées compatibles GitHub Actions
Portabilité Garder la logique dans des scripts, pas dans le YAML

Récapitulatif des fichiers de configuration

Plateforme Fichier Emplacement
GitHub Actions *.yml .github/workflows/
GitLab CI .gitlab-ci.yml Racine du dépôt
Bitbucket Pipelines bitbucket-pipelines.yml Racine du dépôt
Jenkins Jenkinsfile Racine du dépôt
CircleCI config.yml .circleci/
Travis CI .travis.yml Racine du dépôt
Forgejo/Gitea *.yml .forgejo/workflows/ ou .gitea/workflows/

Le Maître Archiviste contemple les trois enclumes devant toi - chacune porte un pipeline différent, mais toutes forgent le même résultat. Il hoche lentement la tête, visiblement satisfait.

« Tu as forgé sur trois enclumes différentes avec la même maîtrise. GitHub, GitLab, Bitbucket - tu connais désormais les philosophies de chaque forge et tu sais adapter ton travail à chacune. Et surtout, tu as compris le secret le plus important : la portabilité. Tes scripts sont libres, ils ne sont enchaînés à aucune forge. »

Il frappe trois coups sur la plus grande enclume. Les flammes des Forges Automatiques s'élèvent une dernière fois, projetant des ombres monumentales sur les murs.

« L'Arc des Forges Automatiques est achevé. Tu maîtrises désormais les forges éternelles, les actions du royaume, les épreuves automatiques, et les forges alternatives. Tu es un Forgeron Accompli. »

Le Maître Archiviste te tend un insigne d'or - un marteau croisé avec une plume, le symbole de ceux qui maîtrisent à la fois l'écriture et la forge.

« Mais le monde évolue, Forgeron. Au-delà des guildes et des forges que tu connais, de nouvelles voies s'ouvrent. Des archivistes rebelles expérimentent le versionnement décentralisé - sans serveur central, sans forge dominante. Radicle, le protocole peer-to-peer pour le code... C'est l'Arc 5 : Au-delà des Guildes. Et il changera ta vision de tout ce que tu as appris. »