mardi 29 juin 2010

Intégration Continue php avec hudson/jenkins et git

L'intégration continue en PHP

Le but de cet article est d'expliquer comment mettre en place, à minima, un processus d'intégration continue en php, en se basant sur le serveur d'intégration continue Hudson, et le SCM git.

Le processus d’intégration continue a pour objectif de vérifier que chaque mise à jour du code source ne génère pas de régressions ou d’anomalies. Le concept est très lié à la vision eXtreme Programming (XP).

Globalement, le serveur d'intégration continue scrute le dépôt de code (SVN, GIT, ...) à la recherche de modifications, et le cas échéant, il descend ces modifications, et lance une construction du projet.
Une fois le projet construit, il peut lancer plusieurs étapes de validation du code produit :
  • Tests unitaires (junit, phpunit, ...)
  • Tests fonctionnels
  • Vérification de style (checkstyle)
  • Vérification de duplication de code
  • Génération de la documentation

Le serveur génère et/ou envoi un rapport contenant toutes les statistiques sur son build (tests échoués, qualité du code, ...)

Il peut même aller jusqu'à déployer l'application si tous les tests ont été passés avec succès.


Les éléments mis en place ici seront :
  • Installation du server d'intégration continue Hudson, maintenant Jenkins
  • Ecriture d'un build Phing pour automatiser nos tâches
  • Génération automatique de la documentation API avec phpDocumentor
  • Automatisation de test unitaires avec PHPUnit
  • Vérification automatique de bonnes pratiques de développement avec PHP_CodeSniffer
  • Détection de code dupliqué avec phpcpd

Présentation des outils

Hudson
Phing

Installation et utilisation

Pour l'installation, tout a été fait sur une debian squeeze, donc il vous faudra peut être adapté un peu selon votre distribution.
Installation d'Hudson
On commence par installer java et daemon, dont a besoin hudson
apt-get install sun-java6-jre daemon
wget -O /tmp/key http://hudson-ci.org/debian/hudson-ci.org.key
apt-key add /tmp/key
wget -O /tmp/hudson.deb http://hudson-ci.org/latest/debian/hudson.deb
dpkg --install /tmp/hudson.deb

Attention, par défaut, sous squeeze, Hudson écoutera sur les adresses ipv6, pour contrer cela, il faut ajouter au fichier /etc/default/hudson :
JAVA_ARGS="-Djava.net.preferIPv4Stack=true"
Voilà, Hudson est maintenant installé, et accessible via http://localhost:8080
On va tout de suite installer les plugins dont on va avoir besoin par a suite, via la page "plugins" d'Hudson.
Voilà, avant d'aller plus loin dans la configuration de Hudson, nous allons préparer le code et le SCM à utiliser.

Ecriture du code
Vous pouvez télécharge ce petit morceau de code qui implémente très succinctement une gestion de compte bancaire, avec les tests unitaires adéquats.

Phing
Afin de pouvoir permettre à Hudson de construire notre projet, nous allons écrire le script phing qui fera toutes les étapes décrites précédemment :

  
  
  

  
    
    
  

  
    
    
    
    
    
  

  
  
    
      
        
      
    
  

  
  
    
    
  

  
  
    
    
  

  
  
    
    
  

  
  
    
    
  



Installation du serveur git
N'importe quel serveur git fera la faire, vous pouvez par exemple suivre l'installation de gitolite

Il faut faire en sorte que Hudson puisse descendre le projet git, on va donc ajouter sa clef publique au serveur git.
Pour la générer, avec le compre hudson :
ssh-keygen -t rsa
Il faut ensuite ajouter la clef à la liste des clefs autorisées sur le serveur git
su - gitadmin
cd gitolite-admin
echo "..." > keydir/hudson.pub
git add keydir/hudson.pub
Et autoriser hudson à accéder au projet :
vi conf/gitolite.conf
  repo bank
    RW = gitadmin
    R = hudson
git commit -m "hudson"
git push
Voilà, maintenant Hudson peut enfin accéder aux sources.

Création du build hudson
On a maintenant toutes les clefs pour créer notre projet Hudson.
Rendez-vous donc sur http://localhost:8080 pour créer le build.



Ensuite, on va dire à Hudson comment récupérer les sources du projet :

Puis fournir la commande qui permettra de lancer le build phing :



Et enfin la configuration des rapports à produire grâce aux différents plugins installés :

Voilà, la configuration est à peu près terminé, on peut maintenant lancer le build et voir la qualité du code produit :).

Si tout se passe bien vous devriez avoir un bel écran plein de vert :

Aucun commentaire:

Enregistrer un commentaire