Dans cet article, j’expliquerai comment utiliser NSSM pour démarrer un agent Jenkins sur Windows en tant que service. Jenkins est un outil d’intégration continue que j’utilise pour gérer mes projets sous git. L’application programmée en Java possède une interface web très intuitive. Un autre de ses avantages est que l’on peut distribuer la charge de la construction et du déploiement d’une application sur plusieurs agents.
Pour un agent Linux, j’utilise habituellement comme Launch method l’option Launch agents via SSH. Pour un agent Windows, c’est plutôt l’option Launch agent by connecting it to the master qui sera utilisée. Une fois l’agent configuré, nous serons confrontés à une page similaire à l’image suivante.
La première option permet de télécharger une application JNLP (Java Network Launch Protocol) qui démarrera l’agent. Il est aussi possible de l’installer en tant que service. Par contre, mon anti-virus m’empêche de l’ouvrir et/ou de l’installer. C’est l’une des raisons qui m’a poussé à utiliser l’application NSSM. NSSM signifie Non-Sucking Service Manager et, comme son nom l’indique, est un gestionnaire de service « performant ». L’application possède une interface graphique pour installer, éditer ou supprimer un service créé à partir de NSSM. Par contre, dans cet article, c’est plutôt des lignes de commande que nous utiliserons.
Premièrement, pour me simplifier la tâche, j’ai installé nssm.exe dans le dossier C:\jenkins. C’est le Remote root directory dans lequel l’agent va opérer. Ensuite, on ouvre une fenêtre de terminal et on tape toutes ces commandes:
nssm install jenkinsagent "C:\jenkins\java\bin\java.exe"
nssm set jenkinsagent AppDirectory "C:\jenkins"
nssm set jenkinsagent AppParameters "-jar agent.jar -jnlpUrl http://server.com/ci/computer/Demo/jenkins-agent.jnlp -secret ba206ed36a928e773024ea46afdbfb8e33abd0de67f93c73213c4dcf229a1990 -workDir \"c:\jenkins\""
nssm set jenkinsagent DisplayName "Jenkins Agent Service"
nssm set jenkinsagent Description "A Jenkins agent."
nssm set jenkinsagent Start SERVICE_DELAYED_AUTO_START
nssm set jenkinsagent AppStdout "C:\jenkins\logs\nssm.log"
nssm set jenkinsagent AppStderr "C:\jenkins\logs\nssm.log"
nssm set jenkinsagent AppRotateFiles 1
nssm set jenkinsagent AppRotateBytes 1000000
nssm start jenkinsagent
L’agent nécessite d’être démarré par Java.exe, donc la ligne 1 doit être le chemin vers ce fichier. La ligne 3 est une copie de ce que vous allez trouver sur la page web de l’agent. La dernière ligne va démarrer le service. Après cette étape, l’agent devrait maintenant être disponible dans Jenkins.
Si vous désirez supprimer le service, c’est cette commande qu’il faut utiliser:
nssm remove jenkinsagent
Pour éditer un service déjà installé avec l’interface, on utilise cette commande:
nssm edit jenkinsagent