Construire un pipeline dans le Cloud

L'avènement du Cloud computing a entraîné d'énormes changements dans la façon dont les logiciels sont hébergés et distribués. Les services en ligne existent pour la plupart des domaines du quotidien, aussi bien pour le commerce de détail que pour l'infrastructure informatique. Dans cet article, nous verrons comment l'intégration, la livraison et le déploiement continus peuvent bénéficier des technologies du Cloud, en particulier des infrastructure-as-code et des conteneurs.

Que vous soyez novice dans la configuration d'un pipeline CI/CD ou que vous disposiez déjà d'une installation hébergée localement, il est utile de comprendre comment ces techniques et outils peuvent être utilisés afin de les adapter à vos besoins.

L'infrastructure comme facteur limitant

L'intégration et le déploiement continus sont conçus pour accélérer le processus de distribution de logiciels à vos utilisateurs, tout en les rendant plus performants.

Une approche consistant à fréquemment publier de petites mises à jour associée à l'automatisation (entre autres pour les builds, la création de l'environnement et les tests) réduit le délai entre le développement et la publication, tout en rassurant sur la qualité du produit.

Les dernières étapes d'un workflow de CI/CD comprennent généralement des tests de bout en bout et de performance, ainsi que des tests manuels, qui nécessitent tous des environnements de test qui reflètent fidèlement la production. Pour une efficacité et une cohérence maximales des tests, ces environnements doivent être rafraîchis automatiquement plutôt que d'être maintenus manuellement. Pour mettre tout cela en pratique, il faut non seulement des compétences et des outils DevOps, mais aussi un ensemble d'infrastructures pour fournir la capacité de calcul nécessaire au serveur CI, aux agents de build, aux environnements de test et aux banques de données.

Le nombre de machines nécessaires pour prendre en charge votre processus de build dépend de la taille et de la complexité de votre projet et du nombre de développeurs qui y contribuent. Toutefois, ce nombre peut varier dans le temps.

Si vous hébergez et gérez votre propre infrastructure pour un pipeline CI/CD, vous devez décider où trouver l'équilibre entre la capacité suffisante pour faire fonctionner plusieurs travaux simultanément en période de forte demande et le coût d'achat et de maintenance des machines qui restent inactives pendant de longues périodes. C'est là que l'infrastructure hébergée dans le Cloud peut offrir des avantages considérables.

Quel est l'intérêt du Cloud pour votre pipeline d'intégration continue ?

L'avènement de l'infrastructure hébergée dans le Cloud a entraîné d'énormes changements dans la manière dont l'infrastructure est gérée.

Avec l'infrastructure-as-a-service (IaaS), la ressource informatique est fournie via des machines virtuelles (VM) ou des conteneurs. Pour obtenir plus de capacité, il suffit de demander (et, bien entendu, de payer). Ainsi, l'approvisionnement, l'installation et la gestion, ainsi que le matériel physique, ne sont plus un problème.

De cette façon, une entreprise n'a aucune visibilité des machines physiques qui hébergent ces machines virtuelles ou conteneurs (autre que la connaissance de la zone géographique à des fins réglementaires et de récupération d'urgence), ce qui a entraîné une évolution importante des mentalités.

Infrastructure-as-code

Dans un environnement hébergé dans le Cloud, les vastes ressources physiques utilisées pour le service permettent de traiter les serveurs comme des marchandises interchangeables et jetables, comparable à du bétail (« cattle » en anglais). Cela contraste avec l'hébergement traditionnel complet (« bare-metal »), où les serveurs ont longtemps été traités comme des animaux de compagnie avec leurs propres noms, quelqu'un pour s'occuper d'eux lorsqu'ils tombent malades et une espérance de vie relativement longue.

Avec l'approche « cattle », si un serveur doit être mis à jour ou réparé, il est simplement retiré et remplacé par un nouveau qui répond aux exigences. Aucun temps ni effort n'est consacré à la modification ou à la correction d'une instance existante. Au contraire, l'image est reconfigurée selon les besoins et une nouvelle instance est déployée.

Avec l'IaaS, vous ne payez que pour la ressource informatique que vous utilisez, il est donc logique d'adopter la mentalité « cattle ». C'est là qu'intervient l'infrastructure-as-code (IaC). L'IaC est une pratique du DevOps qui consiste à rendre répétable l'approvisionnement des infrastructures à l'aide de scripts.

En ajoutant tous les détails de la configuration dans le code, et en les gardant sous contrôle de code source tout comme le code de l'application, vous pouvez éviter d'apporter des modifications manuelles à des environnements individuels qui feraient apparaître des incohérences.

Tout comme un logiciel en cours de développement, l'infrastructure elle-même peut être soumise à un pipeline CI/CD pour s'assurer qu'elle fonctionne comme prévu, avec l'avantage que les changements peuvent être facilement annulés.

La codification de votre infrastructure ouvre la porte à plus d'automatisation : les environnements peuvent être créés automatiquement lorsqu'ils sont nécessaires et mis à jour en déployant une nouvelle configuration.

L'offre pratiquement illimitée de ressources de calcul du fournisseur d'IaaS vous permet d'augmenter et de diminuer la capacité en fonction de la demande, tout en garantissant le remplacement immédiat d'une instance en cas de défaillance. Ainsi, votre configuration CI/CD peut répondre à l'augmentation de la demande et assurer un service fiable.

Externalisation du matériel

Avec l'IaaS et le CaaS, la maintenance du matériel physique, y compris la gestion des capacités de réseau et de stockage, et la logistique du centre de données sont toutes prises en charge par le fournisseur Cloud dans le cadre de son offre de services.

Ainsi, votre équipe peut se concentrer sur l'optimisation des processus de votre pipeline et sur sa sécurité. Dans la mesure où le coût est à la fois lié à la puissance de traitement et au temps, il est important de paralléliser les tâches lorsque possible, ce qui permet à vos développeurs d'obtenir des résultats plus rapidement que si moins de machines étaient utilisées sur une plus longue période.

Conteneurs

Les conteneurs appliquent les principes de l'IaC et vous permettent d'utiliser encore plus efficacement l'infrastructure hébergée dans le Cloud. Un conteneur contient un logiciel avec toutes les dépendances dont il a besoin pour fonctionner, mettant fin à l'époque ou cela ne fonctionnait que sur votre machine et ou il fallait rechercher les différences au sein de la configuration. Docker est l'une des technologies de conteneurs les plus connues, mais d'autres possibilités existent.

Comme les machines virtuelles, les conteneurs permettent à plusieurs applications de s'exécuter sur le même serveur physique tout en les gardant indépendantes les unes des autres. Cependant, contrairement aux VM, les conteneurs n'incluent pas de système d'exploitation, ce qui réduit leur empreinte, et ne nécessitent pas une part fixe des ressources de l'hôte. Par conséquent, il est possible de placer bien plus de conteneurs que de VM sur une seule machine, ce qui les rend idéaux pour déployer efficacement des logiciels dans une infrastructure hébergée dans le Cloud.

Utiliser des conteneurs signifie regrouper les dépendances environnementales et les détails de configuration avec le logiciel en un seul artefact qui peut être déployé sur n'importe quelle machine qui fournit le temps d'exécution du conteneur.

Une application peut être divisée en plusieurs conteneurs, comme c'est le cas avec une architecture de micro-services, auquel cas les conteneurs doivent être déployés sur la même machine ou sur un cluster de machines en réseau. Des outils d'orchestration de conteneurs, tels que Kubernetes, ont été développés pour faciliter le travail avec un grand nombre de conteneurs en automatisant des tâches telles que les déploiements, la gestion et la mise à l'échelle.

L'utilisation de conteneurs dans un workflow CI/CD simplifie considérablement le processus de déploiement du dernier build à différentes étapes du pipeline. L'artefact de build est une image du conteneur, qui peut être déployée de manière cohérente dans chaque environnement de test avant d'être mise en production.

Dans un pipeline CI/CD cloud, les conteneurs utilisent efficacement les ressources de calcul et vous permettent d'exploiter pleinement les outils d'automatisation. Vous pouvez augmenter la capacité lorsque la demande est élevée, mais faire des économies en supprimant des conteneurs et en libérant l'infrastructure sous-jacente lorsque la demande est plus faible.

En plus de l'IaaS, plusieurs fournisseurs de Cloud proposent désormais également des containers-as-a-service (CaaS), permettant aux entreprises de déployer directement des conteneurs sans avoir à gérer la plateforme d'orchestration et à configurer le cluster.

Considérations relatives à l'hébergement de la CI dans le cloud

Si un pipeline de CI/CD Cloud peut offrir des avantages significatifs en termes de coût d'infrastructure, d'évolutivité et de fiabilité, quelques inconvénients sont à prendre en compte.

Connaissances et compétences

Tout d'abord, l'utilisation de services Cloud, comme l'IaaS et le CaaS, implique inévitablement une courbe d'apprentissage. Si vous n'avez pas encore d'expertise dans ces domaines, les membres de votre équipe auront besoin de temps pour se perfectionner ou vous devrez envisager d'apporter ces connaissances. Cela dit, savoir travailler avec les technologies Cloud est une compétence recherchée. Vous donnez ainsi à vos équipes la possibilité de développer ces compétences et d'utiliser les dernières technologies, ce qui peut être un avantage à la fois en termes de rétention du personnel et d'embauche.

Architecture du système

Si le logiciel en cours de développement a été conçu pour le Cloud, en utilisant des micro-services, des conteneurs et d'autres pratiques natives du Cloud, alors l'automatisation de la progression dans le pipeline CI/CD cloud à l'aide de conteneurs est relativement simple. En revanche, si vous travaillez avec une architecture monolithique, le packaging de vos logiciels dans des conteneurs peut être un défi.

Bien entendu, les conteneurs ne sont pas essentiels pour un pipeline hébergé dans le Cloud, et vous pouvez toujours utiliser des machines virtuelles sur l'infrastructure d'un fournisseur Cloud pour exécuter des builds et fournir des environnements de pré-production cohérents pour les tests. Néanmoins, les VM consomment plus de ressources que les conteneurs et les environnements devront être configurés séparément.

Coût

Dans le contexte du Cloud, le temps représente de l'argent. Ainsi, vous ne voulez pas payer pour des ressources informatiques inutilisées. Pour que l'hébergement Cloud soit rentable, il est essentiel de l'utiliser efficacement. Il faut donc exploiter pleinement les outils qui surveillent l'utilisation et libérent les instances inactives après un délai d'inactivité, ou mettre en place cette logique vous-même. Cette dernière option peut nécessiter des compétences que votre entreprise n'a pas encore, il vaut donc la peine d'étudier et de comparer les différentes options.

Sécurité

La sécurité a toujours été une préoccupation lorsqu'il s'agit d'héberger des données et des services dans le Cloud. Pour certaines entreprises, le simple fait qu'un logiciel sensible se trouve sur le kit d'un tiers est un obstacle. Cela dit, de nombreuses entreprises choisissent d'utiliser des Cloud publics pour héberger à la fois leurs services en direct et leurs pipelines de déploiement, du dépôt de contrôle de code source, au serveur CI et aux environnements de test.

Pour atténuer les risques, il est essentiel de comprendre les vecteurs d'attaque potentiels, de prévoir des protections dans votre pipeline pour éviter qu'il ne soit utilisé par des acteurs malveillants pour accéder à votre système réel et de mettre en place les meilleures pratiques en matière de gestion des accréditations, de données de test et de contrôle d'accès.

Approches hybrides

Si l'infrastructure-as-code, les conteneurs et l'orchestration des conteneurs ont tous leurs racines dans la technologie Cloud, ils peuvent être utilisés dans une infrastructure hybride également.

Les mêmes outils peuvent être utilisés à la fois dans les Cloud privés et dans les infrastructures sur site, sous réserve d'une limite à l'échelle du pipeline. Si votre entreprise prévoit de passer à une infrastructure hébergée dans le Cloud à l'avenir, l'adoption anticipée d'outils natifs du Cloud vous permettra de développer une expertise à l'avance et de faciliter la transition.

La pratique native du Cloud de l'infrastructure-as-code apporte de multiples avantages pour une intégration et un déploiement continus sur l'infrastructure locale. Pour commencer, la configuration d'un nouvel environnement est beaucoup plus rapide, il suffit d'exécuter un script.

La codification de la création d'environnements assure également la consistance, ce qui vous permet d'assurer la parité entre votre configuration de production et les environnements de pré-production, que ce soit pour la sécurité, les performances ou les tests d'interface utilisateur, ou les sandboxes pour les équipes de support et de vente. En conservant les fichiers de configuration de l'infrastructure dans le contrôle de code source, l'équipe dispose d'une trace des modifications qui ont été introduites et du moment où elles l'ont été, ce qui peut grandement simplifier le débogage des problèmes environnementaux.

Dans certains cas, les organisations choisissent d'utiliser des ressources Cloud pour des étapes particulières de leur pipeline de déploiement. Par exemple, les tests de charge et de performance peuvent nécessiter beaucoup de ressources, et il peut être plus rentable de créer un environnement temporaire dans le Cloud afin de les réaliser. Lorsque vous envisagez cette approche, il est important de prendre en compte la complexité potentielle et le temps nécessaire pour déplacer votre build vers une autre infrastructure.

Pourquoi choisir le cloud pour votre pipeline de CI ?

Si un processus automatisé de CI/CD offre des avantages significatifs en termes de rapidité de livraison et d'assurance qualité, l'infrastructure disponible est un facteur limitant en termes de rapidité et de débit. En déplaçant votre pipeline dans le Cloud, vous n'avez plus à faire un choix entre le provisionnement d'un nombre suffisant de serveurs pour faire face aux pics de demande et le coût d'achat et de gestion de machines qui ne sont pas utilisées en permanence.

Les technologies et pratiques natives du cloud permettent non seulement une utilisation efficace de l'infrastructure hébergée dans le Cloud, mais ont également amélioré les techniques d'intégration et de déploiement continus. Les mêmes approches peuvent également être appliquées aux infrastructures locales, ce qui rend la livraison de logiciels plus rapide et plus fiable.