Clément Schanen

Outils de développementService régional

CodePipeline, CodeBuild & CodeDeploy

Permettent d’automatiser la livraison d’une application, de la compilation jusqu’à son déploiement

Cette fiche couvre 3 services : CodePipeline, CodeBuild, CodeDeploy.

Présentation

Les trois services forment une chaîne complète de CI/CD :

  • CodePipeline orchestre les étapes
  • CodeBuild gère la compilation et les tests
  • CodeDeploy déploie

Chaque service peut également être utilisé seul : CodeBuild avec GitHub Actions par exemple ou CodeDeploy exécuté à la main.

Rôles

CodePipeline CodeBuild CodeDeploy
Rôle orchestrer construire livrer
Fichier définition du pipeline buildspec.yml appspec.yml
Cible — conteneur éphémère EC2, Lambda, ECS

CodePipeline

  • Une suite d’étapes : Source → Build → Test → Déploiement
  • Sources : GitHub, GitLab ou Bitbucket, S3, ECR
  • Une approbation manuelle peut s’intercaler avant le déploiement
  • Les artefacts transitent d’une étape à l’autre par S3
La chaîne orchestrée par CodePipeline Le code source, hébergé hors d’AWS, est compilé et testé par CodeBuild. Une approbation manuelle peut s’intercaler avant que CodeDeploy ne déploie vers EC2, Lambda ou ECS. approbation manuelle Source CodeBuild CodeDeploy EC2, Lambdaou ECS

CodeBuild

  • Exécute le buildspec.yml dans un conteneur dédié à chaque build
  • Phases install, pre_build, build, post_build
  • Peut s’exécuter dans un VPC si nécessaire (pour joindre une base de données privée par exemple)

CodeDeploy

Types de déploiement :

  • En place : les instances sont mises à jour tour à tour (EC2 uniquement)
  • Blue/green : un nouvel environnement reçoit le trafic tandis que l’ancien reste prêt
  • Canary ou linéaire : le trafic bascule par paliers, sur Lambda et ECS

Tarification

  • CodePipeline : à la minute d’exécution des actions
  • CodeBuild : à la minute de build, selon la machine choisie
  • CodeDeploy : gratuit vers EC2, Lambda et ECS

Limites à connaître

  • CodeCommit n’accepte plus de nouveaux clients : le code doit être hébergé ailleurs (GitHub, GitLab, Bitbucket) et relié au pipeline par une connexion
  • Pas de vue centralisée : pour comprendre une erreur, il faut naviguer entre les différentes consoles (pipeline, build, déploiement)
  • Sur EC2, un agent CodeDeploy doit être installé et tenu à jour sur chaque instance, ce qui n’est pas nécessaire pour Lambda et ECS
  • Moins d’actions prêtes à l’emploi que GitHub Actions ou GitLab CI