Si vous avez actuellement du mal du côté de l'administrateur système pour maintenir tous vos serveurs à jour, il est peut-être temps de vous alléger une partie du poids et d'automatiser votre processus de livraison avec un pipeline de déploiement continu.
Qu'est-ce que CI / CD?
L'intégration continue, le déploiement continu (CI / CD) consiste à effectuer des mises à jour de code fréquentes (souvent quotidiennes), à créer et tester de nouvelles versions et à déployer rapidement et efficacement les modifications sur vos serveurs de production.
C’est un terme très large qui résume le cœur de DevOps culture: rationalisation du flux de nouveau code depuis le cerveau de votre développeur vers vos serveurs. Habituellement, CI / CD est implémenté avec une boîte à outils appelée pipeline, qui est un ensemble d'outils qui automatise l'ensemble du processus de la source au déploiement.
C'est ce qu'AWS fournit avec ses outils CodeSuite, et ils sont particulièrement bien placés pour mettre en œuvre un tel pipeline, car vous exécuterez généralement vos serveurs de production sur EC2, ce qui rendra la phase de déploiement beaucoup plus facile et bien intégrée.
Outils CodeSuite d'AWS
CodeSuite est composé de quelques outils différents. Cela commence par CodeCommit, le service de contrôle de source géré par AWS. C'est un peu plus maladroit et moins riche en fonctionnalités que la concurrence, mais il est assez facile de configurer Git avec plusieurs télécommandes que vous pourriez aussi bien l'utiliser si vous prévoyez d'utiliser le reste du pipeline. CodeCommit a un niveau gratuit très généreux, vous n'aurez donc probablement pas à payer beaucoup de frais pour cela.
Vient ensuite CodeBuild, qui prend le contrôle de code source de CodeCommit (ou GitHub / BitBucket) et construit à partir de la source, en exécutant tous les tests que vous fournissez dans le processus. Cela utilise un serveur EC2 pour la construction, que vous devez payer pendant l'exécution de la compilation. Les projets complexes peuvent nécessiter une machine puissante pour des constructions rapides.
Une fois la génération terminée, votre application est prête pour le déploiement. Cette étape est gérée avec CodeDeploy; vous créez un «groupe de déploiement», qui peut contenir n'importe quel nombre d'instances EC2 ou des groupes entiers de mise à l'échelle automatique. C'est là que le pipeline d'AWS brille vraiment.
Avec CodeDeploy, vous pouvez affiner la gestion du déploiement: il existe des préréglages pour tous en même temps, la moitié du groupe, 10% toutes les quelques minutes et bien d'autres, tous conçus pour minimiser les temps d'arrêt des applications dus à des bogues inattendus en production. La mise à jour automatique de tous vos serveurs est assez agréable, mais CodeDeploy peut même se connecter à votre équilibreur de charge et réduire le trafic vers les instances en cours de mise à jour. Combiné à une stratégie de déploiement échelonné pour garantir un nombre minimum d'hôtes sains, cela rend les mises à jour de production sans stress.
Tout cela est regroupé dans un seul pipeline, qui surveille votre contrôle de source et déclenche l'exécution automatique du pipeline chaque fois que vous envoyez des modifications à la branche de publication, en créant, en testant et en déployant votre code sur tous vos serveurs.
Comment configurer un pipeline
Tout d'abord, vous devez obtenir votre code dans CodeCommit. Nous vous recommandons de configurer CodeCommit en tant que télécommande de version séparée à côté de votre contrôle de source principal. Si vous utilisez Github ou BitBucket, vous pouvez vous connecter directement à votre référentiel à la place, mais CodeCommit est une solution entièrement AWS et vous permet de gérer l'accès organisationnel aux mises à jour du serveur via la console IAM.
Ensuite, dirigez-vous vers le Console CodePipeline pour commencer. Cliquez sur "Créer un pipeline" et donnez-lui un nom et une description.
Chaque étape du pipeline nécessite une configuration. Le premier est l'étape source, qui se connecte à CodeCommit, Github et BitBucket. Les deux derniers nécessitent que vous connectiez vos comptes via OAuth, mais CodeCommit se connecte directement. Choisissez le référentiel que vous utilisez et la branche des versions. Si vous utilisez CodeCommit comme télécommande secondaire, vous choisirez probablement maître ici, mais si vous utilisez un fournisseur tiers, vous souhaiterez peut-être configurer une branche de publication distincte.
Sous les options de branche, vous pouvez trouver les paramètres d'exécution automatique de ce pipeline. Par défaut, il s'exécute chaque fois qu'un nouveau commit est poussé vers la branche de publication que vous avez spécifiée. Vous pouvez changer cela, mais c'est probablement ce que vous voulez.
Ensuite, l'étape de construction. CodePipeline prend en charge Jenkins et le CodeBuild intégré pour le code de construction. Si vous utilisez déjà Jenkins pour la construction, vous devez installer le Plug-in CodePipeline pour le connecter à AWS. Sinon, vous pouvez configurer CodeBuild en cliquant sur «Créer un projet» pour ouvrir une boîte de dialogue.
CodeBuild a un lot de choses à configurer, vous pouvez donc lire notre guide de configuration pour en savoir plus. Une fois que vous avez terminé, la boîte de dialogue devrait se fermer et vous ramener à la configuration de CodePipeline.
La prochaine étape est le déploiement. CodePipeline prend en charge quelques options de déploiement différentes; plus particulièrement, si vous utilisez AWS CloudFormation ou Elastic Container Service, vous pouvez déployer des mises à jour directement sur ceux-ci. Pour les déploiements EC2 et Lambda généraux, vous devez utiliser CodeDeploy.
CodeDeploy nécessite également beaucoup de configuration, vous pouvez donc lire notre guide complet pour le configurer. En bref, vous créez un groupe de déploiement composé de vos serveurs EC2, d'un groupe Auto-Scaling ou de fonctions Lambda, et choisissez une configuration de déploiement – tout à la fois, moitié à la fois, etc. CodeDeploy gère tout le reste, peaufinant votre équilibreur de charge afin ce trafic n'est pas acheminé vers les serveurs de mise à jour et maintient toujours un nombre défini d'hôtes sains, de sorte que votre service ne tombe jamais en panne pour les mises à jour.
Une fois que vous avez terminé, revenez sur CodePipeline et sélectionnez le déploiement que vous venez de configurer. Cela devrait marquer toute la configuration terminée et vous pouvez cliquer sur Suivant pour examiner votre pipeline avant de le mettre en mouvement.
Une fois que vous avez créé le pipeline, il exécute automatiquement la première génération. S'il rencontre des erreurs dans la compilation, le pipeline s'arrête et vos serveurs ne sont pas mis à jour.
Vous pouvez tester la détection des mises à jour du pipeline en effectuant une nouvelle validation dans votre contrôle de code source. Le pipeline devrait redémarrer automatiquement et déployer les modifications sur vos serveurs si tout semble bon.
Vous pouvez revenir en arrière et modifier le pipeline à tout moment, ou modifier les configurations CodeBuild ou CodeDeploy. Si vous rencontrez des erreurs de build, vous devez vous assurer que votre fichier buildspec gère tout correctement.