{"id":3356,"date":"2023-09-18T20:24:19","date_gmt":"2023-09-18T18:24:19","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=3356"},"modified":"2023-09-18T20:24:22","modified_gmt":"2023-09-18T18:24:22","slug":"prestashop-deploiement-continu-qui-peut-livrer-du-code-et-ou","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2023\/09\/18\/prestashop-deploiement-continu-qui-peut-livrer-du-code-et-ou\/","title":{"rendered":"Prestashop : D\u00e9ploiement continu, qui peut livrer du code et ou"},"content":{"rendered":"\n<p>Cet article est le 2\u00e8me de la s\u00e9rie sur le d\u00e9ploiement et l&rsquo;int\u00e9gration continu dans Prestashop.<br>Les autres articles articles de cette s\u00e9rie sont les suivants :<\/p>\n\n\n\n<ul>\n<li><a title=\"Prestashop : Aller plus loin dans le d\u00e9ploiement continu\" href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/09\/11\/prestashop-aller-plus-loin-dans-le-deploiement-continu\/\">Introduction<\/a><\/li>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/09\/16\/prestashop-deploiement-continu-initialisation-du-projet\/\">Initialisation du projet<\/a><\/li>\n<li><a title=\"Prestashop : D\u00e9ploiement continu, qui peut livrer du code et ou\" href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/09\/18\/prestashop-deploiement-continu-qui-peut-livrer-du-code-et-ou\/\">Qui peut livrer du code et ou<\/a><\/li>\n<li><a title=\"Prestashop : D\u00e9ploiement continu, v\u00e9rifier la qualit\u00e9 du code\" href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/09\/22\/prestashop-deploiement-continu-verifier-la-qualite-du-code\/\">Est-ce que la qualit\u00e9 du code livr\u00e9e est correcte<\/a><\/li>\n<li><a title=\"Prestashop : Comment limiter les interactions manuelles avec le d\u00e9ploiement continu\" href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/11\/06\/prestashop-comment-limiter-les-interactions-manuelles-avec-le-deploiement-continu\/\">Comment limiter les interactions manuelles<\/a><\/li>\n<li><a title=\"Prestashop : Est-ce que mon site fonctionne toujours apr\u00e8s ma livraison de code.\" href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/11\/08\/prestashop-est-ce-que-mon-site-fonctionne-toujours-apres-ma-livraison-de-code\/\">Est-ce que mon site fonctionne toujours apr\u00e8s ma livraison de code.<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration initiale<\/h2>\n\n\n\n<p>Cette \u00e9tape va surtout vous concerner si vous travaillez en \u00e9quipe sur les projets et\/ou si vous faites intervenir ponctuellement des intervenants externes.<br>Dans le cas ou vous travaillez tout seul, ce n&rsquo;est pas forc\u00e9ment n\u00e9cessaire mais c&rsquo;est tout de m\u00eame une bonne pratique.<\/p>\n<p>Dans le cadre de mes projets j&rsquo;ai toujours 3 environnements :<\/p>\n<ol>\n<li>Environnement local<\/li>\n<li>Environnement de pr\u00e9production ( branche git dev )<\/li>\n<li>Environnement de production ( branche git master )<\/li>\n<\/ol>\n<p>Au niveau de git, le workflow utilis\u00e9 est le suivant :<\/p>\n<p>Toute nouvelle fonctionnalit\u00e9 est faite d&rsquo;abord en local, dans une nouvelle branche, issue de master.<br>La livraison en <strong>pr\u00e9production<\/strong> est faite en mergeant cette branche dans la branche <strong>dev<\/strong><br>La livraison en <strong>production<\/strong> est faite en mergeant cette branche dans le branche <strong>master<\/strong><\/p>\n<p><strong>Aucun commit n&rsquo;est donc fait directement ni dans la branche master, ni dans la branche dev.<\/strong><\/p>\n<p>Partant de ce principe on peut donc d\u00e9finir les branches <strong>master<\/strong> et <strong>dev<\/strong>&nbsp; comme prot\u00e9g\u00e9es, et emp\u00eacher les d\u00e9veloppeurs de pousser directement du code dans ces branches.<br>Lors de l&rsquo;initialisation de notre projet nous avons cr\u00e9\u00e9 par d\u00e9faut une branche <strong>master.<\/strong><br><br>Nous pouvons donc cr\u00e9er une branche<strong> dev<\/strong> si elle n&rsquo;existe pas encore.<br>Puis la pousser sur le d\u00e9p\u00f4t distant et d\u00e9finir que notre branche suivra la branche dev distante.<br>C&rsquo;est possible via les commandes suivantes :<\/p>\n\n\n\n<pre lang=\"bash\">\ngit checkout -b dev\ngit push --set-upstream origin dev\n<\/pre>\n\n\n\n<p>Nos 2 branches sont bien cr\u00e9\u00e9s \u00e0 pr\u00e9sent, il est temps d&rsquo;aller dans gitlab pour configurer ce blocage.<br><br>Je pars du principe que votre compte gitlab est en anglais.<br><br>Aller dans \u00ab\u00a0Settings \/&nbsp; Repository \u00a0\u00bb puis dans \u00ab\u00a0Protected branches\u00a0\u00bb.<br>Normalement la&nbsp; branche master doit d\u00e9j\u00e0 \u00eatre prot\u00e9g\u00e9e, mais si ce n&rsquo;est pas le cas configurez le.<br>Puis faites de m\u00eame sur la branche dev.<\/p>\n<p>Il est \u00e9galement n\u00e9cessaire de configurer quel r\u00f4le est autoris\u00e9e \u00e0 merger ou pusher du code.<br>Dans mon cas j&rsquo;autorise ensuite uniquement les utilisateurs qui ont le r\u00f4le \u00ab\u00a0Maintainers\u00a0\u00bb \u00e0 merger le code, et personne \u00e0 push.<br><br>En fonction de la taille de votre projet et des diff\u00e9rents intervenants c&rsquo;est ici qu&rsquo;il faudra affiner les droits.<\/p>\n<p>Un lead developpeur aura par exemple le r\u00f4le de maintainer sur le projet ce qui permettra \u00e0 lui seul de livrer du code en production.<br>Mais on peut d\u00e9j\u00e0 autoriser les d\u00e9veloppeurs \u00e0 livrer \u00e0 merger leur code en pr\u00e9production ( En autorisant le r\u00f4le Developer )<br><br>Sur un projet personnel, on peut \u00eatre moins strict et se dire que seule la branche master sera prot\u00e9g\u00e9e.<br>Ceci simplifiera les livraisons de code.<br>Libre \u00e0 vous ici de d\u00e9finir vos r\u00e8gles en fonction de la taille de votre \u00e9quipe et de votre projet \ud83d\ude42<br>Mais c&rsquo;est ici que vous pouvez le d\u00e9finir.<br><br>Pour toute question sur les r\u00f4les, vous pouvez lire la documentation officielle de gitlab sur les diff\u00e9rents r\u00f4les : <a href=\"_wp_link_placeholder\" data-wplink-edit=\"true\">https:\/\/docs.gitlab.com\/ee\/user\/permissions.html<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"392\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1024x392.png\" alt=\"Droits sur les branches\" class=\"wp-image-3346\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1024x392.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-300x115.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-768x294.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image.png 1272w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Ceci aura pour effet d&rsquo;interdire les push de code en direct sur ces branches.<br>Comme vous pouvez le voir sur la capture suivante, si j&rsquo;essaye d&rsquo;envoyer du code, le push va g\u00e9n\u00e9rer une erreur :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"817\" height=\"247\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1.png\" alt=\"\" class=\"wp-image-3348\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1.png 817w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1-300x91.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-1-768x232.png 768w\" sizes=\"auto, (max-width: 817px) 100vw, 817px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Livraison de code avec les Merge Request (MR)<\/h2>\n\n\n\n<p>A partir de la pour la livraison du code on va utiliser la fonctionnalit\u00e9 de Merge Request de gitlab.<br>( Si vous avez l&rsquo;habitude d&rsquo;utiliser Github le wording change juste l\u00e9g\u00e8rement de Pull Request \u00e0 Merge Request mais c&rsquo;est exactement la m\u00eame chose. )<br><br>Pour l&rsquo;exemple nous allons donc cr\u00e9er une nouvelle branche \u00ab\u00a0gitignore\u00a0\u00bb et ajouter les fichiers Thumbs.db dans le fichier .gitignore situ\u00e9 \u00e0 la racine du projet.<br>Une fois la branche envoy\u00e9e, vous pouvez tout de suite voir un encart vert en haut de votre d\u00e9p\u00f4t dans l&rsquo;interface gitlab qui vous demande de faire une merge request.<br>Cliquer sur le bouton \u00ab\u00a0Create a merge request\u00a0\u00bb<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-3.png\" alt=\"\" class=\"wp-image-3410\" style=\"width:1200px;height:146px\" width=\"1200\" height=\"146\"\/><\/a><\/figure>\n\n\n\n<p>Nous allons \u00e0 pr\u00e9sent voir les diff\u00e9rentes options de la fen\u00eatre de cr\u00e9ation de la merge request<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-4.png\" alt=\"\" class=\"wp-image-3411\" style=\"width:1200px;height:531px\" width=\"1200\" height=\"531\"\/><\/a><\/figure>\n\n\n\n<ol>\n<li>&nbsp;La branche dans laquelle vous souhaitez livrer le code. Par d\u00e9faut ce sera la branche par d\u00e9faut du projet qui sera s\u00e9lectionn\u00e9e.<br>Si vous souhaitez livrer sur l&rsquo;environnement de pr\u00e9production il faut donc bien penser \u00e0 merger vers \u00ab\u00a0dev\u00a0\u00bb<\/li>\n<li>Mettez un titre qui d\u00e9crit la modification ( par d\u00e9faut cela reprends le message du commit )<\/li>\n<li>Mettez une description rapide du changement, ceci permets d&rsquo;expliquer aux autres intervenants ce qui est r\u00e9alis\u00e9 dans cette branche.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"688\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-5.png\" alt=\"\" class=\"wp-image-3412\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-5.png 778w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-5-300x265.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-5-768x679.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/a><\/figure>\n\n\n\n<ol>\n<li>(Si n\u00e9cessaire ) s\u00e9lectionner la personne qui va devoir v\u00e9rifier le code<\/li>\n<li>Options qui permettent de supprimer la branche une fois qu&rsquo;elle est livr\u00e9e ( bonne pratique pour \u00e9viter d&rsquo;avoir trop de branches sur le projet )<br>Et de regrouper tous les commits d&rsquo;une branche en un seul lors de la merge request ( permets d&rsquo;avoir un historique git plus simple ), sur ce point c&rsquo;est \u00e0 votre convenance.<br>De mon c\u00f4t\u00e9 j&rsquo;aime bien garder l&rsquo;historique de tous les commits sur certains d\u00e9veloppements pour retenir les diff\u00e9rentes \u00e9tapes.<\/li>\n<li>Liste des commits qui vont \u00eatre livr\u00e9s<\/li>\n<li>Une fois que tout est bon cliquez sur le bouton \u00ab\u00a0Create Merge Request\u00a0\u00bb \ud83d\ude42<\/li>\n<\/ol>\n<p>La merge request est ensuite cr\u00e9\u00e9 comme vous pouvez le voir sur la capture suivante :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-6-1024x508.png\" alt=\"\" class=\"wp-image-3413\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-6-1024x508.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-6-300x149.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-6-768x381.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-6.png 1045w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>L&rsquo;onglet important ici est \u00ab\u00a0Changes\u00a0\u00bb, puisqu&rsquo;il permets de v\u00e9rifier les changements de code qui vont \u00eatre mis en place.<br>Et des les valider ( ou non ) <br>Dans notre cas d&rsquo;exemple on peut voir que c&rsquo;est tr\u00e8s basique, mais il peut y avoir des 100 aines de lignes dans cette vue !<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"808\" height=\"475\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-7.png\" alt=\"\" class=\"wp-image-3414\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-7.png 808w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-7-300x176.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-7-768x451.png 768w\" sizes=\"auto, (max-width: 808px) 100vw, 808px\" \/><\/a><\/figure>\n\n\n\n<p>Si les changements ne sont pas bons, le reviewer pourra mettre des commentaires et refuser votre Merge Request.<br \/>Dans ce cas il suffit de pousser du code sur la branche concern\u00e9e, et la merge request se mettra \u00e0 jour automatiquement.<br \/><br \/>Si les changements sont ok, il est temps de cliquer sur le bouton \u00ab\u00a0Merge\u00a0\u00bb de l&rsquo;onglet \u00ab\u00a0Overview\u00a0\u00bb<br \/>Et le code sera ensuite bien livr\u00e9 \ud83d\ude42<br \/><br \/>A travers ces diff\u00e9rentes \u00e9tapes Il est donc possible de contr\u00f4ler le code qui va \u00eatre envoy\u00e9 vers quel environnement et par qui.<br \/>Ceci nous permets de r\u00e9pondre \u00e0 notre premi\u00e8re probl\u00e9matique de qui livre du code et ou.<br \/><br \/>Dans la prochaine \u00e9tape, on va s&rsquo;int\u00e9resser \u00e0 v\u00e9rifier si le code qui est pouss\u00e9 est conforme \u00e0 la qualit\u00e9 de notre projet.<br \/>Et que les fichiers envoy\u00e9s sont valides, toutes ces v\u00e9rifications vont pouvoir se faire sur les Merge Request (MR), ce qui permettra d&rsquo;\u00e9viter de livrer n&rsquo;importe quoi \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article est le 2\u00e8me de la s\u00e9rie sur le d\u00e9ploiement et l&rsquo;int\u00e9gration continu dans Prestashop.Les autres articles articles de cette s\u00e9rie sont les suivants : Configuration initiale Cette \u00e9tape va surtout vous concerner si vous travaillez en \u00e9quipe sur les projets et\/ou si vous faites intervenir ponctuellement des intervenants externes.Dans le cas ou vous [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[597,484,104],"class_list":["post-3356","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-ci-cd","tag-gitlab","tag-prestashop"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/3356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=3356"}],"version-history":[{"count":9,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/3356\/revisions"}],"predecessor-version":[{"id":3425,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/3356\/revisions\/3425"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=3356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=3356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=3356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}