Etre Toujours Publiable – Déploiement automatisé de site web
Par Damien Séguy le 10 janvier 2012Le déploiement automatisé a un effet important sur le code: il conduit à ce qu’il soit prêt à déployer. A tout moment du cycle de développement, le script de déploiement peut être lancé pour faire une mise en production ou une livraison : en termes simples, pour être publié.
« Release early, release often »
Cela s’apparente à la stratégie « Release early, release often »: déployer souvent montre que le projet progresse. Ces progrès ne sont pas toujours importants : parfois même, des bugs sont publiés. Mais durant la période de développement, c’est une situation normale. De toutes manières, une nouvelle version corrigera bientôt le problème. Et puisque le bug a été identifié tôt dans le processus, il sera donc plus facile à corriger, et aussi, plus important, plus facile à pardonner.
Toujours pas fini…
Comment peut-on fournir un code qui puisse toujours être mis à disposition ?
Eh bien, tout d’abord, entre la version et le code actuel, il ya une pièce d’ingénierie appelée SMC: Git, SVN, Mercurial, fossiles, CVS …( appelez cela comme vous voulez !), qui sera la principale source pour la version. Tant que vous ne commitez pas dans le SMC, votre code ne peut pas être publiable: il peut ne pas être compilé, ni être propre, ou non fonctionnel. Tant qu’il n’est pas commité, le code n’existe pas.
Une fois qu’il est commité, il doit faire partie intégrante de l’application. Et pour être publiable, il ne doit pas casser l’application. La première vérification sera la compilation par PHP : si le code n’est pas compilé, alors, il ne sera pas publiable.
Développement bouchon de champagne
Le codage total, jusqu’à ce qu’il fonctionne, est aussi appelé le développement bouchon de champagne : vous ne savez le son que fera le bouchon de bouteille de champagne qu’à son ouverture. A ce stade, vous aurez eu soin d’avoir tous vos amis autour de vous, parce que si le bouchon saute, alors vous voudrez remplir quelques verres et trinquer. Par contre, si cela échoue, tous vos amis seront là pour vous remonter le moral ou se moquer de vous (oui, les amis font aussi cela).
Cette allégorie peut être appliquée au développement : quand le code est attendu depuis trop longtemps, les attentes s’accumulent, et commencent à grandir, jusqu’à devenir extrêmes. Puisque vous vous concentrez que sur le code, et laissez les utilisateurs dans le noir, alors ils trouveront les informations avec leur seul outil à leur disposition : l’imagination. Voilà comment vous vous retrouvez avec un beau projet, bien en deçà des attentes.
Largeur d’abord
L’autre approche est de rendre le code prêt dès que possible, même s’il n’est pas complet. Compiler est une première étape. Le fonctionnement complet n’est seulement que le troisième niveau. Entre les deux, vous avez le niveau «incomplet» : il fonctionne mais pas entièrement.
Prenons un exemple : comment travailler sur un module imaginaire de Drupal addressbook et l’avoir fonctionnel pendant tout le dévelopement ? Si un tel module nécessite de plusieurs jours de travail, alors il ne fonctionnera pas entièrement les premiers jours. À ce stade, il n’est pas important de l’avoir entièrement opérationnel : nous voulons juste qu’il fonctionne.
Imaginez le stade précoce du module Drupal: le module lui-même est créé, basé sur son nom, avec beaucoup de « hooks » vides. Cela va compiler mais ne fera rien. Cependant, cela est publiable : il peut être envoyé sur une nouvelle version et n’ajoutera rien … à l’application finale.
Puis, à partir de cette base, vous pouvez commencer à ajouter de nouvelles pièces. Imaginez que vous travaillez sur le carnet d’adresses.
Vous avez alors différentes possibilités pour commencer à travailler : vous pouvez commencer à partir de la structure de la base de données et de mettre à jour hook_install ; puis ajouter quelques valeurs dans la base de données, et enfin travailler dans hook_view, de sorte que vous pouvez fournir une vue sur les données existantes, puis le même hook_view pour un formulaire requérant des données.
Vous pouvez également démarrer à partir hook_menu pour afficher le menu et un accès à votre nouveau module, puis hook_view pour l’afficher. Enfin hook_install pour ajouter une nouvelle CSS au système de modèles. Vous pouvez aussi commencer par le panneau d’administration, les modèles, etc…
Chacune de ces approches vous donnera quelque chose de fonctionnel : vous et les utilisateurs seront en mesure d’exécuter cette application, et de voir le travail effectué ; bien sûr pas tout entièrement : le développement n’est pas encore fait mais seulement une partie.
C’est la principale différence avec le développement en profondeur. Une approche en profondeur résoud tous les problèmes qui se présentent : Drupal hooks, structure de la base de données, modèle, tests et déploiement. À tout moment, c’est un travail en cours et et rien n’est publiable : ce qui est fait est bien fait, mais on ne peut le faire marcher.
En fin de compte il ya deux approches différentes pour que cela soit toujours publiable.
- Croissance organique du code : commencer par déposer tout le code requis pour le faire fonctionner. Ensuite, ajoutez nouvelle fonctionnalité au dessus d’un tel code. J’appelle aussi cela « ajouter de la chair autour de l’os », basé sur le cliché du squelette. Vous finirez probablement avec beaucoup de fonctions vides ou constantes, qui seront des emplacements, ou « placeholders » pour un code plus complexe et ultérieur. Compter le nombre de ces emplacements est un bon indicateur des progrès réalisés.
- Code visible : cette approche est centrée sur les utilisateurs (ou clients, si vous préférez) . Ne travaillez que sur ce qui est visible. Ce formulaire de 120 champs ne commencera qu’avec deux formulaires. Puis, il affichera 3, puis 4, puis 12, puis 30, etc … A chaque fois, il va ajouter de nouvelles fonctionnalités. Et si c’est un tunnel de paiement en 12 étapes, alors il devrait commencer par 1 étape de paiement, puis 2, etc … Gardez à l’esprit que les utilisateurs ne mesurent la progression que sur ce qu’ils voient (c’est-à-dire la vue), et non sur la quantité de travail ou de code que vous fournissez.
Si vous prévoyez de garder votre code publiable, vous devrez être en mesure de répondre à cette simple question : puis-je simplement déployer mon code maintenant ?
Cela vous rendra prêt pour n’importe quelle situation pouvant survenir en dehors du planning : problème de sécurité, publication en urgence pour démonstration, changement soudain dans le planning client, ou même, un changement de développeur. Un code qui fonctionne bénéficiera toujours à la personne suivante, plutôt qu’elle se batte avec un ensemble de tâches partiellement achevées.
Damien Seguy






