Déploiement : concevoir un système de livraison PHP
Intimement lié au management du cycle de vie d'une application (ALM pour Application Lifecycle Management), le déploiement, qui consiste à livrer une version d'une application web donné vers un environnement donné, est une étape à ne pas négliger dans la mise en place d'un process de développement normalisé, tellement une faiblesse à cette étape peut être génératrice de bug et consommatrice de temps. On verra qu'une certaine philosophie fait du sujet des livraisons PHP un sujet sensible dans le monde du PHP.

La simplicité et le champ de liberté offerts par PHP en font sa marque de fabrique et lui a permis de devenir un langage incontournable en matière de développement web. Cette simplicité et cette liberté ont largement influencé les acteurs du monde PHP, et le ton a très vite été donné : "au plus simple et plus rapide". Dès lors, personne ne s'étonne de voir des sites PHP livrés à la main en FTP, voir modifiés directement sur un serveur de production.
Cependant, avec l'émancipation de PHP en entreprise et le développement d'application web de plus en plus complexe, les livraisons "à la mano" ont montré leurs limites car à l'origine de nombreux bugs, consommatrices de temps et d'une très mauvaise traçabilité.
La mise en place d'un système de livraison PHP est donc un levier très efficace lors de l'industrialisation d'un process de développement.
Conception d'un système de livraison PHP
Voici à mon sens les points primordiaux qui doivent être couvert par un outil de livraison PHP :
- Référence de source : Les fichiers sources de l'application sont conservés au même endroit, ils constituent la copie conforme du livrable en production (à l'exception de quelques fichiers de configuration). Un développeur qui effectue une modification le fera à cette endroit et nul part ailleurs. La référence de source est réputée être stable et testée. (1)
- Couverture globale des sources : Déployer une application ne se résume pas à livrer du code mais également effectuer des modifications structurelle de la base de donnée, ou des modifications de la configuration d'un serveur. Dès lors, ces actions de modification doivent apparaitre au niveau de la référence de source et être automatisées par l'outil de livraison PHP. (2)
- Historique des livrables : L'état de l'application (code, structure de base de données...) doit être "sauvegardé" au niveau de la référence de source avant chaque livraison et être conservé ad vitam aeternam. L'outil doit permettre d'observer ces états et leurs différences.
- Rollback : En s'appuyant sur l'historique des livrables, l'outil doit permettre de revenir rapidement à un état antérieur.
- Automatisation contrôlée : Le système de livraison PHP doit permettre d'effectuer une livraison de manière entièrement automatique. L'action humaine doit se réduire à une action de contrôle des opérations. Les opérations doivent donc être décrites clairement et de manière exhaustive.
- Uniformité du déploiement : Le système de livraison PHP doit effectuer le déploiement sur tous les éléments la chaîne de validation/production. Le mécanisme de déploiement et le livrable doivent être identiques à chaque étape de la chaîne.
- Test : La chaine de validation doit permettre de valider le bon fonctionnement du déploiement.
- Rapidité : Afin d'en garantir l'adoption, l'outil doit effectuer une livraison en moins de 5 minutes.
- Incontournable : Le système doit être assez robuste pour ne pas obliger son utilisateur à le contourner. De surcroit, le système doit apporter des protections empêchant les contournements qui pourrait mettre en péril ses principes de référence de source et d'uniformité (voir ci-dessus).
- Traçabilité : Grâce au système, on doit pouvoir connaitre l'état de l'application à n'importe quelle étape de la chaîne de validation/production (savoir ce qui a été livré, où, quand et par qui).
J'aurais bien sûr l'occasion de revenir plus en détail sur le sujet de la livraison PHP et notamment d'aborder le sujet des outils à notre disposition pour mettre en place un système de livraison PHP viable.
(1) On utilisera en général un repository de source tel que Subversion.
(2) Cela dit, c'est assez difficile d'automatiser le déploiement de modification de base de données ou de configuration serveur... mais on y reviendra...
Aucun trackbacks pour l'instant
23 février 2010
Pourrait-on avoir une rapide liste d’outils plus ou moins exhaustive au sujet des outils existant les plus connus ou les plus performant selon vous
ce message s’adresse a tout ceux qui lisent ceci
23 février 2010
Je jette ici une liste d’outils que je connais de réputation et qui pourrait être une solution aux problématiques précitées; sans pouvoir avoir pu tous les tester :
- Maven et son plugin de déploiement (http://maven.apache.org/plugins/maven-deploy-plugin)
- Ant (http://ant.apache.org)
- Capistrano (http://www.capify.org/index.php/Capistrano)
- Fredistrano (http://code.google.com/p/fredistrano)
- Phing (http://phing.info/trac)
- Xinc (http://code.google.com/p/xinc)
- Pake (http://wiki.github.com/indeyets/pake/)
- Phar (http://php.net/manual/fr/intro.phar.php)
Tout retour d’expérience sur l’un des ces outils est plus que bienvenu !