Introduction
Dans les entreprises modernes et bien structurées, il est plutôt inconcevable de ne pas avoir une procédure de déploiement, plutôt que de copier manuellement des fichiers sur un FTP (CuteFTP, FileZilla, ...), par WinSCP ou encore par un partage d'unité réseau. Aujourd'hui, un déploiement avec SVN avec un «svn up», un Jenkins, un Git ou ou encore TeamFoundation sont devenues très populaires et pour cause, ils sont beaucoup plus fiable et facile de comprendre pourquoi un système est instable si on est certain de quelle version d'un projet a été déployer en production, plutôt que de deviner, un à un, quel fichier a été modifier.
Pourtant, certaines personnes sont souvent désappointées d'une mauvaise implantation réseau qu'une procédure de déploiement à pu prendre en pratique, car une mauvaise implantation aura comme résultat comme projet ne fonctionnera pas correctement à cause que la procédure de déploiement à fait son travail à moitié.
Pourquoi un déploiement ne fonctionne pas correctement ?
- Un problème de droit d'accès, comme, par exemple l'interdiction d'écrire sur le serveur approprié.
- Si vous avez une procédure de déploiement avec des processus associés en crochet (Hook), et que ceux-ci ne sont pas exécutés correctement, le déploiement pourrait ne pas réussir et être interrompu ou donner l'impression qu'il s'est bien exécuté, car l'un de ses ajouts ne traitera pas correctement les exceptions et qu'il le laisserait continué.
- Si vous utilisez de multiples comptes utilisateur pour un processus de déploiement, il pourrait y avoir des conflits à ce niveau.
- Des processus ou des cronjobs empêche le remplacement de certains fichiers sur certains serveurs déployés, et ainsi on se retrouvera avec certains navigateurs Web faisant fonctionner correctement et d'autres non, par que certains des serveurs ne seront pas à jour. Ainsi, pour résoudre le problème, il faudra s'assurer que la procédure de déploiement arrêt les processus ou cronjobs avant de faire le déploiement sur les serveurs.
- Si vous avez des variables spécifiques pour un environnement comme Développement, Poste de travail, Serveur, Staging, Pre-Production et Production, vous aurez donc des comportements différents à cause de cela et en réalité le déploiement ne sera pas en cause.
- Si vous déployez avec un utilisateur ayant plus de droits que votre serveur Web, il ne sera pas capable de lire les fichiers déployés et ainsi le projet ne fonctionnera pas.
- Le disque dur du serveur contenant le serveur de version est plein ou le serveur où est déployé est plein.
- Les fichiers de configuration ont été détruits.
- Du matériel physique n'est pas supporté ou correctement reconnu sur un des systèmes d'exploitation.
- Des pilotes sont mal installés sur un des systèmes d'exploitation.
- Plus inusité, j'ai déjà constaté que la procédure de déploiement ne déployait pas sur le bon serveur. Ainsi, lorsqu'on regardait les fichiers, il était bien présent, mais lorsqu'on regardait où Apache allait voir où se trouvent les fichiers, il lisait les fichiers dans un autre dossier avec une copie plus ancienne du projet.
- Dans les autres cas, normalement, un message d'erreur est présent expliquant le pourquoi un fichier n'a pas été déployé.
Solution à court terme
Quand un problème survient, on a tendance à effectuer les actions suivantes :
- Arrêter tous les processus et cronjobs.
- Redéployer la même version du projet.
- Redéployer l'ancienne version du projet.
- Recopier manuellement des fichiers à problèmes.
- Supprimer les fichiers temporaires.
- Redémarrer le serveur Web.
- Redémarrer le système d'exploitation.
Ces actions sont des solutions d'urgences et ne devraient pas devenir une habitude après chaque déploiement, car sinon, il y a manifestement des problèmes à corriger.
Conclusion
Les procédures de déploiement ont surtout des problèmes parce qu'on ne s'assure pas qu'aucune erreur ne s'est produite pendant le déploiement et que l'on n'a pas corrigé le tir, plus que parce que la procédure de déploiement n'est pas fiable. Ainsi, une bonne pratique des procédures de déploiement est très importante, d'ailleurs, cela ne serait pas devenu un métier «Gestionnaire de livraison / Release Manager» !
Voir également
Serveur ou service logiciel - SVN (Subversion) - Introduction
Serveur ou service logiciel - StarTeam VirtualTeam Server - Introduction
Articles - SVN vs Git