Chapitre 159 minIntermédiaire
Aide-mémoire CI/CD : GitHub Actions et GitLab CI
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- retrouver vite une clé ou une commande de GitHub Actions et de GitLab CI ;
- vérifier la version à jour d'une action officielle ;
- réviser le vocabulaire de la CI/CD.
Cet aide-mémoire regroupe la syntaxe de GitHub Actions et de GitLab CI, les actions officielles et leurs versions, les commandes utiles et le vocabulaire de l'intégration et du déploiement continus. Il sert à retrouver vite une clé ou une commande, et à réviser avant un oral ou un contrôle. Chaque ligne renvoie au chapitre qui l'explique.
Le squelette d'un workflow GitHub Actions
name: CI # nom affiché
on: # déclencheurs
push:
branches: [main]
pull_request:
permissions: # droits du GITHUB_TOKEN
contents: read
concurrency: # une exécution par branche
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
tests: # identifiant du job
runs-on: ubuntu-latest # machine
timeout-minutes: 15
steps:
- uses: actions/checkout@v7 # récupérer le code
- uses: actions/setup-node@v7 # installer Node.js
with:
node-version: 24
cache: npm
- run: npm ci # installer les dépendances
- run: npm test -- --ci # tester
Les clés de GitHub Actions
| Niveau | Clé | Rôle | Chapitre |
|---|---|---|---|
| Workflow | on | Événements déclencheurs | 3 |
| Workflow, job | permissions | Droits du jeton | 8 |
| Workflow, job | concurrency | Éviter les exécutions simultanées | 3 |
| Workflow, job, étape | env | Variables d'environnement | 3 |
| Job | runs-on | Machine | 3 |
| Job | needs | Jobs à attendre | 3 |
| Job, étape | if | Condition | 3 |
| Job | strategy.matrix | Variantes en parallèle | 4 |
| Job | services | Conteneurs annexes (base de données) | 6 |
| Job | environment | Environnement de déploiement | 10 |
| Job | outputs | Valeurs pour les jobs suivants | 3 |
| Job | uses | Appeler un workflow réutilisable | 4 |
| Étape | uses et with | Action et ses paramètres | 3 |
| Étape | run, shell, working-directory | Commande | 3 |
| Étape, job | continue-on-error | Ne pas échouer pour cette étape | 3 |
| Job, étape | timeout-minutes | Durée maximale | 3 |
Déclencheurs, conditions et fichiers spéciaux
| Besoin | Écriture |
|---|---|
| Chaque pull request | on: pull_request |
Chaque push sur main | on: push: branches: [main] |
| Chaque tag de version | on: push: tags: ['v*.*.*'] |
| Ignorer la documentation | paths-ignore: ['docs/**', '**.md'] |
| Lancement manuel | on: workflow_dispatch (avec inputs) |
| Chaque nuit à 1 h UTC | on: schedule: - cron: '0 1 * * *' |
| Chaque nuit à 2 h, heure de Paris | - cron: '0 2 * * *' puis timezone: Europe/Paris |
Seulement après une fusion sur main | if: github.event_name == 'push' && github.ref == 'refs/heads/main' |
| Seulement pour un tag | if: startsWith(github.ref, 'refs/tags/v') |
| Toujours, même après un échec | if: always() |
| Seulement après un échec | if: failure() |
| Variable pour les étapes suivantes | echo "NOM=valeur" >> "$GITHUB_ENV" |
| Sortie d'une étape | echo "nom=valeur" >> "$GITHUB_OUTPUT", lue par steps.<id>.outputs.nom |
| Résumé de l'exécution | echo "### Titre" >> "$GITHUB_STEP_SUMMARY" |
| Masquer une valeur calculée | echo "::add-mask::$VALEUR" |
Les contextes
| Contexte | Exemples |
|---|---|
github | github.sha, github.ref, github.ref_name, github.event_name, github.actor, github.repository |
secrets, vars | secrets.DEPLOY_SSH_KEY, secrets.GITHUB_TOKEN, vars.URL_RECETTE |
matrix | matrix.node, matrix.os |
steps, needs | steps.meta.outputs.tags, needs.image.outputs.tag, needs.tests.result |
inputs | inputs.environnement |
runner | runner.os, runner.temp |
Les actions officielles et leurs versions (novembre 2026)
| Action | Version | Rôle |
|---|---|---|
actions/checkout | v7 | Récupérer le code |
actions/setup-node, actions/setup-python | v7 | Installer Node.js, Python (avec cache) |
actions/setup-java, actions/setup-dotnet | v6 | Installer Java, .NET |
actions/cache | v6 | Cache générique |
actions/upload-artifact | v7 | Envoyer un artefact |
actions/download-artifact | v8 | Récupérer un artefact |
actions/dependency-review-action | v5 | Bloquer les dépendances vulnérables d'une pull request |
github/codeql-action/init, analyze | v4 | Analyse de code CodeQL |
actions/configure-pages, actions/upload-pages-artifact, actions/deploy-pages | v6, v5, v5 | Publier sur GitHub Pages |
actions/attest-build-provenance | v4 | Attestation de provenance |
docker/setup-buildx-action, docker/login-action | v4 | Préparer Buildx, se connecter à un registre |
docker/metadata-action | v6 | Calculer les étiquettes d'image |
docker/build-push-action | v7 | Construire et pousser une image |
Les actions d'autres éditeurs s'épinglent sur l'empreinte complète d'un commit, avec la version en commentaire (la sécurité du pipeline).
Les mots-clés de GitLab CI
| Mot-clé | Rôle |
|---|---|
stages | Ordre des stages (par défaut build, test, deploy) |
stage, image, script | Stage du job, image Docker, commandes |
before_script, after_script | Commandes avant et après |
rules: - if: | Conditions de création du job |
workflow: rules: | Conditions de création du pipeline |
needs | Démarrer dès que certains jobs ont réussi |
artifacts: paths, expire_in, reports | Fichiers conservés, rapports JUnit et couverture |
cache: key, paths | Fichiers gardés entre pipelines |
services | Conteneurs annexes |
environment: name, url | Environnement de déploiement |
when: manual | Job lancé par un clic |
extends, default, include | Réutilisation |
release | Créer une release sur un tag |
Variables prédéfinies utiles : CI_PIPELINE_SOURCE, CI_COMMIT_BRANCH, CI_COMMIT_TAG, CI_DEFAULT_BRANCH, CI_COMMIT_SHA, CI_COMMIT_SHORT_SHA, CI_REGISTRY, CI_REGISTRY_IMAGE, CI_REGISTRY_USER, CI_REGISTRY_PASSWORD, CI_JOB_TOKEN, CI_PROJECT_DIR.
Les commandes utiles
| Commande | Rôle |
|---|---|
npm ci | Installer exactement le package-lock.json |
npm audit --audit-level=high | Échouer si une dépendance a une faille haute ou critique |
npm version patch, minor, major | Changer le numéro, commiter, créer le tag |
git push --follow-tags | Pousser les commits et leurs tags |
gh run list, gh run watch, gh run view --log-failed | Suivre les exécutions et lire les journaux en échec |
gh run rerun --failed | Relancer les jobs en échec |
gh workflow run deploy.yml -f environnement=recette | Lancer un workflow_dispatch |
gh secret set NOM, gh variable set NOM | Créer un secret, une variable |
gh release create v2.5.0 --generate-notes | Créer une release |
docker build -t image:etiquette . | Construire une image |
docker compose pull puis docker compose up -d | Mettre à jour les conteneurs d'un serveur |
curl --fail --retry 5 --retry-all-errors URL | Test de fumée qui échoue sur une erreur HTTP |
shellcheck script.sh | Vérifier un script Bash |
Le vocabulaire
| Terme | Définition |
|---|---|
| Intégration continue (CI) | Intégrer souvent dans la branche commune, et vérifier automatiquement chaque intégration |
| Livraison continue | Chaque version validée est prête à partir en production ; la mise en production reste une décision humaine |
| Déploiement continu | Chaque version validée part automatiquement en production |
| Pipeline | La suite automatisée d'étapes du commit à la livraison |
| Workflow | Un fichier de pipeline de GitHub Actions |
| Job, étape | Un groupe d'étapes sur une machine ; une commande ou une action |
| Runner | La machine qui exécute un job |
| Artefact | Un fichier produit par le pipeline et conservé : archive, image, rapport |
| Cache | Des fichiers gardés entre les exécutions pour gagner du temps |
| Matrice | Le même job lancé pour plusieurs valeurs (versions, systèmes) |
| Échec rapide (fail fast) | Les vérifications rapides d'abord, arrêt au premier échec |
| Protection de branche, ruleset | Des règles qui imposent pull request, revue et contrôles verts avant la fusion |
| Secret | Une valeur sensible, chiffrée, injectée à l'exécution, masquée dans les journaux |
| OIDC | Une authentification par jeton temporaire, sans secret permanent |
| SAST, SCA, DAST | Analyse du code source, des dépendances, de l'application en fonctionnement |
| Environnement | Une installation de l'application pour un usage : recette, production |
| Recette (staging) | L'environnement de validation avant la production |
| Test de fumée | Une vérification rapide qu'un service déployé répond |
| Promotion | Déployer la même image d'un environnement au suivant, sans la reconstruire |
| Bleu-vert, canari, progressif | Stratégies de déploiement sans coupure |
| Interrupteur de fonctionnalité | Une fonctionnalité activée ou coupée par la configuration, sans redéploiement |
| Retour arrière (rollback) | Remettre en service la dernière version qui fonctionnait |
| Infrastructure as code | Décrire l'infrastructure dans des fichiers versionnés, appliqués par un outil |
| SemVer | Numérotation MAJEUR.MINEUR.CORRECTIF |
| Release | La publication d'une version attachée à un tag, avec ses notes et ses fichiers |
| DORA | Les quatre indicateurs classiques : fréquence de déploiement, délai de mise en production, taux d'échec des changements, temps de rétablissement (plus, depuis 2024, le taux de reprise) |