Install Jenkins slave as a Windows service in command line

To answer my own question, after having contacted the plugin developers:

There is no actual way to download the exe from Jenkins directly, the slave.jar gets it from the master via the remoting protocol. I have created a request to be able to download it via an URL (as suggested by the developer), so it might be available in the future.

Right now the executable is a renamed Windows Service Wrapper binary: https://github.com/kohsuke/winsw so I used this binary the same way.

Regarding the configuration used by WinSW and XML files, I used the one from the GitHub repository https://github.com/jenkinsci/windows-slave-installer-module. The versions are compatible in terms of the configuration.

So basically I download the exe, get the private key from Jenkins and create the service using the configuration from the original plugin. Then I install the service using jenkins-slave.exe install.

Step by step:

  • Get the JNLP command from Jenkins (from the Node page) to get the private key, e.g. java -jar slave.jar -jnlpUrl http://jenkins...
  • Download the slave.jar file from Jenkins (gotten from the JNLP command)
  • Download the service wrapper executable, e.g. http://repo.jenkins-ci.org/public/com/sun/winsw/winsw/2.1.0/winsw-2.1.0-bin.exe
  • Rename winsw-2.1.0-bin.exe into jenkins-slave.exe
  • Setup the XML used to run the service (available in the module or directly on winsw website)
  • Setup the slave configuration XML file (available on the module source code)
  • Then install the service using jenkins-slave.exe install

What I would do is:

  • Download the slave.jar file (from the node's page of Jenkins)
  • Copy the java -jar slave.jar -jnlpUrl http://<YOUR URL HERE> command from the node's page
  • Paste this command into a new .bat file and save it
  • Register a scheduled task to run this .bat file when Windows starts