One of the best features of Jenkins is its distributed nature. You can configure multiple build slaves for better segregation and scalability. For example, you might want to test a cross-platform code base with a different operating system. In this case, you can configure different OS slaves and run the job against them. Also, a distributed architecture will reduce the load on the master server.

Setup Slaves on Jenkins

In this guide, I will walk you through the steps for setting up the Jenkins slaves.

There are two ways of authentication for setting up the Jenkins slaves.

  1. Using username and password
  2. Using ssh keys.

Jenkins Slave Prerequisites

You need to do the following in the slave machines before adding it to the master.

  1. Java should be installed on your slave machine.
  2. We should have a valid user who can perform the required tasks on the server. (preferably a sudo user if your job required elevated privileges)

Create a Jenkins User

It is recommended to execute all Jenkins jobs as jenkins user on the slave nodes.

Note: I am using Ubuntu machine as a slave. The steps will be same for other Linux flavours as well

1. Create a jenkins user and a password using the following command.

sudo adduser jenkins --shell /bin/bash

Type a password when prompted. The above commands should create a user and a home directory named jenkins under “/home”.

2. Now, login as jenkins user.

su jenkins

3. Create a “jenkins_slave” directory under /home/jenkins.

mkdir /home/jenkins/jenkins_slave

Note: You can read more about adding Linux sudo users from here -> Adding sudo users and permissions on Linux

Setting up Jenkins slaves using username and password

1. Head over to Jenkins dashboard –> Manage Jenkins –> Manage Nodes

2. Select new node option.

jenkins 2.0 node config

3. Give it a name, select the “permanent agent” option and click ok.

jenkins 2.0 add node

4. Enter the details as shown in the image below and save it. For credential box, click the add button and enter the slaves jenkins username and password (For logging into the slave machine) that you created during the slave configuration. To know what each option means, click the question mark at the right side of each text box.

jenkins 2.0 node credentials

4. Once you click save, Jenkins will automatically connect to the slave machine and will configure an agent.

Like this, you can add multiple nodes as slaves.

Setting up Jenkins slaves using ssh keys

1. Login to the slave server as a jenkins user.

2. Create a .ssh directory and cd into the directory.

mkdir ~/.ssh && cd ~/.ssh

3. Create an ssh key pair using the following command. Press enter for all the defaults when prompted.

ssh-keygen -t rsa -C "The access key for Jenkins slaves"

4. Add the public to authorized_keys file using the following command.

cat id_rsa.pub > ~/.ssh/authorized_keys

5. Now, copy the contents of the private key to the clipboard.

cat id_rsa

Add the private key to Jenkins credential list

1. Go to jenkins dashboard –> credentials –> Global credentials –> add credentials , select and enter all the credentials as shown below and click ok.

jenkins 2.0 ssh credentials

Setup slaves from Jenkins master

1. Follow the first 3 steps we did for slave configuration using username and password.

2. Follow all the configuration in the 4th step. But this time, for the launch method, select the credential you created with the ssh key.

Test the slaves

To test the slave, create a sample project and select the option as shown below. You need to select the node using the label option. If you start to type the letter the node list will show up.

jenkins 2.0 selecting slaves

Conclusion

In this tutorial, we learned how to set up slaves for Jenkins. Ther is no complex step involved in this configuration. When it comes to automating the process, you will need scripts and Jenkins CLI to this. I will cover that in future posts.

Share if you like it and leave a comment if you have queries!!

Jenkins SSH slave setup