{"id":6359,"date":"2023-09-12T13:42:51","date_gmt":"2023-09-12T11:42:51","guid":{"rendered":"https:\/\/www.luklagroup.com\/sem-categoria\/le-deploiement-continu-differentes-strategies\/"},"modified":"2025-02-14T11:51:43","modified_gmt":"2025-02-14T10:51:43","slug":"le-deploiement-continu-differentes-strategies","status":"publish","type":"post","link":"https:\/\/www.luklagroup.com\/pt-pt\/apps-data-pt-pt\/le-deploiement-continu-differentes-strategies\/","title":{"rendered":"Le D\u00e9ploiement Continu &#8211; Diff\u00e9rentes Strat\u00e9gies"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Lorsque l&#8217;on d\u00e9veloppe des solutions applicatives, il arrive in\u00e9vitablement le moment o\u00f9 nous devons <strong>d\u00e9ployer une nouvelle version<\/strong> en production.<br>Il existe bien des fa\u00e7ons de faire, mais je souhaite vous proposer dans cet article quelques solutions <strong>efficaces et fiables<\/strong> que j&#8217;ai eu l&#8217;occasion d&#8217;utiliser ces derni\u00e8res ann\u00e9es chez Digiwin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans cet article, je parlerai essentiellement de solutions de d\u00e9ploiement de code bas\u00e9es sur des langages open source. Ces technologies sont souvent ex\u00e9cut\u00e9es sur un environnement Linux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu&#8217;est-ce que le D\u00e9ploiement Continu ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Automatiser le d\u00e9ploiement<\/strong> depuis les sources produites est une n\u00e9cessit\u00e9 pour apporter de la <strong>fiabilit\u00e9 <\/strong>dans le processus de livraison de nouvelles versions d&#8217;un logiciel. <br>G\u00e9n\u00e9ralement, pendant les formations scolaires, lorsqu&#8217;on apprend \u00e0 d\u00e9velopper des logiciels, nous livrons les sources manuellement, via un serveur FTP par exemple. Le fait de recourir \u00e0 une action manuelle, comme dans toute industrie, peut cependant engendrer une <strong>erreur d&#8217;origine humaine<\/strong>.<br>C&#8217;est pour cela qu&#8217;il est important, <strong>d\u00e8s la phase d&#8217;initialisation de votre projet<\/strong>, de mettre en place une proc\u00e9dure de livraison et de l&#8217;automatiser. C&#8217;est ce que nous appelons le <strong>D\u00e9ploiement Continu<\/strong>, ou CD (Continuous Deployment en Anglais).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Adapter votre strat\u00e9gie de d\u00e9ploiement continu \u00e0 votre gestion de projet<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans les <strong>ESN<\/strong>, nous contractualisons g\u00e9n\u00e9ralement la r\u00e9alisation d&#8217;un lot de fonctionnalit\u00e9s. C&#8217;est pourquoi on adopte souvent une strat\u00e9gie de livraison par lot de fonctionnalit\u00e9s rassembl\u00e9es dans une d\u00e9clinaison unique du logiciel.<br>Chez les \u00e9diteurs de logiciel, nous pouvons retrouver des cycles plus courts avec la r\u00e9alisation parall\u00e8le de fonctionnalit\u00e9s et une livraison en production au fil de l&#8217;eau de ces nouvelles fonctionnalit\u00e9s.<br>C\u00f4t\u00e9 gestion des sources, on retrouve souvent deux m\u00e9thodologies GIT adapt\u00e9es en fonction de la m\u00e9thode de gestion de projet, <a href=\"https:\/\/danielkummer.github.io\/git-flow-cheatsheet\/index.fr_FR.html\" rel=\"nofollow\">Gitflow<\/a> ou <a href=\"https:\/\/docs.github.com\/fr\/get-started\/quickstart\/github-flow\" rel=\"nofollow\">GithubFlow<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deux approches principales de d\u00e9ploiement<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">L&#8217;approche &#8220;Push&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;approche <strong>Push <\/strong>fait intervenir un syst\u00e8me externe, la plupart du temps un outil d&#8217;int\u00e9gration continue comme les <a href=\"https:\/\/docs.gitlab.com\/ee\/ci\/pipelines\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gitlab Pipelines<\/a>, <a href=\"https:\/\/docs.github.com\/fr\/actions\/automating-builds-and-tests\/about-continuous-integration\" target=\"_blank\" rel=\"noreferrer noopener\">Github Actions<\/a>&#8230;<br>Cet outil va d\u00e9clencher une suite d&#8217;actions en fonction des commits sur GIT. C&#8217;est cet outil qui va ensuite se connecter au serveur ou au cluster pour mettre \u00e0 jour le livrable. Il va donc <strong>pousser<\/strong> les nouvelles modifications vers l&#8217;environnement d&#8217;ex\u00e9cution.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Avantages \/ Inconvenients<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Les plus : <\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Les protections des branches \/ restrictions d&#8217;acc\u00e8s se font au niveau du <a href=\"https:\/\/developer.mozilla.org\/fr\/docs\/Glossary\/SCM\" target=\"_blank\" rel=\"noreferrer noopener\">SCM<\/a><\/li><li>La proc\u00e9dure de d\u00e9ploiement est versionn\u00e9e, comme les sources<\/li><li>L&#8217;\u00e9tat du d\u00e9ploiement est visible sur le SCM<\/li><li>Beaucoup d&#8217;outils diff\u00e9rents peuvent \u00eatre utilis\u00e9s, notamment gr\u00e2ce \u00e0 l&#8217;utilisation de Docker <\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Les moins<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>L&#8217;outil doit disposer d&#8217;un acc\u00e8s technique (SSH par exemple) vers la plateforme d&#8217;exploitation<\/li><li>Le SCM stocke les Credentials permettant de se connecter aux serveurs<\/li><li>Enfermement sur un SCM sp\u00e9cifique. En cas de migration vers un autre outil, il faudra reconstruire la proc\u00e9dure de d\u00e9ploiement.<\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Comment faire ?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>H\u00e9bergement de conteneurs Docker classique :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>On peut exposer le daemon Docker via TCP pour le piloter \u00e0 distance. Ce qui permet d&#8217;ordonner l&#8217;ex\u00e9cution d&#8217;un conteneur sur le serveur directement.<\/li><li>On peut aussi se connecter en SSH sur le serveur et utiliser des commandes docker locales, ce qui permet d&#8217;avoir recours \u00e0 <a href=\"https:\/\/docs.docker.com\/compose\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker Compose<\/a>.<br>L&#8217;avantage est de pouvoir continuer \u00e0 se connecter au serveur en SSH et manipuler les conteneurs sans l&#8217;outil de Pipeline.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kubernetes :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Il est possible de se connecter au <a rel=\"noreferrer noopener\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/components\/\" target=\"_blank\">Control PLane<\/a> et de piloter les d\u00e9ploiements \u00e0 l&#8217;aide de <a rel=\"noreferrer noopener\" href=\"https:\/\/kubernetes.io\/fr\/docs\/tasks\/tools\/install-kubectl\/\" target=\"_blank\">kubectl<\/a> ou de <a rel=\"noreferrer noopener\" href=\"https:\/\/helm.sh\/\" target=\"_blank\">Helm<\/a>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Non conteneuris\u00e9 :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Nous pouvons uploader des sources via <strong>rsync <\/strong>ou <strong>scp <\/strong>puis \u00e9ventuellement se connecter via SSH au serveur pour ex\u00e9cuter des commandes (migration de bases de donn\u00e9es, nettoyage de cache etc&#8230;)<\/li><li>On peut utiliser des outils comme <a href=\"https:\/\/ansistrano.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ansistrano<\/a> qui vont automatiser la transition entre deux versions des sources.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">L&#8217;approche &#8220;Pull&#8221;<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les changements de versions sont g\u00e9r\u00e9s <strong>depuis l&#8217;int\u00e9rieur du serveur <\/strong>ou du cluster.<br>Cela n\u00e9cessite qu&#8217;un <strong>op\u00e9rateur <\/strong>(un programme) soit en charge de surveiller le gestionnaire de sources (ou autre) afin de provoquer la mise \u00e0 jour applicative. C&#8217;est donc cet op\u00e9rateur qui d\u00e9finit et maintient l&#8217;\u00e9tat du d\u00e9ploiement.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"#avantages-inconv%C3%A9nients-1\"><\/a>Avantages \/ Inconv\u00e9nients<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Les plus :<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Pas besoin d&#8217;exposer les serveurs \u00e0 des outils externes, les <strong>flux <\/strong>sont seulement <strong>sortants<\/strong>, et non plus entrants pour le d\u00e9ploiement.<\/li><li>Pas besoin de modifier la proc\u00e9dure de d\u00e9ploiement lors d&#8217;un changement de SCM. On est <strong>moins enferm\u00e9<\/strong> dans un seul syst\u00e8me.<\/li><li>Les droits d&#8217;administration peuvent rester seulement en local et les protections\/restrictions d&#8217;environnements <strong>ne sont pas alt\u00e9rables<\/strong> depuis l&#8217;ext\u00e9rieur.<\/li><li>Le <strong>monitoring <\/strong>d&#8217;un d\u00e9ploiement est <strong>plus ais\u00e9<\/strong>, car le syst\u00e8me est synchronis\u00e9 en permanence avec la production. Cela permet d&#8217;avoir des outils plus proches de l&#8217;ex\u00e9cution.<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Les moins :<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>La gestion des <strong>secrets <\/strong>et des variables d&#8217;environnement se fait c\u00f4t\u00e9 ex\u00e9cution. Il est donc n\u00e9cessaire d&#8217;avoir une <strong>sauvegarde externe<\/strong> de ces donn\u00e9es pour pouvoir les restaurer en cas d&#8217;avarie.<\/li><li>Il peut y avoir une <strong>latence <\/strong>entre la mise \u00e0 jour du SCM et le d\u00e9ploiement effectif. On est g\u00e9n\u00e9ralement bas\u00e9 sur un principe de polling, consistant \u00e0 v\u00e9rifier \u00e0 une certaine fr\u00e9quence s&#8217;il existe une mise \u00e0 jour.<\/li><li>Le versionning des configurations de d\u00e9ploiement est ind\u00e9pendant du syst\u00e8me applicatif. Il faut donc \u00eatre pr\u00e9cautionneux lors de l&#8217;ajout de commande \u00e0 la livraison d&#8217;une nouvelle version par exemple.<\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"#comment-faire--1\"><\/a>Comment faire ?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>H\u00e9bergement de conteneurs Docker classiques :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>On peut simplement <strong>v\u00e9rifier p\u00e9riodiquement<\/strong> qu&#8217;une nouvelle image est disponible sur un <strong>registry <\/strong>et faire la mise \u00e0 jour automatiquement. Exemple d&#8217;outil : <a href=\"https:\/\/containrrr.dev\/watchtower\/\" target=\"_blank\" rel=\"noreferrer noopener\">Watchtower<\/a><\/li><li>D\u00e9ployer un <strong>runner <\/strong>sur le serveur qui restera en attente d&#8217;ex\u00e9cuter un pipeline de d\u00e9ploiement. Ce mode est un peu hybride avec le mode <strong>Push <\/strong>car il permet de ne pas exposer publiquement les acc\u00e8s au serveur, c&#8217;est le <strong>runner <\/strong>qui v\u00e9rifie p\u00e9riodiquement s&#8217;il n&#8217;a pas une t\u00e2che \u00e0 effectuer.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kubernetes :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Utiliser un outil comme <a href=\"https:\/\/argo-cd.readthedocs.io\/en\/stable\/\" target=\"_blank\" rel=\"noreferrer noopener\">ArgoCD<\/a> qui est un outil complet permettant de manager l&#8217;\u00e9tat d&#8217;un cluster <strong>Kubernetes<\/strong>.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Non conteneuris\u00e9 :<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Il est possible de surveiller p\u00e9riodiquement si de nouvelles sources sont disponibles sur <strong>GIT<\/strong> ou sur un <strong>Bucket S3<\/strong>.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"#conclusion\"><\/a>Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Que ce soit par l&#8217;approche <strong>Pull <\/strong>ou <strong>Push<\/strong>, il faudra <strong>adapter <\/strong>vos outils \u00e0 votre fa\u00e7on de fonctionner. Ce choix doit aussi tenir compte des acteurs en charge de la gestion des proc\u00e9dures de d\u00e9ploiement : \u00e9quipe OPS ou d\u00e9veloppeurs ?<br>Votre <strong>SCM<\/strong> influencera aussi certainement le choix de votre <strong>strat\u00e9gie <\/strong>de d\u00e9ploiement continu. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chacune de ces strat\u00e9gies a des avantages et inconv\u00e9nients. Chez Digiwin, nous sommes l\u00e0 pour vous aider et vous accompagner \u00e0 faire le bon choix et \u00e0 mettre en place un socle fiable et p\u00e9renne pour le d\u00e9ploiement de vos applications.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque l&#8217;on d\u00e9veloppe des solutions applicatives, il arrive in\u00e9vitablement le moment o\u00f9 nous devons d\u00e9ployer une nouvelle version en production.Il existe bien des fa\u00e7ons de faire, mais je souhaite vous proposer dans cet article quelques solutions efficaces et fiables que j&#8217;ai eu l&#8217;occasion d&#8217;utiliser ces derni\u00e8res ann\u00e9es chez Digiwin. Dans cet article, je parlerai essentiellement [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":6360,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"categories":[183,191,192],"tags":[193,187,194],"class_list":["post-6359","post","type-post","status-publish","format-standard","has-post-thumbnail","category-apps-data-pt-pt","category-cloud-cyber-pt-pt","category-managed-services-pt-pt","tag-cd-pt-pt","tag-developpement-pt-pt","tag-tech-pt-pt"],"_links":{"self":[{"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/posts\/6359","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=6359"}],"version-history":[{"count":1,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/posts\/6359\/revisions"}],"predecessor-version":[{"id":6472,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/posts\/6359\/revisions\/6472"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/media\/6360"}],"wp:attachment":[{"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=6359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=6359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.luklagroup.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=6359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}