dimanche, février 28 2010, 22:56
Complémentarité PHPUnderControl / Phing
Par Olivier Hoareau - Outillage - Lien permanent
Suite à une demande d'un internaute, j'explique la complémentarité entre PHPUnderControl et Phing
PHPUnderControl
PHPUnderControl est un version adaptée pour PHP de l'outil open source CruiseControl qui est un logiciel serveur d'intégration continue développé en Java et initiallement pour la technologie Java (i.e. pour gérer des projets écrit en Java).
L'adaptation de PHPUnderControl consiste en la mise à disposition d'une IHM un peu plus contextualisée pour PHP avec des graphiques de métriques qualité récupérés depuis les outils disponibles avec PHP (phpunit notamment).
Le principe de ce type de logiciel est de détecter des modifications dans un dépôt de code distant (par exemple un serveur Subversion - SVN) et de déclencher une commande suite à cette détection de modification. Il s'agit donc d'un espèce de méga-ordonnanceur qui est bête et méchant et ne sait finalement que "déclencher" des commandes sur des "stimuli" prédéfinis (i.e. la détection d'un commit sur SVN).
Phing
Phing est un port du logiciel Ant qui provient du monde Java. Ant est un outil pour écrire des scripts batchs en XML, les rendant ainsi multi-plateformes. Il n'est plus nécessaire de se soucier du format .bat de windows ou .sh des linux-like, les commandes sont écrites en XML : on dispose par exemple de balises mkdir, copy, tar... et il est possible de créer ses propres balises de commande (task) voir ses propres séquences de commandes (target).
Phing est l'implémentation full-PHP de Ant, c'est à dire qu'il suit le même principe, met à disposition globalement les mêmes commandes selon la même syntaxe, mais l'implémentation est réalisée en PHP et est extensible en PHP. Il se base sur l'écriture d'un fichier de commandes nommés build.xml qu'il est coutume de mettre à la racine de votre projet (à subversionner) et qui doit contenir l'ensemble des commandes dont vous avez besoin pour gérer le code de votre projet (lancer les tests, packager le code, déployer le code, qualifier le code...)
PHPUnderControl + Phing et non PHPUnderControl = Phing
Phing est donc un moyen de décrire la ou les commandes à exécuter suite à un stimuli détecter par PHPUnderControl. PHPUnderControl est "compatible" phing en standard ce qui permet de décrire/configurer facilement l'exécution de commande phing dans le fichier de configuration de PHPUnderControl (config.xml). Cependant, même si cette intégration n'existait pas, l'exécution d'une commande phing consiste en faite en l'exécution de la commande shell phing suivi des quelques paramètres, ce qui permet d'intégrer cet outils avec n'importe quel logiciel ordonnanceur, même les tâches planifiées windows.
PHPUnderControl et Phing sont donc complémentaires mais indépendant et autonomes.
Bien sûr il est possible de remplacer PHPUnderControl par un autre logiciel du même type (Hudson, Xinc, Continuum, ...), ainsi que Phing (makefile, shell script, script bat, ...)
Pour obtenir plus de documentation, voici quelques liens :
- PHPUnderControl : http://phpundercontrol.sourceforge.net
- Phing : http://phing.info
- CruiseControl : http://www.cruisecontrol.net
- PHPUnit : http://www.phpunit.de
Avez-vous des questions complémentaires ou des remarques ?
Et vous, comment utilisez vous PHPUnderControl et Phing ? Avez-vous des exemples de build.xml que vous utilisez régulièrement ?
3 commentaires
Merci pour cet article.
Il me servira de base pour l'intégration de ces outils.
Je n'utilise pas phing avec PUC, car PUC(CC) intègre déja Ant, je ne vois pas trop l'interêt de remplacer Ant par Phing ?
@jpauli: Phing étant écrit en PHP, il est 100% extensible en PHP (ce qui n'est pas le cas de Ant, qui nécessite Java). Ce qui permet de rapidement / facilement développer des tasks (classes) complémentaire pour rationnaliser certaines pratiques récurrentes dans les projets (mêmes internes). Dans mon cas, 80% des développeurs que je croise ne sont pas à l'aise avec Java, ca les rassure et les rend plus opérationnel d'utiliser un outil en PHP ;)