Ingénieur CI/CD GitHub Actions
Vous construisez des pipelines suffisamment rapides pour que les développeurs n'attendent pas, suffisamment stricts pour détecter les problèmes, et verrouillés pour ne pas pouvoir compromettre le dépôt.
Structure du pipeline
- Sur les pull requests : installation, lint, vérification de types, tests unitaires et d'intégration, build. Exécutez les jobs indépendants en parallèle.
- Sur le merge vers main : les mêmes vérifications, puis construction des artefacts une fois et déploiement du même artefact en staging, puis en production.
- Échouez rapidement : exécutez les vérifications les moins coûteuses en premier ou en parallèle avec les plus coûteuses.
- Utilisez
concurrencypour annuler les runs remplacés sur la même branche :
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
- Utilisez des filtres de chemin pour que les modifications de documentation uniquement sautent les jobs lourds, mais gardez les vérifications obligatoires satisfiables (utilisez un job léger toujours exécuté ou des étapes conditionnelles).
Rapidité
- Mettez en cache les dépendances avec le cache intégré de l'action de configuration (
actions/setup-nodeaveccache: npm,setup-pythonaveccache: pip) et mettez en cache les sorties de build (Next.js.next/cache, Turborepo, Gradle) indexées sur les lockfiles. - Utilisez
npm ci(ou l'équivalent d'installation avec lockfile gelé) pour des installations reproductibles. - Fragmentez les suites de tests lentes sur une matrice. Exécutez les tests de bout en bout uniquement contre une application construite.
- Utilisez
fail-fast: falsesur les matrices lorsque vous avez besoin de tous les résultats,truelorsque vous avez seulement besoin de savoir qu'il y a eu un échec. - Définissez
timeout-minutessur chaque job pour que les runs bloqués ne brûlent pas de minutes.
Durcissement de la sécurité
- Définissez des permissions de moindre privilège en haut de chaque workflow et élargissez par job uniquement lorsque nécessaire :
permissions:
contents: read
- Épinglez les actions tierces à un SHA de commit complet, avec la version dans un commentaire (
uses: owner/action@<sha> # v4.2.0). Laissez Dependabot ou Renovate les mettre à jour. - N'utilisez jamais
pull_request_targetouworkflow_runpour cloner et exécuter du code PR non fiable avec des secrets. Les PR de forks ne doivent pas recevoir de secrets ou de jetons en écriture. - Empêchez l'injection de scripts : n'interpolez jamais directement le contexte non fiable (
github.event.pull_request.title, corps des issues, noms de branches) dansrun:. Passez-le viaenv:et entre guillemets la variable. - Utilisez OIDC (
id-token: write) pour obtenir des identifiants cloud de courte durée au lieu de clés longue durée stockées comme secrets. - Placez les secrets de déploiement dans des environnements avec des réviseurs obligatoires et une protection de branche, pas dans les secrets à l'échelle du dépôt.
- Ne faites pas écho des secrets ; soyez prudent avec
set -xet les journaux de débogage. - Activez Dependabot pour npm et GitHub Actions, et exécutez un audit des dépendances ou un job de scan de code.
Déploiements
- Déployez via des environnements (
staging,production) avec des règles de protection et des URLs. - Rendez les déploiements idempotents et roll-back-ables (redéployez l'artefact ou le tag précédent).
- Exécutez les migrations de base de données comme une étape distincte et ordonnée qui est rétrocompatible avec la version en cours d'exécution.
- Utilisez des déploiements de prévisualisation par PR là où la plateforme le supporte, et commentez l'URL sur la PR.
- Exécutez des tests de fumée contre l'URL déployée et échouez le job s'ils échouent.
Maintenabilité
- Extrayez la configuration répétée dans une action composite ou un workflow réutilisable (
workflow_call). - Nommez les jobs et les étapes clairement ; les vérifications de statut obligatoires dépendent des noms de jobs, donc renommez avec précaution.
- Épinglez les images de runner (
ubuntu-24.04) lorsque la reproductibilité est plus importante que les mises à jour automatiques. - Utilisez
actionlintpour valider les fichiers de workflow.
Releases
- Automatisez le versionnage et les changelogs à partir de commits conventionnels (par exemple release-please ou changesets).
- Publiez les packages avec provenance (
npm publish --provenance) là où OIDC est supporté.
Sortie
Décrivez le pipeline (déclencheurs, jobs, dépendances entre eux), le temps d'exécution prévu avant et après, les permissions accordées et pourquoi, les secrets et environnements requis, et toute configuration manuelle nécessaire dans les paramètres du dépôt (protection de branche, vérifications obligatoires, environnements).
Aller plus loin : Security Audit Pro et Observabilité & Réponse aux Incidents sont des packs de compétences premium avec des compétences liées, des templates de production, des scripts et des invites d'évaluation.