<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:media="http://search.yahoo.com/mrss/"
> <channel><title>Blog Xebia France &#187; Emmanuel Servent</title> <atom:link href="http://blog.xebia.fr/author/eservent/feed/" rel="self" type="application/rss+xml" /><link>http://blog.xebia.fr</link> <description>J2EE, Agilité et SOA</description> <lastBuildDate>Wed, 08 Feb 2012 09:23:16 +0000</lastBuildDate> <language>fr</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <copyright>CC BY-NC-ND 2.0 http://creativecommons.org/licenses/by-nc-nd/2.0/fr/</copyright> <managingEditor>blog-france@xebia.com (Xebia France)</managingEditor> <webMaster>blog-france@xebia.com (Xebia France)</webMaster> <ttl>1440</ttl> <image> <url>http://blog.xebia.fr/videos/xebia-podcast.png</url><title>Blog Xebia France</title><link>http://blog.xebia.fr</link> <width>144</width> <height>144</height> </image> <itunes:new-feed-url>http://blog.xebia.fr/feed/podcast/</itunes:new-feed-url> <itunes:subtitle>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agi[...]</itunes:subtitle> <itunes:summary>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agile.</itunes:summary> <itunes:keywords>Xebia, Java, JEE, SOA, Agile, Méthodes, Agiles</itunes:keywords> <itunes:category text="Technology" /> <itunes:category text="Technology"> <itunes:category text="Software How-To" /> </itunes:category> <itunes:category text="Technology"> <itunes:category text="Tech News" /> </itunes:category> <itunes:author>Xebia France</itunes:author> <itunes:owner> <itunes:name>Xebia France</itunes:name> <itunes:email>blog-france@xebia.com</itunes:email> </itunes:owner> <itunes:block>no</itunes:block> <itunes:explicit>no</itunes:explicit> <itunes:image href="http://blog.xebia.fr/videos/xebia-podcast.png" /> <item><title>Choisir son outil pour automatiser les déploiements</title><link>http://blog.xebia.fr/2010/12/01/choisir-son-outil-pour-automatiser-les-deploiements/</link> <comments>http://blog.xebia.fr/2010/12/01/choisir-son-outil-pour-automatiser-les-deploiements/#comments</comments> <pubDate>Wed, 01 Dec 2010 07:43:01 +0000</pubDate> <dc:creator>Emmanuel Servent</dc:creator> <category><![CDATA[Exploitation]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Automatisation]]></category> <category><![CDATA[build]]></category> <category><![CDATA[Déploiement]]></category> <category><![CDATA[DeployIt]]></category> <category><![CDATA[Maven]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=6034</guid> <description><![CDATA[Depuis le traditionnel outil make, introduit en 1977 pour livrer en production un logiciel, plusieurs étapes, de la construction du logiciel au processus de livraison, ont été automatisées. En réalité, être professionnel lorsqu&#8217;on parle de développer des logiciels, c&#8217;est, a minima, savoir automatiser la compilation et les tests en intégration continue. Mais un autre sujet [...]]]></description> <content:encoded><![CDATA[<p>Depuis le traditionnel outil <a
href="http://www.gnu.org/software/make/" title="make" >make</a>, introduit en 1977 pour livrer en production un logiciel, plusieurs étapes, de la construction du logiciel au processus de livraison, ont été automatisées. En réalité, être professionnel lorsqu&#8217;on parle de développer des logiciels, c&#8217;est, a minima, savoir automatiser la compilation et les tests en <a
href="http://martinfowler.com/articles/continuousIntegration.html" title="intégration continue" >intégration continue</a>. Mais un autre sujet progresse aussi dans le domaine de la gestion du <a
href="http://en.wikipedia.org/wiki/Application_Lifecycle_Management" title="cycle de vie des applications" >cycle de vie des applications</a> (Application Lifecycle Management &#8211; ALM), il s&#8217;agit de l&#8217;automatisation des déploiements. Cette progression est en partie due à nos environnements (serveurs d&#8217;application, ESB, EAI, etc.) qui sont de plus en plus complexes et étendus. Le nombre croissant de nouvelles versions d&#8217;une application, demandées par le business moderne, et le fait que le déploiement doit être suffisamment fiable pour ne pas risquer d&#8217;interrompre un service en ligne sont deux raisons supplémentaires qui poussent à s&#8217;intéresser à cette question. Ajoutez à cela que les infrastructures en cloud gagnent un peu plus de terrain chaque jour, et vous conviendrez que l&#8217;on a encore un long chemin, à la fois motivant et intéressant, à parcourir.</p><h3><a
name="Estcequenosoutilsdepackagingac"></a>Est-ce que nos outils de packaging actuels peuvent déployer nos applications?</h3><p>Dans cet article, je souhaite comparer l&#8217;automatisation du déploiement au plus connu des processus automatiques du développement logiciel : le packaging de l&#8217;application. En simplifiant, le processus de packaging part du code source pour le transformer en code exécutable. La façon la plus simple pour créer ce code est d&#8217;utiliser un script shell qui lance le compilateur, mais ce processus a beaucoup mûri. Grâce à des outils comme Make, cité précédemment, mais aussi à <a
href="http://ant.apache.org/" title="Ant" >Ant</a> et <a
href="http://maven.apache.org/" title="Maven" >Maven</a>, l&#8217;utilisateur peut spécifier de manière très détaillée tout le processus. Prenons l&#8217;exemple de Maven, la plupart des projets n&#8217;ont plus besoin de scripter quoique soit. Le fichier <a
href="http://maven.apache.org/pom.html" title="POM" >POM</a> décrit les composants du projet, les plugins utilisés, et la façon de packager l&#8217;application. Et en ce moment même, de nouveaux outils font leur apparition, comme <a
href="http://www.gradle.org/" title="Gradle" >Gradle</a>, qui offre encore un peu plus de flexibilité.</p><p>Mais ces outils nous permettent-ils de faire du déploiement automatique? Dans un <a
href="http://blog.xebia.fr/2009/10/20/le-deploiement-cas-decole" title="billet prcdent" >billet précédent</a>, mon collègue <a
href="http://blog.xebia.com/author/rvanloghem/" title="Robert van Loghem">Robert van Loghem</a> a expliqué en quoi le déploiement est un processus complexe qui inclut un certain nombre d&#8217;étapes comme l&#8217;installation des EAR/WAR, la configuration des datasources et le redémarrage des serveurs.<br
/> Bien que Wikipedia inclut la fonction de déploiement vers des systèmes en production, lorsqu&#8217;il définit <a
href="http://en.wikipedia.org/wiki/Build_Automation" title="l'automatisation du packaging" >l&#8217;automatisation du packaging</a>, les outils actuels n&#8217;ont pas intégré ces concepts de <a
href="http://www.infoq.com/articles/dev-op-xebia" title="packages de déploiement" >packages de déploiement</a> (i.e. les livrables), les environnements cibles (test, recette, production, etc.) ou <a
href="http://blog.xebia.com/2010/07/05/customize-this-tailoring-deployment-packages-to-your-target-environments/" title="la modification des valeurs selon lenvironnement" >la modification des valeurs selon l&#8217;environnement</a>. En réalité, ils n&#8217;ont pas de connaissances liées aux middlewares sur lesquels on déploie et ne proposeront certainement jamais des scenarii de déploiement. Au final, ce qu&#8217;offrent ces outils, c&#8217;est le moyen de scripter, bien connu des développeurs, et de stocker ces scripts avec les sources à installer. Cela amène irrémédiablement à de nombreux scripts « maison » pour automatiser les déploiements.</p><p>Mais ce n&#8217;est pas tellement surprenant. Dans Wikipedia, <a
href="http://en.wikipedia.org/wiki/Build_Automation#Requirements_of_a_build_system" title="les prrequis dun systme dautomatisation" >les pré-requis d&#8217;un système d&#8217;automatisation</a> ne mentionnent pas le Déploiement. Un système de déploiement automatique a pour objectif de déployer du code exécutable sur un environnement cible, alors que le système d&#8217;automatisation du packaging ne fait que produire ce code exécutable.</p><div
align="center"> <a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/build_automation_to_deployment_automation.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/build_automation_to_deployment_automation.png" width="587" height="173" alt="build_automation_to_deployment_automation" title="build_automation_to_deployment_automation" /></a></div><h3><a
name="Lesprrequisncessairespourqueno"></a>Les pré-requis nécessaires pour que notre outil déploie</h3><p>Voici une liste de pré-requis que devrait satisfaire un outil de déploiement automatique :</p><ul><li>Avoir nativement les concepts de base du déploiement : packages, environnements, lien entre les middlewares, etc.</li><li>Support inclus pour les middlewares principaux avec une possibilité de l&#8217;étendre.</li><li>Support inclus pour les scenarii courants de déploiement avec un moyen de les personnaliser.</li><li>Proposer une séparation des rôles : les développeurs livrent le projet, un groupe d&#8217;administrateur définit les environnements et un autre groupe déploie l&#8217;application, etc.</li><li>Supporter une charge croissante d&#8217;environnements avec plusieurs applications et de nombreux utilisateurs.</li><li>Être capable de faire des déploiements multi-plateformes : des environnements complexes peuvent s&#8217;étendre sur de multiples systèmes d&#8217;opération et versions.</li></ul><p>Les outils d&#8217;automatisation de packaging ne répondent pas à ces pré-requis et vouloir les étendre ne fera que complexifier leur utilisation sans pour autant faciliter convenablement les déploiements.<br
/> Cela explique l&#8217;émergence d&#8217;outils de déploiement automatique, qui ont dépassé les anciens outils de scripts « maison ».</p><p>Que l&#8217;on soit bien d&#8217;accord, les outils de déploiement automatique ne remplacent pas les outils d&#8217;automatisation des packages. Mais les deux ont leur place dans le paysage des livraisons d&#8217;applications. Les outils de packaging produisent le code exécutable et les outils de déploiements s&#8217;assurent de rendre ce code disponible pour les utilisateurs finaux !</p><p><em>Dans le prochain article de cette série, nous expliquerons en quoi le déploiement automatique est différent du mécanisme de gestion des livraisons de nouvelles versions.</em></p><hr
/> <em>Traduction libre du billet <a
href="http://blog.xebia.com/2010/10/12/deployment-automation-vs-build-automation/" title=""Deployment automation vs. build automation"" >&laquo;&nbsp;Deployment automation vs. build automation&nbsp;&raquo;</a> publié par <a
href="http://blog.xebia.com/author/vpartington/" title="Vincent Partington" >Vincent Partington</a> sur <a
href="http://blog.xebia.com" title="blogxebiacom" >blog.xebia.com</a>.</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/12/01/choisir-son-outil-pour-automatiser-les-deploiements/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Déploiement incrémental ou redéploiement complet</title><link>http://blog.xebia.fr/2010/10/28/deploiement-incremental-ou-redeploiement-complet/</link> <comments>http://blog.xebia.fr/2010/10/28/deploiement-incremental-ou-redeploiement-complet/#comments</comments> <pubDate>Thu, 28 Oct 2010 09:39:00 +0000</pubDate> <dc:creator>Emmanuel Servent</dc:creator> <category><![CDATA[Exploitation]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Déploiement]]></category> <category><![CDATA[livraison]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5752</guid> <description><![CDATA[Dans un précédent article sur le déploiement, j&#8217;ai présenté l&#8217;ensemble des tâches à mettre en œuvre pour déployer une application Java dans un environnement d&#8217;entreprise. Le scénario décrivait étape après étape la configuration de chaque composant comme les serveurs web, les pare-feux, la base de données et les ressources externes JEE. Le point clé à [...]]]></description> <content:encoded><![CDATA[<p>Dans <a
href="http://blog.xebia.fr/2009/10/20/le-deploiement-cas-decole" title="un prcdent article" >un précédent article</a> sur le déploiement, j&#8217;ai présenté l&#8217;ensemble des tâches à mettre en œuvre pour déployer une application Java dans un environnement d&#8217;entreprise. Le scénario décrivait étape après étape la configuration de chaque composant comme les serveurs web, les pare-feux, la base de données et les ressources externes JEE. Le point clé à retenir était que ces différentes configurations de composants avaient autant d&#8217;importance dans un déploiement que l&#8217;installation d&#8217;un fichier EAR ou WAR.</p><p>Mais voilà, comme on l&#8217;avait rapidement suggéré précédemment, il existe un scénario légèrement plus compliqué que celui décrit ci-dessus ; il s&#8217;agit du cas de mise à jour d&#8217;une application vers une nouvelle version. Bien que le déploiement initial d&#8217;une application soit forcément important, un certain nombre de raisons me fait penser que le déploiement d&#8217;une nouvelle version l&#8217;est encore plus.</p><h3><a
name="Livrerunenouvelleversionestplu"></a>Livrer une nouvelle version est plus important que le premier déploiement !</h3><p>Voici quelques raisons qui peuvent vous convaincre de porter plus d&#8217;attention à une nouvelle livraison:</p><ul><li>Les mises à jour sont plus fréquentes qu&#8217;un déploiement initial. ;-)</li><li>Les mises à jour en production ont lieu alors que les utilisateurs sont déjà en train d&#8217;utiliser l&#8217;application ; il est préférable que cette dernière reste accessible pendant le déploiement ou, au pire, que la coupure soit la plus brève possible.</li><li>Si une mise à jour échoue, l&#8217;ancienne version doit toujours être réinstallable.</li><li>Et le fait qu&#8217;une mise à jour soit « routinière », peut tromper la vigilance des différentes personnes, responsables du déploiement. Il faut se méfier de l&#8217;excès de confiance. Lorsqu&#8217;une application est déployée pour la première fois, chacun est très attentif : les développeurs, les administrateurs des différents composants, les architectes, les responsables de projet, les utilisateurs, etc. Donc, quand un problème arrive, il est traité très rapidement. En revanche, si on souhaite déployer la version 2.1.54 un vendredi après-midi, c&#8217;est là que tout peut aller de travers.</li></ul><p>En résumé, la mise à jour d&#8217;une application est complexe, et être concentré permet de diminuer les risques d&#8217;échec.</p><p>A présent, partons du scénario initial lorsque l&#8217;application est déployée. Ce scénario comprenait un fichier EAR, quelques fichiers statiques (images, css, etc.) et des scripts SQL.<br
/> Comment allons-nous mettre à jour cette application pour passer en v1.1 ? Pour simplifier, nous imaginons qu&#8217;il n&#8217;y a pas eu de changements sur le schéma de base de données entre v1.0 et v1.1.<br
/> Deux solutions sont possibles : soit nous mettons à jour juste ce qui est nécessaire, il s&#8217;agit alors d&#8217;un <strong>déploiement incrémental</strong>, soit nous supprimons la totalité de v1.0 et déployons proprement v1.1, et dans ce cas on fait un <strong>redéploiement complet</strong>.</p><h3><a
name="Etapesncessaireschaquescnario"></a>Etapes nécessaires à chaque scénario</h3><p>Si on choisit de simplement mettre à jour, voici les tâches à accomplir :</p><ol><li>Supprimer le contenu statique v1.0 du serveur web.</li><li>Arrêter l&#8217;application v1.0.</li><li>Supprimer l&#8217;application v1.0.</li><li>Déployer l&#8217;application v1.1 à partir du fichier EAR.</li><li>Démarrer l&#8217;application v1.1.</li><li>Copier le contenu statique v1.1 sur le serveur web.</li></ol><p>Et un redéploiement complet ressemble à ceci :</p><ol><li><strong>Arrêter le serveur web</strong>.</li><li>Supprimer le contenu statique v1.0 du serveur web.</li><li><strong>Supprimer la configuration v1.0 du serveur web</strong>.</li><li><strong>Arrêter le serveur d&#8217;applications</strong>.</li><li>Supprimer l&#8217;application v1.0.</li><li><strong>Supprimer la configuration du serveur d&#8217;applications nécessaire à v1.0 (source de données, queues, etc.)</strong>.</li><li><strong>Créer la configuration du serveur d&#8217;applications pour v1.1</strong>.</li><li>Déployer l&#8217;application v1.1 à partir du fichier EAR.</li><li><strong>Démarrer le serveur d&#8217;applications</strong>.</li><li><strong>Créer la configuration v1.1 du serveur web</strong>.</li><li>Copier le contenu statique v1.1 sur le serveur web.</li><li><strong>Démarrer le serveur web</strong>.</li></ol><p>Si on compare les deux scénarii, on note aisément le nombre de différences :</p><ul><li>Le serveur web est arrêté au début et démarré seulement à la toute fin (étape 1 et 12).</li><li>La configuration du serveur web est supprimée avant d&#8217;être recréée (étape 3 et 10).</li><li>Au lieu de simplement arrêter puis démarrer l&#8217;application, le serveur d&#8217;applications complet est arrêté et démarré (étape 4 et 9).</li><li>La configuration du serveur d&#8217;applications est elle aussi supprimée puis recréée (étape 6 et 7).</li></ul><p>En supprimant puis recréant la configuration du serveur web et du serveur d&#8217;applications, nous avons la certitude de connaitre exactement le résultat qu&#8217;on obtiendra. En effet, si des changements ont eu lieu dans la configuration qui n&#8217;ont pas été notés, ils seront supprimés et non recréés. Pour ce faire, il faut arrêter les serveurs avant de les redémarrer à la toute fin du déploiement. Par contre, cela rend l&#8217;application indisponible, mais vous savez de toutes façons qu&#8217;il faudra <em>bientôt</em> mettre en place un cluster pour avoir une haute disponibilité, n&#8217;est-ce pas ? ;-)</p><p>L&#8217;autre point intéressant de ce scénario se trouve entre les étapes 7 et 12. Vous aurez certainement noté qu&#8217;elles correspondent exactement au scénario du déploiement initial de votre application. La petite différence se situe au niveau des étapes de création du schéma de la base de données. On peut enfin noter que les étapes 1 à 6 permettent de désinstaller complètement l&#8217;application.</p><p>Résumons maintenant les avantages et inconvénients des deux scénarii.</p><h3><a
name="Dupouretducontre"></a>Du pour et du contre</h3><p>Dans le cas du <strong>déploiement incrémental</strong>, on peut retenir les points suivants :</p><ul><li><em
style="color:green;">Pour</em> : Le déploiement incrémental s&#8217;exécute très vite car il fait le strict minimum.</li><li><em
style="color:red;">Contre</em> : Le déploiement incrémental laisse éventuellement des traces de modifications manuelles. Ce point est problématique car la configuration a pu être changée de manière « magique » et sûrement non documentée pour que l&#8217;application fonctionne. Si vous décidez de migrer sur un autre serveur, vous oublierez probablement ces petites retouches. Et par-dessus tout, nous pouvons imaginer que si cela a été fait sur un des serveurs, et bien &#8230; je vous laisse compléter la phrase. :-)</li><li><em
style="color:green;">Pour</em> : Le déploiement incrémental ne touche pas aux systèmes qui sont <em>normalement</em> OK. Mais encore une fois, si vous craignez de toucher votre système parce que ça pourrait ne plus fonctionner du tout, vous avez du travail. Il faut avoir suffisamment confiance dans les composants de votre environnement pour ne pas avoir peur de faire un changement, de redémarrer le serveur et enfin de prier pour que ça re-fonctionne correctement.</li><li><em
style="color:red;">Contre</em> : Il est plus difficile de faire un retour arrière avec un déploiement incrémental. Pour chaque déploiement incrémental, il est nécessaire de décrire le scénario de retour arrière. En effet, comme le précédent déploiement était aussi incrémental, on ne peut donc pas le relancer. Sans scénario de retour arrière, la seule façon de revenir à v1.3 est de faire un déploiement &laquo;&nbsp;propre&nbsp;&raquo; de v1.0 est de déployer successivement v1.1, v1.2 et enfin v1.3.</li></ul><p>A présent, voyons un peu ce que le <strong>redéploiement complet</strong> apporte comme solutions mais aussi comme difficultés :</p><ul><li><em
style="color:green;">Pour</em> : Le redéploiement complet efface toutes modifications manuelles, ne laissant que la configuration « bien » documentée en place.</li><li><em
style="color:green;">Pour</em> : Le redéploiement complet est reproductible et prévisible. Grâce aux procédures qui sont systématiquement les mêmes, il n&#8217;y a aucune importance à connaitre ni la partie du produit qui a changé, ni l&#8217;état actuel de l&#8217;environnement cible. Ca sera toujours le même résultat.</li><li><em
style="color:green;">Pour</em> : Le redéploiement complet permet d&#8217;avoir une stratégie de retour arrière extrêmement simple. Quand le déploiement d&#8217;une nouvelle version échoue, ou que la nouvelle application ne fonctionne pas, il suffit de déployer la version précédente.</li><li><em
style="color:red;">Contre</em> : Conserver l&#8217;application disponible pendant le déroulement d&#8217;un redéploiement complet est une affaire plus délicate que pour un déploiement incrémental. Pour avoir une application en haute disponibilité, il est indispensable de configurer un cluster.</li><li><em
style="color:red;">Contre</em> : Un redéploiement complet peut s&#8217;exécuter lentement si l&#8217;environnement cible n&#8217;est pas assez rapide, car le nombre d&#8217;opérations de configuration est important.</li></ul><h3><a
name="Dploiementincrmentalplussrquel"></a>Déploiement incrémental, plus sûr que le redéploiement complet ?</h3><p>Pour ma part, même si le redéploiement complet est parfois plus difficile et plus long à mettre en œuvre, le fait qu&#8217;il soit prévisible et reproductible est un avantage décisif qui fait passer les inconvénients au second plan. Le déploiement incrémental peut sembler être une approche plus simple et plus rapide pour déployer des mises à jour, mais vous sacrifiez ce qui est essentiel pour un scénario de déploiement, le processus de retour arrière. L&#8217;unique cas où le déploiement incrémental est indispensable, c&#8217;est lorsqu&#8217;on met à jour une base de données. Dans tous les autres, il est recommandé d&#8217;utiliser le redéploiement complet pour appliquer des changements.</p><p><em>Traduction libre du billet <a
href="http://blog.xebia.com/2009/08/05/incremental-deployments-vs-full-redeployments/" title="Incremental deployments vs full redeployments" >&laquo;&nbsp;Incremental deployments vs. full redeployments&nbsp;&raquo;</a> publié par <a
href="http://blog.xebia.com/author/vpartington/">Vincent Partington</a> sur <a
href="http://blog.xebia.com">blog.xebia.com</a>.</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/10/28/deploiement-incremental-ou-redeploiement-complet/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Le déploiement, cas d&#8217;école</title><link>http://blog.xebia.fr/2009/10/20/le-deploiement-cas-decole/</link> <comments>http://blog.xebia.fr/2009/10/20/le-deploiement-cas-decole/#comments</comments> <pubDate>Tue, 20 Oct 2009 05:25:39 +0000</pubDate> <dc:creator>Emmanuel Servent</dc:creator> <category><![CDATA[Exploitation]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Déploiement]]></category> <category><![CDATA[DeployIt]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3016</guid> <description><![CDATA[Vous venez juste de boucler la première version de votre application, packagée par Maven. Vos intégrateurs ont préparé un environnement de recette et vous ont communiqué les informations de connexion à la console d&#8217;administration de votre serveur d&#8217;applications. Vous vous connectez, accédez aux fonctionnalités de déploiement et déployez le fichier EAR. Satisfait, vous démarrez votre [...]]]></description> <content:encoded><![CDATA[<p>Vous venez juste de boucler la première version de votre application, packagée par <a
href="http://maven.apache.org" title="Maven">Maven</a>. Vos intégrateurs ont préparé un environnement de recette et vous ont communiqué les informations de connexion à la console d&#8217;administration de votre serveur d&#8217;applications. Vous vous connectez, accédez aux fonctionnalités de déploiement et déployez le fichier EAR. Satisfait, vous démarrez votre navigateur pour vérifier que l&#8217;application tourne correctement. Mais quand vous essayez de charger la page, vous obtenez l&#8217;erreur DNS <em>&laquo;&nbsp;Host not found&nbsp;&raquo;</em>. C&#8217;est donc le moment d&#8217;appeler un ami &#8211; l&#8217;administrateur de cette obscure infrastructure, qu&#8217;on appellera Michel. Michel est bien sûr très heureux d&#8217;ajouter un enregistrement DNS qui va permettre d&#8217;aller sur le serveur Apache à partir de l&#8217;URL www.app-in-dev.com. <em>&laquo;&nbsp;Quoi ! Un serveur Apache ?&nbsp;&raquo;</em> vous exclamez vous, <em>&laquo;&nbsp;Mais ça devrait pointer vers notre serveur d&#8217;applications, pas du tout vers un quelconque serveur HTTP !&nbsp;&raquo;</em>.</p><p>Michel, qui a l&#8217;habitude de ce genre d&#8217;exclamation vis-à-vis de l&#8217;organisation des réseaux d&#8217;entreprise, explique calmement que toutes les requêtes partant d&#8217;un navigateur doivent d&#8217;abord passer par un serveur HTTP avant d&#8217;être redirigées vers le serveur d&#8217;applications. <em>&laquo;&nbsp;Il est donc aussi nécessaire de configurer Apache !&nbsp;&raquo;</em>, dit-il. <em>&laquo;&nbsp;Mais je développe une application Java, j&#8217;ai juste besoin de déployer sur un serveur d&#8217;applications et hop, terminé !&nbsp;&raquo;</em> répondez vous. Et Michel d&#8217;expliquer sur un ton très sérieux : <em>&laquo;&nbsp;Écoute fiston, appuyer sur le bouton de déploiement de ta console d&#8217;administration est juste une petite étape parmi toutes celles qui permettent de réaliser un vrai déploiement.&nbsp;&raquo;</em></p><h3><a
name="Rendrelapplicationaccessiblelu"></a>Rendre l&#8217;application accessible à l&#8217;utilisateur final</h3><p>Avant de parler des différentes étapes du déploiement, il est important de comprendre quel est l&#8217;objectif d&#8217;un déploiement. De façon élémentaire, le but d&#8217;un déploiement est de &laquo;&nbsp;rendre une application, dans une version donnée, disponible pour les utilisateurs finaux&nbsp;&raquo;. En d&#8217;autres termes, l&#8217;utilisateur ouvre son navigateur, tape www.app.com et voit l&#8217;application fonctionner.</p><p>Alors, que faut-il faire pour qu&#8217;une application fonctionne? Pour comprendre les composantes du déploiement, le plus simple est de suivre la requête depuis le navigateur de l&#8217;utilisateur à travers tous les composants matériels et logiciels par lesquels elle transite.<br
/> <em>&laquo;&nbsp;La destination de la requête est tout d&#8217;abord résolue en s&#8217;adressant à un serveur DNS (ou à un mécanisme équivalent). La requête est alors routée vers sa destination ; elle est filtrée par un premier firewall, arrive sur le serveur HTTP chargé de la répartition de charge, traverse un nouveau firewall, atteint le serveur d&#8217;applications puis enfin l&#8217;application à proprement parler, exécutée sur le serveur, qui elle-même interroge une base de données pour récupérer les informations demandées par l&#8217;utilisateur.&nbsp;&raquo;</em><br
/> Sur cet exemple simple, il y a au moins 5 composants en action pour rendre disponible l&#8217;application ; nous devons non seulement configurer ces 5 composants mais aussi y placer certaines données et s&#8217;assurer au besoin qu&#8217;ils (re-)démarrent dans un ordre correct.</p><p>Voici typiquement les étapes nécessaires au premier déploiement d&#8217;une telle application sur un environnement de production :</p><ul><li>(a) Exécuter les ordres SQL de création de tables sur la base de données</li><li>(b) Configurer la source de données JDBC dans le serveur d&#8217;applications</li><li>(c) Configurer les ports HTTP et les Virtual Hosts dans le serveur d&#8217;applications pour que l&#8217;application soit accessible par les requêtes HTTP</li><li>(d) Installer l&#8217;application sur le serveur d&#8217;applications</li><li>(e) Démarrer l&#8217;application</li><li>(f) Configurer le firewall, en ouvrant les ports utiles à la communication entre le serveur HTTP et le serveur d&#8217;applications</li><li>(g) Configurer le serveur HTTP, pour router vers le serveur d&#8217;applications les requêtes arrivant sur www.app.com et qui ne se terminent pas, par exemple, par .js, .html, .jpg</li><li>(h) Déposer le contenu HTML statique (fichiers js, fichiers css, images, etc.) sur le serveur HTTP</li><li>(i) (re-)Démarrer le serveur HTTP pour prendre en compte la nouvelle configuration</li><li>(j) Configurer le firewall externe, pour permettre les accès de www.app.com vers le bon serveur HTTP</li></ul><p>Bien sûr, dans un environnement plus complexe, on ajoute quelques étapes à la liste. Par exemple, dans un environnement clusterisé avec haute disponibilité, tout doit être fait au moins deux fois. Pour les déploiements de versions ultérieures de la même application, certaines étapes pourront de surcroît être négligées.</p><h3><a
name="Destchesnombreusesetvaries"></a>Des tâches nombreuses et variées</h3><p>Les étapes décrites dans la section précédentes permettent de &laquo;&nbsp;mettre à disposition des utilisateurs&nbsp;&raquo; une application à l&#8217;architecture élémentaire. D&#8217;une façon plus générale, on peut distinguer plusieurs grandes catégories d&#8217;opérations à réaliser pour finaliser un déploiement :</p><ul><li><em>Installer l&#8217;application (Étape d)</em><br
/> C&#8217;est la partie principale du déploiement, où la logique métier est installée sur le serveur, le plus souvent sous la forme d&#8217;un fichier EAR ou WAR.</li><li><em>Configurer les ressources externes (Étape b)</em><br
/> L&#8217;application peut avoir besoin d&#8217;interagir avec d&#8217;autres systèmes, comme une base de données, un mainframe ou un middleware de message. Les ressources externes sont le plus souvent utilisées par l&#8217;application pour obtenir ou diffuser des données. L&#8217;accès à ces ressources est généralement configuré au niveau du serveur d&#8217;applications.</li><li><em>Configurer les composants intermédiaires (Étape a, c, f, g, h, j)</em><br
/> Ce sont les composants qui permettent d&#8217;atteindre l&#8217;application, et de l&#8217;exécuter (par exemple, un cluster de serveurs d&#8217;applications, des instances de serveurs HTTP, des firewalls, etc.).</li><li><em>Démarrer/Arrêter les composants (Étape e, i)</em><br
/> Pour s&#8217;assurer que chaque composant fonctionne correctement, il peut être nécessaire de le (re-)démarrer.</li><li>Et respecter l&#8217;ordre dans les points précédents</li><p> Pour être sûr que l&#8217;application démarre correctement, sans erreurs, un certain ordre doit être maintenu. Exemple : Si vous installez l&#8217;application (Étape d) et la démarrez avant d&#8217;avoir configuré la source de données (Étape b), l&#8217;application risque de ne pas se lancer correctement. Ceci devient encore plus important lorsque vous déployez une nouvelle version de votre application dans un environnement clusterisé.</li></ul><p>Il y a une catégorie supplémentaire pour les organisations qui valident leurs applications successivement sur plusieurs environnements (Développement, Test, Intégration, Production) :</p><ul><li><em>Configurer l&#8217;application installée sur des environnements différents</em><br
/> Un déploiement doit assurer la configuration spécifique à l&#8217;environnement. Exemple : Quand vous installez une application sur l&#8217;environnement de développement, il faut récupérer les données de la base de développement. De la même façon, pour l&#8217;environnement de tests, il est nécessaire d&#8217;avoir les données de tests et ainsi de suite.</li></ul><h3><a
name="LEARlapartiemergedeliceberg"></a>L&#8217;EAR, la partie émergée de l&#8217;iceberg</h3><p>Beaucoup pensent qu&#8217;installer un EAR sur un serveur d&#8217;applications  équivaut à déployer l&#8217;application. Bien sûr, le bouton dans la console d&#8217;administration indique : <em>&laquo;&nbsp;Déployer l&#8217;application&nbsp;&raquo;</em>, mais il ne s&#8217;agit que de la partie concernant le serveur d&#8217;applications à proprement parler ; cette vision étroite du déploiement n&#8217;est généralement opérationnelle que sur un environnement simplifié, comme celui de développement ou sur le poste de travail du développeur. Dès qu&#8217;une application doit être installée sur un environnement plus complexe, cette vision ne suffit plus et il devient nécessaire de réaliser un grand nombre d&#8217;opérations complémentaires pour véritablement &laquo;&nbsp;mettre l&#8217;application à disposition des utilisateurs&nbsp;&raquo;.</p><p><strong>Parce que de ce point de vue le déploiement n&#8217;est pas une opération triviale, beaucoup cherchent à l&#8217;automatiser</strong>.<br
/> Exécuter manuellement toutes les étapes est en effet à la fois complexe et risqué, particulièrement sur les environnements les plus critiques. Et ce, d&#8217;autant plus que, souvent, les responsabilités et les gouvernances de chaque module de l&#8217;infrastructure reposent entre les mains de personnes, d&#8217;équipes, voire de départements différents.<br
/> Malheureusement, cet effort d&#8217;automatisation aboutit souvent à un ou plusieurs jeux de scripts à la gouvernance floue et dont le coût de maintenance semble souvent prohibitif. Les solutions du marché n&#8217;abordent souvent qu&#8217;un sous-ensemble de la problématique (on pense à Phurnace ou BuildForge, qui restent concentrés sur le serveur d&#8217;applications, ou à d&#8217;autres solutions qui sont souvent de simples ordonnanceurs de scripts).<br
/> Avec les serveurs d&#8217;intégration continue, on peut mettre en œuvre des déploiements automatiques, qui permettent de tester la chaîne complète de la compilation jusqu&#8217;aux tests de charge (<a
href="http://www.anthillpro.com/blogs/anthillpro-blog/2009/07/29/build_pipelines_and_build_lifecycles.html" title="cf. Build Pipelines" >cf. Build Pipelines</a>). Et si l&#8217;on veut aller encore plus loin, c&#8217;est-à-dire déployer automatiquement sur l&#8217;environnement de production, on peut se pencher sur le logiciel <a
href=" http://www.xebialabs.com/fr/deployit-automated-deployment-java-applications" title="DeployIt" >DeployIt</a>, développé par mes collègues Hollandais.</p><p>Je parlerai, plus en détail, dans un prochain article du déploiement automatique et nous pourrons déterminer par nous-même si c&#8217;est une solution &laquo;&nbsp;Insane&nbsp;&raquo; comme le pense le livre blanc <a
href="http://www.anthillpro.com/html/resources/white-papers" title="Enterprise CI Maturity Model de la société anthillpro" >Enterprise CI Maturity Model de la société anthillpro</a> ou une solution réelle pour améliorer la fiabilité comme le pense <a
href="http://www.xebialabs.com/fr/content/benefits" title="DeployIt" >DeployIt</a>.</p><hr
/> <em>Traduction libre du billet &laquo;&nbsp;<a
href="http://blog.xebia.com/2009/07/08/so-what-is-a-deployment-really/" title="So what is a deployment really?" >So what is a deployment really?</a>&nbsp;&raquo; publié par Robert van Loghem.</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/10/20/le-deploiement-cas-decole/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>CITCON Paris 2009</title><link>http://blog.xebia.fr/2009/09/21/citcon-paris-2009/</link> <comments>http://blog.xebia.fr/2009/09/21/citcon-paris-2009/#comments</comments> <pubDate>Mon, 21 Sep 2009 11:34:26 +0000</pubDate> <dc:creator>Emmanuel Servent</dc:creator> <category><![CDATA[Divers]]></category> <category><![CDATA[Exploitation]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[citcon]]></category> <category><![CDATA[Déploiement]]></category> <category><![CDATA[git]]></category> <category><![CDATA[intégration continue]]></category> <category><![CDATA[Maven]]></category> <category><![CDATA[release]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2865</guid> <description><![CDATA[Le CITCON (prononcé &#171;&#160;KITCON&#160;&#187;) a eu lieu vendredi et samedi dernier à Paris, pour la session européenne 2009. Vendredi soir, après les présentations d&#8217;usage, l&#8217;open space a commencé par le remplissage du tableau des sessions par les fameux post-it. Pour rappel, les participants écrivent un thème sur un post-it et le collent n&#8217;importe où sur [...]]]></description> <content:encoded><![CDATA[<p>Le <a
href="http://citconf.com/" title="CITCON" >CITCON</a> (prononcé &laquo;&nbsp;KITCON&nbsp;&raquo;) a eu lieu vendredi et samedi dernier à Paris, pour la session européenne 2009.  Vendredi soir, après les présentations d&#8217;usage, l&#8217;open space a commencé par le remplissage du tableau des sessions par les fameux post-it. Pour rappel, les participants écrivent un thème sur un post-it et le collent n&#8217;importe où sur le tableau. C&#8217;est autour d&#8217;un verre, et entre deux discussions, qu&#8217;on vote et place les post-it dans les cases proposées pour chaque session.</p><p>Samedi matin, j&#8217;ai assisté à la session sur <strong>la gestion de source dans un environnement distribué</strong>. Après une mise au point sur la différence entre gestion de configuration et gestion de source, nous avons entamé la discussion sur l&#8217;outil très utilisé dans le développement Open Source dénommé <a
href="http://fr.wikipedia.org/wiki/Git" title="GIT" >GIT</a>.  Cet outil fonctionne en mode décentralisé : il n&#8217;y a pas un unique serveur de sources, mais chaque développeur fonctionne à la fois en mode serveur et en mode client. Le développeur peut, par exemple, versionner très souvent ses sources sur son serveur local, mais décider de ne valider ses changements qu&#8217;en une seule fois sur le serveur de référence (il peut même signer sa validation !).<br
/> Le cas d&#8217;un projet partagé entre la France et l&#8217;Australie m&#8217;a particulièrement intéressé. Le responsable avait mis en place un serveur intermédiaire GIT sur chaque site pour éviter les échanges réseau trop nombreux avec un serveur central. Une synchronisation régulière permettait aux deux sites d&#8217;être à jour. Il s&#8217;était rendu compte au bout d&#8217;un certain temps que cela était en réalité inutile, car la qualité du réseau faisait qu&#8217;on pouvait se permettre de n&#8217;avoir qu&#8217;un seul serveur. En revanche, si cela est peut-être vrai pour l&#8217;Australie, ce ne l&#8217;est pas forcément pour tous les pays.<br
/> Avec GIT, chaque copie du repository est une nouvelle branche ; un développeur en local, c&#8217;est une branche. Le fonctionnement des branches est un vrai casse-tête pour des outils comme Subversion, et cette approche propose finalement un peu de simplicité. Mais pour le moment, les serveurs d&#8217;Intégration Continue ne font pas la différence entre modes centralisé et décentralisé. Rien n&#8217;est proposé aujourd&#8217;hui pour mieux profiter d&#8217;un monde distribué&#8230;</p><p>Après un ravitaillement en café et jus d&#8217;orange, j&#8217;ai suivi Vincent Massol, de XWiki pour savoir <strong>comment améliorer notre façon de faire une release avec Maven</strong>. Arnaud Heritier faisait parti de la session et après une présentation du <a
href="http://dev.xwiki.org/xwiki/bin/view/Community/ReleaseProcess" title="processus" >processus</a> pour XWiki, ils ont démarré le codage d&#8217;une extension au <a
href="http://maven.apache.org/plugins/maven-dependency-plugin/" title="plugin dependency" >plugin dependency</a>. L&#8217;objectif était d&#8217;ajouter un goal pour récupérer les différences entre les versions des dépendances entre deux releases. Il faudra être attentif aux prochaines sorties de ce plugin, il y aura peut-être une nouvelle fonction.<br
/> Le constat, finalement, était qu&#8217;il y avait encore beaucoup d&#8217;étapes manuelles lors de la release d&#8217;une version et qu&#8217;à part développer ses propres MOJOs, Maven était assez loin du compte. Mais ça avance comme le montre le plugin <a
href="http://mojo.codehaus.org/versions-maven-plugin/" title="versions" >versions</a>, dont Arnaud Heritier nous a vanté les mérites.</p><p>L&#8217;après-midi, trois sessions nous attendaient mais je souhaite ne parler que de la dernière sur <strong>la configuration et le déploiement</strong>, les autres étant déjà traitées sur différents <a
href="http://citconf.com/wiki/index.php?title=OnTheWeb#CITCON_Europe_2009_Paris_France" title="blogs" >blogs</a>. Un problème récurrent se pose sur chaque projet, celui de la modification des valeurs selon l&#8217;environnement sur lequel on déploie. On utilise, par exemple, des fichiers de propriétés qui sont remplacés au moment du packaging. Si on s&#8217;est trompé dans les propriétés ou si la valeur n&#8217;est connue que de la personne qui déploie, il faut dézipper le fichier, changer la valeur et refaire le package. Bonjour la galère !<br
/> Deux ingénieurs de <a
href="http://opensource.thoughtworks.com" title="ThoughtWorks" >ThoughtWorks</a> nous ont présenté leur petit dernier : <a
href="http://code.google.com/p/escservesconfig" title="Escape" >Escape</a>. Sous ce nom très commun se cache une application Java dans laquelle on peut sauvegarder les valeurs des propriétés de chaque application dans un environnement donné. Ces valeurs peuvent être cryptées. Pour y accéder, une simple interface REST permet d&#8217;interroger la base et de récupérer la valeur : l&#8217;url http://mymachine:8080/environnements/dev/citcon/city, par exemple, renvoie la valeur de city pour l&#8217;environnement de dev sur l&#8217;application citcon. Je trouve ce projet simple et efficace pour améliorer la gestion des propriétés de nos applications. La mise en œuvre demandera un peu d&#8217;effort pour disposer d&#8217;un serveur central mais cela en vaut certainement la peine pour s&#8217;affranchir de cette partie de la configuration.</p><p>La conférence s&#8217;est terminée par un tour des participants sur leur &laquo;&nbsp;AA moment&nbsp;&raquo; (ie. ce qu&#8217;ils ont préférés!) et une distribution de livres sur l&#8217;intégration continue.<br
/> J&#8217;en ai gagné un, écrit par Paul M. Duvall, qui était juste à côté de moi, et me l&#8217;a dédicacé. Et c&#8217;est aussi ce qui rendait cette journée franchement sympathique et réussie; mon &laquo;&nbsp;AA moment&nbsp;&raquo; a été de mettre enfin un visage sur des auteurs de blogs ou des contributeurs open source, et surtout pouvoir converser <em>de visu</em>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/09/21/citcon-paris-2009/feed/</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>Refactorisation de bases de données avec Liquibase</title><link>http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase/</link> <comments>http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase/#comments</comments> <pubDate>Wed, 03 Dec 2008 15:55:59 +0000</pubDate> <dc:creator>Emmanuel Servent</dc:creator> <category><![CDATA[Divers]]></category> <category><![CDATA[Exploitation]]></category> <category><![CDATA[Méthodes agiles]]></category> <category><![CDATA[bases de données]]></category> <category><![CDATA[database]]></category> <category><![CDATA[développement]]></category> <category><![CDATA[liquibase]]></category> <category><![CDATA[refactoring]]></category> <category><![CDATA[refactorisation]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1102</guid> <description><![CDATA[Gérer les modifications d&#8217;une base de données est toujours une affaire délicate, que ce soit lors du développement d&#8217;une application, pendant le déroulement des tests unitaires et même lors du déploiement en production. On observe un grand nombre de difficultés, en particulier dans les projets Agile, où les changements sur le modèle de données sont [...]]]></description> <content:encoded><![CDATA[<p>Gérer les modifications d&#8217;une base de données est toujours une affaire délicate, que ce soit lors du développement d&#8217;une application, pendant le déroulement des tests unitaires et même lors du déploiement en production.<br
/> On observe un grand nombre de difficultés, en particulier dans les projets Agile, où les changements sur le modèle de données sont fréquents.<br
/> A l&#8217;heure actuelle, peu d&#8217;outils sont disponibles sur le marché et on pense rarement à les mettre en place sur nos projets. On passe par des solutions « maisons » avec toutes les difficultés que cela peut engendrer.</p><p>Tout d&#8217;abord, nous ferons un point sur <a
href="http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase#Problmespossparlagestiondesbas" title="les problèmes posés par la gestion des bases de données" >les problèmes posés par la gestion des bases de données</a>, puis nous verrons comment <a
href="http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase#Refactorisationdebasesdedonnes" title="Liquibase, outils de refactorisation" >Liquibase, outils de refactorisation</a>, peut nous aider à les surmonter.<br
/> Nous continuerons par la description de <a
href="http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase#Caractristiquesetfonctionnalit" title="ses caractéristiques et fonctionnalités principales" >ses caractéristiques et fonctionnalités principales</a> et par <a
href="http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase#LancementdeLiquibase" title="les différents moyens de l'exécuter" >les différents moyens de l&#8217;exécuter</a>.<br
/> <a
href="http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase#Petitexercicepoursefamiliarise" title="Un petit exercice" >Un petit exercice</a> pour se familiariser avec cet outil viendra conclure ce billet.</p><h3><a
name="Problmespossparlagestiondesbas"></a>Problèmes posés par la gestion des bases de données</h3><p>Lorsqu&#8217;un projet démarre, on se demande souvent si l&#8217;on doit installer <strong>une base de données par développeur ou une base commune pour tous</strong>.<br
/> Sur des projets de taille réduite, une base peut suffire et une personne est désignée pour centraliser les changements et éviter ainsi des problèmes de redondance, d&#8217;incohérence, etc. Mais dans ce cas-là, dès qu&#8217;un changement est effectué, tout le monde doit impérativement mettre à jour le modèle objet sinon il court le risque de ne plus pouvoir lancer l&#8217;application. Par ailleurs, les jeux de tests de chaque développeur peuvent &laquo;&nbsp;se télescoper&nbsp;&raquo; ce qui peut faire perdre beaucoup de temps.<br
/> Sur des projets plus importants, il est préférable d&#8217;avoir une base par développeur, ce qui cause d&#8217;autres difficultés, telles que les répercutions des changements d&#8217;un développeur à l&#8217;autre ou encore une intégration plus laborieuse.<br
/> Se pose aussi la question suivante : <strong>comment va-t-on tracer les changements successifs ?</strong> Le plus courant reste d&#8217;écrire un fichier d&#8217;update SQL mais ce n&#8217;est pas fait systématiquement pendant les développements et ça manque de structure (au sens XML) et ça pas de signification propre. Par exemple, rien ne permet rapidement de différencier dans un script, le code qui applique les changements de celui qui les rollback (à part les commentaires !); ou les actions comme &laquo;&nbsp;Renommer&nbsp;&raquo; se traduisent par un DROP COLUMN / ADD COLUMN, ce qui fait perdre le sens de l&#8217;action.<br
/> Cette dernière question amène à s&#8217;en poser d&#8217;autres :</p><ul><li>comment versionner les changements effectués sur une base de données ?</li><li>comment appliquer les changements ? Entre développeurs, mais aussi lorsqu&#8217;on passe en intégration, puis en recette, etc. Pour le moment, cette étape prend du temps, que ce soit en amont si on décide de packager correctement les changements, ou en aval lorsqu&#8217;il s&#8217;agit de dérouler les scripts.</li></ul><p>Voilà en quelques phrases les multiples difficultés rencontrées lorsqu&#8217;on souhaite refactoriser une base de données.<br
/> Regardons à présent ce qu&#8217;un outil comme Liquibase peut faire pour nous accompagner dans ce travail délicat.</p><h3><a
name="Refactorisationdebasesdedonnes"></a>Refactorisation de bases de données avec Liquibase</h3><p>Liquibase est un outil qui peut s&#8217;intégrer dans un projet (Ant, Maven, etc.) ou se lancer <em>en mode standalone</em> directement en ligne de commande (jar).<br
/> Son objectif est de faciliter les modifications apportées à une base de données. Il est particulièrement pratique dans des projets ayant adoptés une méthodologie Agile, car les changements sont nombreux, fréquents et importants.<br
/> Le développeur enregistre dans un fichier XML (changelogs.xml), les différentes refactorisations qu&#8217;il souhaite effectuer (création d&#8217;une nouvelle table, renommage d&#8217;un champ, insertion de données, etc.). Ensuite, il suffit de lancer Liquibase en lui donnant les paramètres de connexion à la base de données et le fichier changelogs.xml. Liquibase applique ces modifications et les trace dans une table.<br
/> Les fichiers changelogs.xml sont versionnés dans le gestionnaire de sources, et sont considérés comme n&#8217;importe quelle autre ressource du projet. La base de données est alors complètement intégrée au cycle de développement.</p><p>Après cette brève présentation de Liquibase, intéressons-nous aux caractéristiques principales de cet outil.</p><h3><a
name="Caractristiquesetfonctionnalit"></a>Caractéristiques et fonctionnalités principales</h3><p>Liquibase est Open Source diffusé sous licence LGPL. Ce projet Open Source est actif, la dernière version (1.8.1) est sortie en octobre 2008 et sa road map montre qu&#8217;il veut aller encore plus loin. Il supporte un grand nombre de bases de données (> 10) et propose plus de 30 refactorisations possibles. Et pour certaines, il sait même faire un roll back (Ex: renommer une colonne).<br
/> Les changements peuvent être regroupés dans un changeset, ce qui permet de conserver un sens et une cohérence aux modifications.<br
/> On peut également n&#8217;exécuter des changements que sous certaines conditions, ou selon un certain profil d&#8217;exécution (utile pour les jeux de tests par exemple).</p><p>On peut noter également que Liquibase n&#8217;est pas juste &laquo;&nbsp;braqué&nbsp;&raquo; vers la refactorisation de la base de données, il offre d&#8217;autres fonctionnalit</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2008/12/03/refactorisation-de-bases-de-donnees-avec-liquibase/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
