juin
2008
Je me suis frotté il y a peu à la problématique de lancer un fichier .bat sous forme de service.
En fait, je souhaitais lancer Hudson sous forme de service sans pour autant installer Tomcat.
Je précise que le site de HUDSON conseille d’installer un serveur Tomcat, ou d’utiliser « Java Service Wrapper » seulement voilà, je ne connais aucune de ces technologies, et je souhais trouver la solution la plus simple, et la plus légère possible pour le serveur.
Vous connaissez tous cela, je travaille dans une grande SSII, je n’ai donc à ma disposition que peu de moyens et mon serveur n’en est pas un. Donc si je peux éviter d’installer Tomcat juste pour lancer Hudson, sans que cela ne m’apporte quoi que ce soit de plus, je tente le coup.
Comme le titre l’indique, mon serveur est un PC qui tourne sous Windows XP et ce qui suit est valable pour n’importe quel exécutable ne remplissant pas le contrat attendu par l’interface de services Windows. Car tout le secret est là. Je n’ai jamais eu à me pencher sur la création de services jusqu’ici, et je ne me suis pas encore plongé profondément dans le sujet. Mais manifestement, un service se doit d’un minimum de communication avec le système.
Autant dire que l’utilisation de la commande sc pour enregistrer le fichier .bat (lance.bat pour Hudson) fonctionne très bien de la sorte :
sc create hudson binpath= "C:\HUDSON\lance.bat" displayname= "Hudson" start= auto
mais ne permet pas d’avoir un service opérationnel : lorsque vous souhaiterez le lancer, vous obtiendrez une belle erreur :
Erreur 1053 : Le service n’a pas répondu assez vite …
Après avoir compris qu’il s’agissait d’un problème de communication, je me suis penché sur l’option d’écrire un « lanceur ». Un petit programme dont la seule tâche serait d’assurer la communication avec le système et de lancer lui-même mon petit fichier .bat.
Un minimum de recherche dans se sens m’a amené à découvrir srvany.exe fourni par Microsoft dans le cadre d’un ressource kit tools et qui s’occupe exactement de cela.
Personnellement, j’ai téléchargé srvany.zip qui contient uniquement le nécessaire pour cette opération, soit instsrv.exe, et srvany.exe.
Il n’est pas fourni en l’état par Microsoft, mais une petite recherche de ce type (http://www.google.fr/search?hs=IXV&q…y.zip+download) vous permettra de récupérer facilement ce type de package.
En gros : instsrv.exe permet d’enregistrer le service et srvany.exe sert d’interface entre le programme à lancer (le .BAT) et les services windows.
J’ai donc décompressé mon archive sous C:\HUDSON, puis j’ai enregistré mon service ainsi :
C:\HUDSON\instsrv.exe "Hudson" C:\HUDSON\srvany.exe
Vous remarquez bien sûr que le service lancé n’est pas notre fichier C:\HUDSON\Lance.bat mais srvany.exe.
Un petit tour dans la base de registre :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Hudson
Une nouvelle clef « Parameters » doit être créée avec une valeur chaîne nommée « Application » dont la valeur prend « C:\HUDSON\Lance.bat ».
Le tour est joué. Vous pouvez lancer le service via l’explorateur de services windows ou manuellement via la commande :
C:\>net start Hudson
Si vous cherchez une présentation des concepts d’intégration continue (ou usine logicielle) ainsi qu’une présentation de l’outils Hudson, je ne saurais trop vous conseiller la lecture de ce document : "L’intégration Continue avec Hudson"
Bonne chance !