web-dev-qa-db-fra.com

Installer Jenkins esclave en tant que service Windows en ligne de commande

J'ai beaucoup cherché sur Google pour installer le service en ligne de commande .__ (donc sans interaction manuelle), mais je suis bloqué sur la façon de Obtenir le jenkins-slave.exe.

J'ai trouvé ces instructions https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+as+a+Windows+service , Mais je ne vois pas comment obtenir l'exécutable. . J'ai téléchargé et exécuté Le slave.jar avec la bonne clé, qui connecte l'esclave, mais l'exe N'est pas généré.

J'ai trouvé cette page https://github.com/kohsuke/winsw/blob/master/doc/installation.md#winsw-installation-guide De l'installer manuellement, mais cela ressemble -inventé la roue quand le pot peut le faire. De plus, il y a un risque que WinSW.exe soit différent et que Ne soit pas mis à jour par le plugin (j'ai vu du code de mise à jour automatique dans celui-ci).

Y at-il un moyen de télécharger jenkins-slave.exe ou de le générer? Ou d’exécuter "Installer en tant que service" en ligne de commande à partir de The slave.jar?

7
Maxime Viargues

Pour répondre à ma propre question, après avoir contacté les développeurs du plugin:

Il n’existe aucun moyen de télécharger le fichier exe directement à partir de Jenkins, le fichier slave.jar l’obtient du maître via le protocole de communication à distance. J'ai créé une demande pour pouvoir le télécharger via une URL (comme suggéré par le développeur), afin qu'il puisse être disponible à l'avenir.

Actuellement, l'exécutable est un binaire Windows Service Wrapper renommé: https://github.com/kohsuke/winsw j'ai donc utilisé ce binaire de la même manière.

En ce qui concerne la configuration utilisée par les fichiers WinSW et XML, j’ai utilisé celle du référentiel GitHub https://github.com/jenkinsci/windows-slave-installer-module . Les versions sont compatibles en termes de configuration.

Donc, fondamentalement, je télécharge le fichier exe, récupère la clé privée de Jenkins et crée le service en utilisant la configuration du plug-in d'origine. Ensuite, j'installe le service en utilisant jenkins-slave.exe install.

Pas à pas:

  • Obtenez la commande JNLP à partir de Jenkins (à partir de la page Node) pour obtenir la clé privée, par exemple. Java -jar slave.jar -jnlpUrl http://jenkins...
  • Téléchargez le fichier slave.jar à partir de Jenkins (obtenu à partir de la commande JNLP)
  • Téléchargez l'exécutable du service wrapper, par exemple http://repo.jenkins-ci.org/public/com/Sun/winsw/winsw/2.1.0/winsw-2.1.0-bin.exe
  • Configurez le XML utilisé pour exécuter le service (disponible dans le module ou directement sur le site Web de winsw)
  • Configurez le fichier XML de configuration de l'esclave (disponible sur le code source du module)
  • Puis installez le service en utilisant jenkins-slave.exe install
7
Maxime Viargues

Ce que je ferais est:

  • Téléchargez le fichier slave.jar (à partir de la page du nœud de Jenkins)
  • Copiez la commande Java -jar slave.jar -jnlpUrl http://<YOUR URL HERE> à partir de la page du nœud.
  • Collez cette commande dans un nouveau fichier .bat et enregistrez-le.
  • Enregistrer une tâche planifiée pour exécuter ce fichier .bat au démarrage de Windows
1
EM-Creations

Ou existe-t-il un moyen d'exécuter "Installer en tant que service" en ligne de commande à partir du fichier slave.jar?

Je n'utilise pas jenkins-slave.exe, mais un script personnalisé dans lequel je peux contrôler la variable d'environnement exacte que je veux définir pour l'esclave Jenkins, lors du lancement de Java -jar slave.jar avec la clé secrète que vous pouvez voir dans la page du nœud principal Jenkins pour ce nouvel esclave . 

Pour obtenir slave.jar du maître sur l'esclave, exécutez-le à partir du serveur Windows esclave:

curl -o slave.jar https://your.server/jenkins/jnlpJars/slave.jar

Pour remplacer jenkins-slave.exe, j'utilise un script déclaré en tant que service Windows, avec nssm

Le script est similaire à agent.bat:

set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0
set PATH=D:\Tools\SonarRunner\bin;%PATH%
set M2_HOME=D:\Tools\Apache-maven-3.5.0
set PATH=%M2_HOME%\bin;%PATH%
set PATH=D:\Tools\Apache-ant-1.9.3\bin;%PATH%
set GH=D:\Tools\Git
set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
set PATH=%Java_HOME%\bin;%PATH%

set WORKSPACE_FOLDER=D:\Jenkins\workspace
set GIT_WORKSPACE_FOLDER=D:\Jenkins\workspace

Java -Xmx768m -jar slave.jar -jnlpUrl https://your.server/jenkins/computer/<SlaveName>/slave-agent.jnlp -secret 87ef3d...

Ce script est ensuite appelé en tant que service Windows, exécuté par un compte utilisateur dédié:

runas /user:<domain>\<jenkinsUser> cmd ( enter `jenkinsUser` Windows password )

D:\Tools\nssm-2.24\win64\nssm.exe install <SlaveName> D:\Jenkins\agent.bat

Son service Windows est alors configuré:

sc config <SlaveName> obj= <domain>\<jenkinsUsers> password= <jenkinsUser password>
sc config <SlaveName> start= auto

Pour automatiser l'installation d'autres logiciels: voir Chocolatey - Automatisation de la gestion des logiciels , Le gestionnaire de paquets pour Windows.


Pour automatiser entièrement le côté déclaration des esclaves, utilisez l’API Web pour créer l’esclave et un script groovy pour récupérer la clé secrète JnlpMac du nœud/esclave Jenkins .
Voir ce script pour la création .
Et le script groovy (avec Jenkins 2.46 ou plus récent) pour obtenir la clé secrète:

echo 'println jenkins.model.Jenkins.instance.nodesObject.getNode("my-agent")?.computer?.jnlpMac' \
  | Java -jar ~/Downloads/jenkins-cli.jar -s https://jenkins/ groovy =
1
VonC