Les Outils de déploiements

Pourquoi ?

  • Automatiser les déploiements des sites.
  • Permettre la gestion des fichiers de configurations du déploiement
  • Déployer par ftp
  • Pouvoir ajouter plusieurs type de déploiement (Prod / Préprod / Test)
  • Gérer les versions à déployer sous forme de branches (git ou svn)
  • Sauvegarde de l’ancienne installation, y revenir rapidement
  • Déploiement et migration (évolution des structures de tables) de DB

Pour nous permettre d’automatiser nos déploiements, deux outils sont sortis du lot. Nous avons parcouru plusieurs types d’outils dont Maven.
Maven est propose tout un tas d’outils pour structurer et uniformiser les cycles de développement d’un logiciel : compilation, test, déploiement du code (avec une gestion avancée des ressources nécessaire à la compilation du programme). PHP est un langage scripté ne nécessitant pas de compilation, il nous a semblé plus pertinent de nous tourner vers les outils d’un autre langage interprété : le ruby. En plus, chez Webpulser on est fan de ruby ;)

Le premier outils qui a vraiment retenu notre attention a été Capistrano et ses nombreuses fonctionnalités. Il permet de définir des environnements de déploiement, de prévoir l’exécution de script avant/après le déploiement. On peut aussi gérer les différentes branches que l’on souhaite déployer sur les serveurs. Nous utilisons déjà capistrano pour nos déploiement d’applications rails et nous en sommmes globalement satisfait. Nous pensons donc que Capistrano est assez aboutis pour répondre a nos besoins et qu’il s’adapterait tout à fait aux déploiements PHP.

Mais il y a quand même un aspect sur lequel Capistrano “flanche”.

C’est qu’il n’est pas vraiment fait pour fonctionner par FTP. En effet, Capistrano se connecte sur le serveur en SSH afin d’effectuer toutes ses actions. Du coup, si le serveur où l’on souhaite déployer son application dispose de SSH c’est parfait, sinon, cela demandera un peu plus de configuration. Car ce n’est pas natif pour Capistrano. Or il nous arrive régulièrement de devoir déployer un site sur un serveur mutualisé dont nous n’avons pas d’accès SSH.

 

Nous avons poursuivi nos recherche et sommes tombés sur un nouvel outils: Phing.

Phing est un outil de déploiement en PHP. Phing dispose à peu prés des mêmes fonctionnalités que Capistrano mais avec une cerise sur le gateau : une interface interactive. Cela peut sembler « gadget » mais lorsque vous devez redéployer un site réalisé il y a deux ans, cela peut vous faire plaisir d’être assisté dans la démarche. D’autre part, avec ce type d’interface il devient plus facile de déléguer le déploiement à plusieurs personnes.

Phing donne donc la possibilité de créer une interface rudimentaire (comprenez par la en mode console) mais puissante qui va permettre, par exemple, de renseigner de nouveaux serveurs ou de nouveaux environnements de déploiement, tout ça, sans toucher aux fichiers de configuration.
Ainsi, avec une interface bien construite, nous devrions pouvoir déployer assez rapidement et facilement des applications.
Qu’il s’agisse de nouvelles applications / site web ( où l’interface nous demanderait les informations nécessaires ) ou même d’applications déjà existantes. La seule contrainte pour nous permettre autant de possibilités sur le déploiement étant un investissement en temps pour construire un script efficace et pertinent.

Comparaison des outils

    • Maven for PHP : Outils de build et de déploiement d’application java / php.

les moins  -

les plus +

  • Aucune interface, tout se fait en console
  • Creation d’un architecture de projet standard ( non adapté a prestashop ou wordpress)
  • Pas de gestion de base de donnée.
  • Pas de gestion des versions ni des branches.
  • Logiciel libre
  • fichier de configuration XML
  • Utilise une norme pour l’implementation du projet. (Chaque projet maven aura la même arborescence)
  • Possibilité de lancé les test unitaires avant le déploiement
  • déploiement sur un serveur.

Sources :

http://maven-guide-fr.erwan-alliaume.com/maven-guide-fr/maven-guide-fr.pdf

http://php-maven.org/

    • Capistrano :  Outils de déploiement en rails.

les moins -

les plus +

  • Nécessite rails pour fonctionner.
  • Prise en charge de des versions de GIT
  • Des branches
  • fait les mise a jour structurelles de la database
  • Arborescence similaire a la notre (current / release  / shared )
  • Multi- serveur

Sources :
Déploiement automatisé Capistrano, git pour symfony et diem

    • Phing : Outil de déploiement en PHP

les moins -

les plus +

  • syntaxe compliqué ( comparé a capistrano
  • Prise en charge de des versions de GIT
  • Des branches
  • fait les mise a jour structurelles de la database
  • Multi- serveur
  • Prise en charge de PHPUnit
  • Prise en charge de la generation de la Doc

Sources :

http://www.phing.info/

Automating deplouyment proccess with phing

dbdeploy_and_ftp (Database Migration)

https://github.com/oommgg/phing-example/blob/master/build.xml ( SSH Exemple)

Buils script menu system ( Menu XML)

http://www.precioux.fr/2010/09/phing-par-lexemple/ ( FTP Deploy)

https://github.com/phingofficial/phing ( Appli exemple)

 

Conclusions

Nous avons à disposition deux outils puissants qui répondent tout deux entièrement à nos besoins.
D’un coté Capistrano qui va nous permettre de déployer rapidement, efficacement des applications mais demanderait un peu de configuration pour le passer en FTP. Cela nécessiterait également de configurer le déploiement pour chaque projet de manière ad’hoc.
De l’autre coté nous avons Phing, qui nous permettrait de lancer des déploiements génériques  sans besoin de retourner dans la configuration de chaque nouveaux projets que l’on souhaite déployer, mais qui nous prendrait plus de temps à mettre en place que Capistrano.

Un dernier point intéressant à noter : Phing supporte nativement l’exécution des tests unitaires et de la génération de la documentation PHP.
Article rédigé par : Nicolas Delannoy

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

Aucun commentaire pour le moment ... Soyez le premier à laisser une réponse!