N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
- Mise en place de l’environnement de développement
- Industrialiser l’installation de Prestashop et des modules
- Tester fonctionnellement vos modules avec Phpunit et Selenium
- Éviter les régressions avec l’intégration continue
Pour commencer notre série sur l’optimisation du développement des modules Prestashop, nous allons commencer par la mise en place de l’environnement de développement.
Si vous en avez la possibilité, travailler directement sous Linux apporte directement l’ensemble des fonctions qui sont disponibles sur votre serveur, sur votre poste de travail.
Si c’est déjà votre cas vous pouvez passer directement à la partie sur le versionning de vos sources.
Installer une machine virtuelle en local.
Si vous travaillez avec un environnement Windows vous avez sans doute déjà travaillé avec Wampserver.
Mais pour ma part je trouve que cette solution est à présent trop limitée, d’autant plus que l’installation des outils les plus pratiques actuellement ( git / composer … ) est plus compliquée sous l’ environnement windows.
C’est pourquoi nous allons installer une solution de virtualisation qui va nous permettre de disposer d’un serveur linux en local.
Nous allons nous baser pour cela sur les solutions VirtualBox et Vagrant, les détails de l’installation sont accessibles sur l’article suivant écrit il y’a quelques semaines :
https://www.h-hennes.fr/blog/2015/07/06/alternative-a-wampserver-vagrant/
Une fois la solution installée avec l’image scotchbox :
Initialisez le serveur via la commande
vagrant up |
puis connectez vous via la commande
vagrant ssh |
Nous sommes à présent connecté en ssh à notre serveur local
Rendez vous ensuite dans le dossier /var/www/
Créer un projet de test avec un gestionnaire de version
Nous allons créer un projet samplemodule
mkdir samplemodule |
Puis nous placer dans ce répertoire
cd samplemodule |
Pour gérer ses sources, plusieurs options sont possibles :
- Dépot git local ( solution préconisée pour commencer )
- Dépot git distant ( github / perso )
- Dépot svn
Dépot git local
Avec un dépot git local, l’historique de vos sources sera uniquement disponible sur votre poste.
Il ne sera donc pas nécessaire d’avoir une connexion internet pour gérer votre historique,
Pour versionner vos sources avec git en local vous pouvez ensuite saisir la commande
git init . |
Le message suivant est ensuite afficher pour vous confirmer que tout est bon.
Initialized empty Git repository in /var/www/samplemodule/.git/ |
Votre dépôt est initialisé.
Dépot git distant
Une connexion internet sera nécessaire pour initialiser le dépôt, et pour récupérer les dernières modifications distantes. Cette solution est à privilégier si vous penser travailler depuis plusieurs emplacements géographiques ( maison, travail … )
Pour initialiser le projet, il faut exécuter la commande git clone avec le chemin du dépôt ( que vous aurez préalablement créé )
Par exemple pour un compte github vous pouvez cloner le projet de test réalisé pour ce tutoriel
Remontez dans le dossier /var/www/ puis exécuter la commande
git clone https://github.com/nenes25/prestashop_samplemodule.git samplemodule |
Votre dépot est initialisé
Dépot subversion ( svn )
Si vous souhaitez utiliser svn, il va être nécessaire d’installer les outils pour le gérer
Pour cela entrez la commande suivante :
sudo apt-get install subversion |
Puis rendez vous dans le dossier samplemodule et initialiser votre dépot avec le chemin de votre dépot svn
svn checkout http://svn.yoursite.com/samplemodule/ |
Votre dépôt est initialisé.
Mise en place des outils de validation et de corrections des normes
Nous allons à présent installer php-cs-fixer qui va corriger automatiquement la mise en forme de notre code pour qu’il respecte les normes suggérées pour la solution.
Pour cela saisissez les commande suivantes
wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer |
sudo chmod a+x php-cs-fixer |
sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer |
Php-cs-fixer est maintenant installé.
Pour tester son bon fonctionnement créer un fichier test.php dans votre dossier et insérez-y le contenu suivant :
<?php $var1="test"; $var2="test2"; if ( $var1 == $var2) echo "var egales"; else echo "var differentes"; for($i=0;$i<5;$i++) echo $i; ?> |
Puis saisissez la commande suivante :
php-cs-fixer fix test.php --level=psr2 |
Ouvrez votre fichier, normalement son contenu doit être maintenant le suivant.
Le code respecte la convention psr2
<?php $var1="test"; $var2="test2"; if ($var1 == $var2) { echo "var egales"; } else { echo "var differentes"; } for ($i=0;$i<5;$i++) { echo $i; } |
Interactions de php-cs-fixer à notre gestionnaire de version
Afin de nous libérer de la mise en forme de notre code, nous allons intégrer une commande qui va exécuter php-cs-fixer au hook pre-commit de notre gestionnaire de version.
De cette manière notre code sera corrigé automatiquement avant chaque publication, cela nous permettra donc de conserver un code de bonne qualité.
Pour activer le hook pre-commit, créer un fichier pre-commit dans le dossier .git/hooks/ de votre dossier
touch .git/hooks/pre-commit |
Puis dans ce fichier nous allons mettre le code suivant
#!/bin/bash #Recuperation des fichiers ajoute/cree/modifie dans le commit LIST=$(git diff --name-only --cached --diff-filter=ACM) #Chemin du projet PROJECTROOT=`echo $(cd ${0%/*}/../../ && pwd -P)`/ #code de retour returncode=0 #Verification des fichiers avec php-cs-fixer for file in $LIST do echo "Verification du fichier $PROJECTROOT$file" php-cs-fixer fix --level=psr2 $PROJECTROOT$file #On ajoute les changements du fichier git add $file done exit 0 |
Nous disposons à présent des éléments nécessaires pour passer à la prochaine étape :
Industrialiser l’installation de Prestashop et des modules
Bonjour ,
j’ai trouvè une bonne alternative pour substituir Scotch Box.
Ici : https://github.com/reddingwebpro/cognacbox
Bonjour,
Depuis cet article je suis passé entièrement sous linux 🙂
Du coup j’ai configuré une stack lamp de base qui fonctionne très bien et que je n’ai plus besoin de toucher 🙂
Cordialement,
Hervé