{"id":1083,"date":"2015-08-21T11:10:46","date_gmt":"2015-08-21T09:10:46","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=1083"},"modified":"2016-04-02T11:32:23","modified_gmt":"2016-04-02T09:32:23","slug":"optimiser-le-developpement-de-modules-prestashop-industrialiser-linstallation-de-prestashop-et-des-modules","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/21\/optimiser-le-developpement-de-modules-prestashop-industrialiser-linstallation-de-prestashop-et-des-modules\/","title":{"rendered":"Optimiser le d\u00e9veloppement de modules Prestashop : Industrialiser l\u2019installation de Prestashop et des modules"},"content":{"rendered":"<div class=\"entete-serie\">\n<p>Cet article fait partie de la s\u00e9rie : Optimiser le d\u00e9veloppement de modules Prestashop<\/p>\n<ol>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/20\/optimiser-developpement-de-modules-prestashop-mise-en-place-de-lenvironnement-de-developpement\/\">Mise en place de l&rsquo;environnement de d\u00e9veloppement<\/a><\/li>\n<li><strong>Industrialiser l&rsquo;installation de Prestashop et des modules<\/strong><\/li>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/28\/optimiser-le-developpement-de-modules-prestashop-tester-fonctionnellement-vos-modules-avec-phpunit-et-selenium\/\">Tester fonctionnellement vos modules avec Phpunit et Selenium<\/a><\/li>\n<li><a href=\"https:\/\/www.h-hennes.fr\/blog\/2016\/04\/02\/optimiser-le-developpement-de-modules-prestashop-eviter-les-regressions-avec-lintegration-continue\/\">\u00c9viter les r\u00e9gressions avec l&rsquo;int\u00e9gration continue<\/a><\/li>\n<\/ol>\n<\/div>\n<p>Cet article est la 2\u00e8me \u00e9tape de notre s\u00e9rie sur l&rsquo;optimisation de modules Prestashop.<br \/>\nMerci de prendre connaissance de la partie 1 : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2015\/08\/20\/optimiser-developpement-de-modules-prestashop-mise-en-place-de-lenvironnement-de-developpement\/\">mise en place de l\u2019environnement de d\u00e9veloppement<\/a> afin de pouvoir suivre cet article.<\/p>\n<p>Notre environnement de d\u00e9veloppement est \u00e0 pr\u00e9sent en place, nous allons donc passer \u00e0 l&rsquo;industrialisation de l&rsquo;installation de Prestashop, mais \u00e9galement de ces modules.<br \/>\nL&rsquo;id\u00e9e de cette \u00e9tape est d&rsquo;avoir des outils pour mettre en place rapidement et automatiquement les versions souhait\u00e9es de Prestashop sur notre serveur.<\/p>\n<p><strong>Proposition du structure des fichiers sur le serveur.<\/strong><\/p>\n<p>Le dossier racine de notre installation est \/var\/www\/public\/, dans ce dossier nous allons cr\u00e9er un dossier \u00ab\u00a0<em>prestashop<\/em>\u00a0\u00bb qui va contenir l&rsquo;ensemble de nos installations Prestashop.<\/p>\n<p>Celles-ci seront install\u00e9es dans des sous-dossiers \u00ab\u00a0<strong>prestashop_1.x.x.x\/<\/strong>\u00a0\u00bb<br \/>\nLes num\u00e9ros de versions dans l&rsquo;url permettront d&rsquo;acc\u00e9der facilement \u00e0 la version souhait\u00e9e :\u00a0 http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/ par exemple.<\/p>\n<p>Cr\u00e9ons \u00e9galement un dossier \u00ab\u00a0<strong>global_modules<\/strong>\u00a0\u00bb dans ce dossier prestashop.<br \/>\nCelui-ci aura vocation \u00e0 contenir le code de nos modules en d\u00e9veloppement.<\/p>\n<p>Cr\u00e9ons \u00e9galement un dossier \u00ab\u00a0<strong>scripts<\/strong>\u00a0\u00bb dans ce dossier prestashop.<br \/>\nCelui-ci aura vocation \u00e0 contenir les scripts bash de gestion<\/p>\n<p>Le contenu de notre dossier ressemblera donc \u00e0 cela :<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/08\/directory-e1440082631996.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1085\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2015\/08\/directory-e1440082631996.jpg\" alt=\"structure fichiers\" width=\"300\" height=\"211\" \/><\/a><\/p>\n<p><strong>Installer Prestashop via la ligne de commande<\/strong><\/p>\n<p>A partir de la version 1.5.4.1 , Prestashop propose une installation via la ligne de commande.<br \/>\nToutes les versions sup\u00e9rieures \u00e0 celle-ci peuvent donc \u00eatre install\u00e9e tr\u00e8s rapidement via un script ssh<\/p>\n<p>Vous pouvez r\u00e9cup\u00e9rer l&rsquo;ensemble des informations depuis l&rsquo;article suivant : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2014\/02\/07\/prestashop-installer-rapidement-une-version-de-developpement-avec-bash\/\" target=\"_blank\">prestashop-installer-rapidement-une-version-de-developpement-avec-bash<\/a><\/p>\n<p>Les points \u00e0 configurer dans le script sont les suivants :<\/p>\n<pre lang=\"bash\">#Variable par d\u00e9faut du script (commun \u00e0 tous les presta)\r\ndir=\"\/var\/www\/public\/prestashop\/\"\r\ndomaineName=\"192.168.33.10\"\r\n\r\n#Acc\u00e8s base de donn\u00e9es\r\ndbuser=\"root\"\r\ndbpassword=\"root\"\r\n\r\n#Acc\u00e8s administration\r\ncontactEmail=\"youremail@example.com\"\r\nadminpass=\"123yourpassword\"\r\n<\/pre>\n<p>Pour tester le fonctionnement nous allons maintenant installer la derni\u00e8re version ( \u00e0 date ) de Prestashop via la commande<br \/>\n( dans le dossier scripts )<\/p>\n<pre lang=\"bash\">bash install-prestashop.sh 6 1 1<\/pre>\n<p>Si tout \u00e0 bien fonctionn\u00e9 vous pouvez maintenant y acc\u00e9der via :<\/p>\n<p><a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/<\/a> pour le front-office<\/p>\n<p><a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/admin-dev\/\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/admin-dev\/<\/a> pour le back-office<\/p>\n<p><strong>Installation et gestion des modules<\/strong><\/p>\n<p><strong>Principe de fonctionnement<\/strong><\/p>\n<p>Pour installer automatiquement les modules sur toutes les versions de Prestashop, nous allons tout simplement faire un script qui va cr\u00e9er <em>un lien symbolique<\/em> du dossier prestashop dans lequel le module devrait \u00eatre install\u00e9, vers le dossier global du modules ( dans \u00ab\u00a0global_modules\u00a0\u00bb ).<br \/>\nCela nous permettra donc coder \u00e0 un seul endroit et les modifications seront automatiquement appliqu\u00e9es sur l&rsquo;ensemble des versions de prestashop.<\/p>\n<p><em>\/!\\ En raison d&rsquo;un bug avec virtualbox, il est n\u00e9cessaire d\u2019ex\u00e9cuter vagrant en tant qu&rsquo; administrateur pour pouvoir utiliser les liens symboliques.<\/em><br \/>\n<em> Si vous n&rsquo;\u00eates pas en mode administrateur, vous obtiendrez une erreur \u00ab\u00a0Protocol error\u00a0\u00bb lors de la cr\u00e9ation du lien symbolique.<\/em><\/p>\n<p>Voici le script qui va g\u00e9rer la cr\u00e9ation de ces liens que nous allons appeler \u00ab\u00a0install-module.sh\u00a0\u00bb et d\u00e9poser dans le dossier \u00ab\u00a0scripts\u00a0\u00bb<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\nif [ -z $1 ]; then\r\necho \"Erreur merci de saisir un nom de module a installer\"\r\nexit\r\nfi\r\n\r\nmoduleName=$1\r\nmoduleDir=\"\/var\/www\/public\/prestashop\/global_modules\/\"\r\nprestashopDir=\"\/var\/www\/public\/prestashop\/\"\r\n\r\n#Si le chemin du d\u00e9p\u00f4t n'est pas le m\u00eame que le nom du module on le pr\u00e9cise\r\nif [ -z $2 ]; then\r\nmoduleWorkingDir=$1\r\nelse\r\nmoduleWorkingDir=$2\r\nfi\r\n\r\necho \"Parametres du script module name : ${moduleName} , nom du dossier de travail ${moduleWorkingDir}\"\r\ncd $prestashopDir\r\n\r\n#On parcours l'ensemble des dossiers du dossier prestashop qui commencent par prestashop\r\nfor i in $(ls -d *\/ | grep \"^prestashop\");\r\ndo\r\nif [ -d \"${i%%}modules\/${moduleName}\" ]; then\r\necho \"Le dossier ${moduleName} existe dans le dossier ${i%%}\"\r\nelse\r\necho \"Le dossier ${moduleName} existe pas dans le dossier ${i%%}\"\r\n\r\n#On verifie que le dossier du lien symbolique existe\r\nif [ -d \"${moduleDir}${moduleWorkingDir}\" ]; then\r\necho \"Creation d'un lien symbolique depuis ${prestashopDir}${i%%}modules\/${moduleName} vers ${moduleDir}${moduleWorkingDir}\"\r\nln -s ${moduleDir}${moduleWorkingDir} ${prestashopDir}${i%%}modules\/${moduleName}\r\nelse\r\necho \"Erreur le dossier ${moduleDir}${moduleWorkingDir} de raccourci n'existe pas\";\r\nfi\r\nfi\r\ndone;\r\n<\/pre>\n<p><strong>Installation du module eiinstallmodulescli\u00a0<\/strong><\/p>\n<p>Ce module permets d&rsquo;installer automatiquement les autres modules et leur configuration via la ligne de commande, ou via des param\u00e8tres d&rsquo;url.<br \/>\nCe qui nous \u00e9vitera d&rsquo;avoir \u00e0 se connecter \u00e0 chaque version de prestashop pour installer le module<br \/>\nCelui-ci est destin\u00e9 \u00e0 un usage sur des sites en d\u00e9veloppement.<\/p>\n<p>Pour le r\u00e9cup\u00e9rer depuis github saissez la commande suivante :<\/p>\n<pre lang=\"bash\">git clone -b symlink https:\/\/github.com\/nenes25\/prestashop_eiinstallmodulescli.git<\/pre>\n<p>Les donn\u00e9es du module sont donc dans le dossier prestashop\/global_modules\/prestashop_eiinstallmodulescli\/<\/p>\n<p>Pour installer le module eiinstallmodulescli via notre script, il faut donc saisir la commande suivante ( dans le dossier script )<\/p>\n<pre lang=\"bash\">bash install-module.sh eiinstallmodulescli prestashop_ei installmodulescli<\/pre>\n<p>Nous pouvons tout de suite v\u00e9rifier que la redirection fonctionne en appelant la page :<br \/>\n<a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/modules\/eiinstallmodulescli\/install_module.php\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/modules\/eiinstallmodulescli\/install_module.php<\/a><\/p>\n<p>Qui va nous afficher le message : \u00ab\u00a0Erreur le module n&rsquo;existe pas\u00a0\u00bb<\/p>\n<p><strong>Test du bon fonctionnement du processus<\/strong><\/p>\n<p>Toute la partie technique est donc en place, nous allons \u00e0 pr\u00e9sent tester le bon fonctionnement de l&rsquo;ensemble du processus.<br \/>\nPour cela nous allons r\u00e9aliser un module Prestashop basique et l&rsquo;installer sur prestashop 1.6.1.1 , prestashop 1.6.0.14 et prestashop 1.5.6.3<br \/>\nPuis v\u00e9rifier son bon fonctionnement<\/p>\n<p>Nous avons donc au pr\u00e9alable d\u00e9j\u00e0 install\u00e9 prestashop 1.6.1.1<br \/>\nIl faut donc installer les autres versions, en nous rendant dans le dossier scripts puis en saisissant les commandes suivantes :<\/p>\n<pre lang=\"bash\">bash install-prestashop.sh 6 0 14\r\nbash install-prestashop.sh 5 6 3\r\n<\/pre>\n<p>Pour le module \u00e0 tester vous pouvez cloner le module samplemodule depuis github dans le dossier \u00ab\u00a0global_modules\u00a0\u00bb via la commande<\/p>\n<pre class=\"bash\">git clone https:\/\/github.com\/nenes25\/prestashop_samplemodule.git samplemodule<\/pre>\n<p>Ce module comporte uniquement un controller front office, qui affiche \u00ab\u00a0It works\u00a0\u00bb<\/p>\n<p>Cr\u00e9ons ensuite les liens symboliques<\/p>\n<pre lang=\"bash\">bash install-module.sh samplemodule<\/pre>\n<p>N&rsquo;oubliez pas \u00e9galement de mettre \u00e0 jour l&rsquo;installation du module eiinstallcli<\/p>\n<pre lang=\"bash\">bash install-module.sh eiinstallmodulescli prestashop_eiinstallmodulescli<\/pre>\n<p>Nous allons tester le fonctionnement standard de l&rsquo;installation sur la version 1.6.1.1<br \/>\nConnectez vous \u00e0 l&rsquo;administration et installer le module.<\/p>\n<p>La page suivante doit bien afficher notre contenu.<br \/>\n<a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/index.php?fc=module&amp;module=samplemodule&amp;controller=sample\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-1-1\/index.php?fc=module&amp;module=samplemodule&amp;controller=sample<\/a><\/p>\n<p>Pour le tester sur les prochaines versions nous allons \u00e0 pr\u00e9sent installer le module directement via le module eiinstalllmodulescli ( en mode url )<br \/>\nOuvrez les urls suivantes dans votre navigateur<br \/>\n<a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-0-14\/modules\/eiinstallmodulescli\/install_module.php?module_name=samplemodule\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-0-14\/modules\/eiinstallmodulescli\/install_module.php?module_name=samplemodule<\/a><br \/>\n<a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-5-6-3\/modules\/eiinstallmodulescli\/install_module.php?module_name=samplemodule\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-5-6-3\/modules\/eiinstallmodulescli\/install_module.php?module_name=samplemodule<\/a><\/p>\n<p>Puis nous pouvons v\u00e9rifier que notre module fonctionne bien sur ces derni\u00e8res versions :<br \/>\n<a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-0-14\/index.php?fc=module&amp;module=samplemodule&amp;controller=sample\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-6-0-14\/index.php?fc=module&amp;module=samplemodule&amp;controller=sample<\/a><br \/>\n<a href=\"http:\/\/192.168.33.10\/prestashop\/prestashop_1-5-6-3\/index.php?fc=module&amp;module=samplemodule&amp;controller=sample\">http:\/\/192.168.33.10\/prestashop\/prestashop_1-5-6-3\/index.php?fc=module&amp;module=samplemodule&amp;controller=sample<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Nous arrivons au terme de cette 2\u00e8me \u00e9tape \u00e0 la fin de laquelle nous pouvons donc :<\/p>\n<ul>\n<li>Installer rapidement la version de prestashop souhait\u00e9e<\/li>\n<li>Centraliser le code de d\u00e9veloppement du module en un seul endroit pour toutes les versions de prestashop<\/li>\n<li>Installer nos modules sans passer par l&rsquo;administration.<\/li>\n<\/ul>\n<p>La prochaine \u00e9tape vous permettra de <strong>Tester fonctionnellement vos modules avec Phpunit et Selenium. <\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article fait partie de la s\u00e9rie : Optimiser le d\u00e9veloppement de modules Prestashop Mise en place de l&rsquo;environnement de d\u00e9veloppement Industrialiser l&rsquo;installation de Prestashop et des modules Tester fonctionnellement vos modules avec Phpunit et Selenium \u00c9viter les r\u00e9gressions avec l&rsquo;int\u00e9gration continue Cet article est la 2\u00e8me \u00e9tape de notre s\u00e9rie sur l&rsquo;optimisation de modules [&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":"default","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":[219,104,170],"class_list":["post-1083","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-developpement","tag-prestashop","tag-ssh"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1083","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=1083"}],"version-history":[{"count":11,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1083\/revisions"}],"predecessor-version":[{"id":1339,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1083\/revisions\/1339"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}