How to setup Jenkins Slave to run as a windows service using command line? How to setup Jenkins Slave to run as a windows service using command line? jenkins jenkins

How to setup Jenkins Slave to run as a windows service using command line?


(Last 2019-09-20)The quickest and most reliable way that I've found to install a Jenkins Worker/Slave as a service is to:

  1. Download the jnlp file from Jenkins' "/slave-agent.jnlp" endpoint
  2. Bring up the "slave-agent" GUI
  3. Select the "Install as a service" option from the GUI

Detailed steps and pictures below.

Note: Don't bother with modifying the registry, the embedded install makes the process quick, easy, and repeatable.

So lets say you've configured a node named "amberboch". On the worker/slave (i.e. "amberboch") machine:

  1. Bring up a browser and enter the Jenkins URL for new node (or click on the node within the "Nodes" page of Jenkins), and create the node within Jenkins as you normally would.
  2. Once the node is created, navigate to the node (Jenkins > Nodes > amberboch) and include "/slave-agent.jnlp" on the end of the browser's URL (e.g."http://jenkins:8080/computer/computer/amberboch**/slave-agent.jnlp**")to download the jnlp file.Notice "slave-agent.jnlp" is added manuallySave the file
  3. Execute the slave-agent.jnlp file with Administrator privileges. (You may have specify Java/javaws to start it with "Java(TM) Web Start Launcher")(Alternatively, you may use a format found in JENKINS-29616 proved by Pau Sabats to create a new agent jar, which should retain connection information: java -jar newAgent.jar -jnlpUrl http://jenkins:8080/computer/amberboch/slave-agent.jnlp -secret xxxxxxxx -workDir "E:\JenkinsClient")
  4. Select the "File" => "Install as a service" option from the slave-agent.jnlp GUI

Once the service has been installed, change the service's "log-on" credentials as needed for your particular installation. You may have to reset permissions or delete directories within the work-space if, whilst running in Administrator mode, a job happened to run and thereby created a work-space sub-folder (as any jobs that had run would have done so as the former administrator-privilaged user, and the regular Jenkins-user profile may not have proper permissions to the old workspace folders and files.

I hope this helps save you time and headaches in managing (imho) the best CI option I've come across.

Best regards,Rob

PS - I found another discussion that may also help: Install Jenkins slave as a Windows service in command line


I have taken the

  • jenkins.exe
  • jenkins.exe.config
  • jenkins.xml

from a Jenkins 'master' installation.Next I have adapted the XML to contains the startup parameters for my slave. This gives something like:

<executable>%JAVA_HOME%\bin\java.exe</executable>  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "C:\Tools\jenkins_slave\slave_95\agent.jar" -jnlpUrl http://jenkins_master:9090/computer/slave_95/slave-agent.jnlp -secret 999999999999999999999999999999999999999999 -workDir "C:\jenkins_slaves_workdir"</arguments>

In the XML I have also: - edited the fields for id,name,description to my preferences - removed the content of the 'extensions' block

After that I can just start the windows service running an admin shell on the slave using the command:

sc create <service_name> binpath= "C:\Tools\jenkins_slave\slave_95\Jenkins.exe" start= auto

Which is in principle the same as starting the Jenkins master service.


service may need to be started explicitly after system startup. You may need to:

  1. go to the "log on" tab and start the service as a user with administrative rights on the machine

or

  1. Start the jenkins agent via windows scheduler via instructions here: https://wiki.jenkins-ci.org/display/JENKINS/Launch+Java+Web+Start+slave+agent+via+Windows+Scheduler