{"id":3404,"date":"2023-11-06T22:55:58","date_gmt":"2023-11-06T20:55:58","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=3404"},"modified":"2023-11-12T13:30:17","modified_gmt":"2023-11-12T11:30:17","slug":"prestashop-comment-limiter-les-interactions-manuelles-avec-le-deploiement-continu","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2023\/11\/06\/prestashop-comment-limiter-les-interactions-manuelles-avec-le-deploiement-continu\/","title":{"rendered":"Prestashop : Comment limiter les interactions manuelles avec le d\u00e9ploiement continu"},"content":{"rendered":"\n<p>Cet article est le 4\u00e8me de la s\u00e9rie sur le d\u00e9ploiement et l\u2019int\u00e9gration continu dans Prestashop.<br>Les autres 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<p>Un point relativement p\u00e9nible avec Prestashop et qu&rsquo;il n&rsquo;existe pas nativement de solution automatis\u00e9e pour installer \/ mettre \u00e0 jour \/ d\u00e9sinstaller des modules, et pour d\u00e9ployer des configurations.<br><br>Ce qui fait que pour chaque d\u00e9ploiement de code, il est n\u00e9cessaire de se rendre sur l&rsquo;environnement cible&nbsp; ( pr\u00e9production ou production ) et de r\u00e9aliser manuellement les actions d&rsquo;installations et mises \u00e0 jour de modules, ainsi que l&rsquo;application des configurations.<br>Il est donc n\u00e9cessaire pour une action de la r\u00e9aliser manuellement sur tous ces environnements.<br>Ceci est forc\u00e9ment source d&rsquo;erreurs ou d&rsquo;oublis, c&rsquo;est pourquoi il serait beaucoup plus simple que tout se passe tout seul.<br><br>Pour r\u00e9aliser cette action je n&rsquo;ai rien trouv\u00e9 d&rsquo;existant \u00e0 l&rsquo;heure actuelle dans la communaut\u00e9 prestashop. ( Si cela existe d\u00e9j\u00e0 n&rsquo;h\u00e9sitez pas \u00e0 me donner les sources ! ) <br>( Les fonctions de bases en cli qui sont d\u00e9finies ici : <a href=\"https:\/\/devdocs.prestashop-project.org\/8\/modules\/configure-with-cli\/\" target=\"_blank\" rel=\"noopener\">https:\/\/devdocs.prestashop-project.org\/8\/modules\/configure-with-cli\/<\/a> , n\u00e9cessitent de saisir manuellement des fichiers de configurations pour chaque module )<br>C&rsquo;est pourquoi, pour r\u00e9soudre ce probl\u00e8me j&rsquo;ai cr\u00e9\u00e9 un module sp\u00e9cifique pour g\u00e9rer ce besoin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HhModulesManager<\/h2>\n\n\n\n<p>Le module est disponible gratuitement au t\u00e9l\u00e9chargement sur ma boutique, dans le lien ci-dessous.<br><br>Il sera prochainement disponible en open-source sur github, mais pour l&rsquo;instant c&rsquo;est encore une version alpha que je partage pour que vous puissiez tester.<br>Je suis assez preneur de retours pour le faire \u00e9voluer car je l&rsquo;ai utilis\u00e9 uniquement \u00e0 titre perso sur quelques sites pour l&rsquo;instant.<br>( J&rsquo;\u00e9diterais cet article en cons\u00e9quence quand ce sera plus stable )<br><br>Comme \u00e9voqu\u00e9 plus haut l&rsquo;objectif de ce module pour moi \u00e9tait de pouvoir r\u00e9pondre aux besoins suivants :<\/p>\n<ul>\n<li>Installer \/ D\u00e9sinstaller \/ Activer \/ D\u00e9sactiver \/ Mettre \u00e0 jour des modules<\/li>\n<li>Ajouter \/ Mettre \u00e0 jour \/ Supprimer des configurations<\/li>\n<\/ul>\n<p>Et le tout via le code et sans interactions manuelles.<\/p>\n\n\n\n<p class=\"has-text-align-center has-luminous-vivid-amber-background-color has-background\"><a href=\"https:\/\/shop.h-hennes.fr\/fr\/16-modules-ci-manager.html\" target=\"_blank\" rel=\"noopener\" title=\"\">T\u00e9l\u00e9charger le module complet ( et gratuit ) sur la boutique<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Principe de fonctionnement basique<\/h3>\n\n\n\n<p>Le principe est parti du principe de fonctionnement des data patches de Magento 2 , et des migrations de Symfony, mais sous une forme simplifi\u00e9e.<br \/>C&rsquo;est \u00e0 dire que lors de notre d\u00e9ploiement continu on va appeler une commande en console qui va se charger d&rsquo;appliquer la liste de \u00ab\u00a0Patches\u00a0\u00bb(ou migrations) qui n&rsquo;existent pas encore sur l&rsquo;environnement cible.<br \/>Cette commande va utiliser les fonctions natives de Prestashop qui permettent d&rsquo;interagir avec les modules, et la configuration.<br \/><br \/>Pour d\u00e9finir un patch c&rsquo;est tr\u00e8s simple, il suffit de cr\u00e9er un fichier yml avec un nom unique dans le dossier <strong>upgrades<\/strong> du module hhmodulesmanager.<br \/>Dans celui-ci vous pouvez d\u00e9finir les actions suivantes : (cf. les commentaires )<\/p>\n\n\n\n<pre lang=\"yaml\">\n#Actions sur la configuration\nconfiguration:\n  add_or_update:\n    TEST_CONFIGURATION : 'test de valeur avec modif'\n  delete:\n    - TEST_A_SUPPRIMER\n#Actions sur les modules\nmodules:\n  enable:\n   - hhci\n  disable:\n    - ps_emailsubscription\n  install:\n    - psgdpr\n  uninstall:\n    - ps_emailalerts\n    - welcome\n  update:\n    - ps_currencyselector\n<\/pre>\n\n\n\n<p>Une fois le fichier cr\u00e9\u00e9,&nbsp; il suffit d&rsquo;ajouter ce fichier dans git <strong>( en compl\u00e9ment des nouveaux fichiers des modules si n\u00e9cessaire )<\/strong> de pousser la branche cible et les actions vont s\u2019ex\u00e9cuter.<br>Pour cela il faut rajouter cette commande dans notre script de d\u00e9ploiement existant<\/p>\n\n\n\n<pre lang=\"yaml\">\ndeploy:production:\n    stage: deploy\n    only:\n        - master\n    tags:\n        - gitlab-org\n    script:\n        - ssh $SSH_HOST -C \" cd $PROJECT_PATH && git pull && cd www && php bin\/console hhennes:module-manager:manage -v --env=prod\" #Rajout ICI de la commande console\n<\/pre>\n\n\n\n<p>A partir de ces \u00e9l\u00e9ments on a d\u00e9j\u00e0 la possibilit\u00e9 de ne plus \u00e0 avoir \u00e0 se connecter aux environnements distants pour r\u00e9aliser nos actions manuelles \ud83d\ude42<br>Le besoin de base est donc remplis &#8230; , mais il reste toujours n\u00e9cessaire de cr\u00e9er ces fichiers \u00e0 la main, ce qui peut certainement \u00eatre optimis\u00e9<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/11\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"205\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/11\/image-1-1024x205.png\" alt=\"\" class=\"wp-image-4663\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/11\/image-1-1024x205.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/11\/image-1-300x60.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/11\/image-1-768x153.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/11\/image-1.png 1086w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Fonctionnalit\u00e9s suppl\u00e9mentaires<\/h3>\n\n\n\n<p>Pour r\u00e9pondre \u00e0 ce besoin j&rsquo;ai donc mis en place une fonctionnalit\u00e9 sp\u00e9cifique sur le module qui va enregistrer les actions qui se passent dans votre back office au niveau des modules et des configurations.<br>Cette option est activable selon l&rsquo;environnement car elle n&rsquo;a d&rsquo;int\u00e9r\u00eat que sur le poste de d\u00e9veloppement par exemple.<br>Il est ensuite possible de visualiser l&rsquo;ensemble des modifications qui ont \u00e9t\u00e9 effectu\u00e9es sur le poste.<\/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-19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"330\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-19-1024x330.png\" alt=\"\" class=\"wp-image-3486\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-19-1024x330.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-19-300x97.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-19-768x247.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-19-1536x494.png 1536w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-19.png 1703w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Puis de s\u00e9lectionner les actions et de g\u00e9n\u00e9rer automatiquement un fichier d&rsquo;upgrade.<\/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-20.png\"><img loading=\"lazy\" decoding=\"async\" width=\"521\" height=\"448\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-20.png\" alt=\"\" class=\"wp-image-3487\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-20.png 521w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-20-300x258.png 300w\" sizes=\"auto, (max-width: 521px) 100vw, 521px\" \/><\/a><\/figure>\n\n\n\n<p>Cette action va par exemple g\u00e9n\u00e9rer automatiquement le fichier suivant, <strong>puis effacer les modifications de la liste.<\/strong><\/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-21.png\"><img loading=\"lazy\" decoding=\"async\" width=\"557\" height=\"249\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-21.png\" alt=\"\" class=\"wp-image-3488\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-21.png 557w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-21-300x134.png 300w\" sizes=\"auto, (max-width: 557px) 100vw, 557px\" \/><\/a><\/figure>\n\n\n\n<p>Pour \u00e9viter les mises \u00e0 jour des modules depuis le back office il est \u00e9galement possible d&rsquo;activer une option qui bloque la mise \u00e0 jour des modules.<br>Ceci permets d&rsquo;autoriser les mises \u00e0 jour de module uniquement depuis la console et \u00e9vite au passage certaines mauvaises manipulations dans l&rsquo;administration.<\/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-22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1019\" height=\"174\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-22.png\" alt=\"\" class=\"wp-image-3489\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-22.png 1019w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-22-300x51.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2023\/09\/image-22-768x131.png 768w\" sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" \/><\/a><\/figure>\n\n\n\n<p>Comme pr\u00e9cis\u00e9 plus haut ce module est encore relativement jeune et perfectible, mais il m&rsquo;a d\u00e9j\u00e0 simplifi\u00e9 mes process.<br \/>A l&rsquo;heure actuelle il n\u00e9cessite \u00e0 minima <strong>php 7.4<\/strong> , et il n&rsquo;a \u00e9t\u00e9 test\u00e9 qu&rsquo;avec <strong>Prestashop 1.7.8.x<\/strong><\/p>\n<p>Pour voir le fonctionnement technique et comment \u00e9tendre ce module et g\u00e9rer vos propres changements vous pouvez aller voir l&rsquo;article suivant : <a title=\"Prestashop : Hhmodule manager, fonctionnement technique et extension\" href=\"https:\/\/www.h-hennes.fr\/blog\/2023\/11\/12\/prestashop-hhmodule-manager-fonctionnement-technique-et-extension\/\">Prestashop : Hhmodule manager, fonctionnement technique et extension<\/a><br \/><br \/>N&rsquo;h\u00e9sitez pas \u00e0 me faire des retours sur le sujet pour voir si j&rsquo;ai oubli\u00e9 des fonctionnalit\u00e9s.<br \/>Dans la prochaine \u00e9tape de cette s\u00e9rie nous verrons comment nous assurer que le code livr\u00e9 n\u2019entra\u00eene pas de r\u00e9gressions fonctionnelles.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article est le 4\u00e8me de la s\u00e9rie sur le d\u00e9ploiement et l\u2019int\u00e9gration continu dans Prestashop.Les autres articles de cette s\u00e9rie sont les suivants : Un point relativement p\u00e9nible avec Prestashop et qu&rsquo;il n&rsquo;existe pas nativement de solution automatis\u00e9e pour installer \/ mettre \u00e0 jour \/ d\u00e9sinstaller des modules, et pour d\u00e9ployer des configurations. Ce [&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,600,104],"class_list":["post-3404","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-ci-cd","tag-gitlab","tag-modules-manager","tag-prestashop"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/3404","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=3404"}],"version-history":[{"count":10,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/3404\/revisions"}],"predecessor-version":[{"id":4697,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/3404\/revisions\/4697"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=3404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=3404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=3404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}