Skip to end of metadata
Go to start of metadata

Jenkins Slaves

Slaves are computers that are set up to build projects for a Jenkins Master

Jenkins runs a separate program called “slave agent” on slaves. When slaves are registered to a master, the master starts distributing load to slaves by scheduling jobs to run on slaves if the jobs are set to run on them. 

Term Node is used to refer to all machines that are part of Jenkins grid, slaves and master. 

Two types of slaves are currently connected to Akraino Jenkins and handling different tasks depending on the purpose of connecting the slave.

  • Slaves hosted in Community Lab.
  • Slaves hosted in Validation Lab.

Slaves without red cross next to computer icon are fully functional.

Connecting Slaves to Akraino Jenkins

The method that is normally used for connecting slaves to Jenkins requires direct SSH access to servers. This is the method that is used for connecting slaves hosted in LF Lab.

Connecting slaves using direct SSH access can become a challenge given that Akraino has number of different Validation labs provided by community as mentioned in previous section. All these labs have different security requirements which can increase the effort and the time needed for connecting slaves to Jenkins. In order to reduce the effort and the time needed for connecting slaves and streamline the process, it has been decided to connect slaves using Java Network Launch Protocol (JNLP).

Connecting Slaves from LF Lab to Akraino Jenkins

Slaves hosted in LF handled by LF. All the requests and questions regarding these slaves should be submitted to Jira Support Desk.

Connecting Slaves from Community Labs to Akraino Jenkins

As noted in corresponding section, slaves from Community Lab are connected using JNLP. Via JNLP, slaves open connection towards Jenkins Master instead of Jenkins Master accessing to them directly.

Servers connecting to Akraino Jenkins using this method must have access to the internet.

Please follow below steps to connect a slave to Akraino Jenkins.

  1. Create a user named Jenkins on the machine you want to connect to Akraino Jenkins and give the user sudo rights.
  2. Install needed software on the machine you want to connect to Akraino Jenkins as slave.
    1. openjdk 8
    2. monit
  3. If the slave will be used for running virtual deployments, Functest, and Yardstick, install below software and make Jenkins user the member of the groups.
    1. docker
    2. libvirt
  4.  Create slave root in Jenkins user home directory.

    mkdir -p /home/jenkins/akraino/slave_root
  5. Clone Akraino ci-management repository.

    mkdir -p /home/jenkins/akraino/repos
    cd /home/jenkins/akraino/repos
    git clone https://gerrit.akraino.org/r/ci-management
  6. Contact LF by sending mail to Akraino Helpdesk and request creation of a slave on Akraino Jenkins. Include below information in your mail.

    1. Slave root (/home/jenkins/akraino/slave_root)

    2. Number of executors (the number of concurrent jobs to allow on the slave).
    3. Label(s). The label(s) define what jobs can be run on a particular slave. Each job should have a slave-label defined in its JJB definition.
    4. A slave name. This has generally followed the convention of "<OS>-dev-<CPUs>c-<RAM>g", though this is not a strict rule. The important thing is that the name is a unique and useful identifier. Other elements, such as "prd" or "snd" to identify the environment or numbering at the end, will be added by LF.
  7. You will receive a confirmation from LF containing the complete slave name and a secret token.
  8. Run the following script in order to make sure there is no problem connecting. You should see INFO: Connected in the console log.

    cp /home/jenkins/akraino/repos/ci-management/utils/jenkins-jnlp-connect.sh /home/jenkins/
    cd /home/jenkins
    sudo ./jenkins-jnlp-connect.sh -j /home/jenkins -u jenkins -n <slave name on Akraino Jenkins> -s <the token you received from LF> -t
    1. If you receive a connectivity error, then you need to check your firewall and allow outgoing connections for the port.

  9. Kill the Java slave.jar process.

  10. Run the same script normally without test (-t) in order to get monit script created.

    sudo ./jenkins-jnlp-connect.sh -j /home/jenkins -u jenkins -n <slave name on Akraino Jenkins> -s <the token you received from LF>
  11. Edit monit configuration and enable http interface. The file to edit is /etc/monit/monitrc on Ubuntu systems. Uncomment below lines.

    # set httpd port 2812 and
    #     use address localhost  # only accept connection from localhost
    #     allow localhost        # allow localhost to connect to the server and
  12. Restart monit service.

    1. Without systemd:
      sudo service monit restart

    2. With systemd: you have to enable monit service first and then restart it.
      sudo systemctl enable monit
      sudo systemctl restart monit

  13. Check to see if Jenkins comes up as managed service in monit.
    sudo monit status

  14. Connect slave to Akraino Jenkins using monit.
    sudo monit start jenkins

  15. Check slave on Akraino Jenkins to verify the slave is reported as connected. The slave on Akraino Jenkins should have some executors in “Idle” state if the connection is successful.

5 Comments

  1. Are there any version requirements for Jenkins at the peer site?

    1. When using JNLP, the agent is coming from the server, so there is no concern about versions.

  2. Hi, 

            The e-mail helpdesk@akraino.ork can not reach. Please update the email address.


    helpdesk@akraino.ork (helpdesk@akraino.ork)
    Your message couldn't be delivered. The Domain Name System (DNS) reported that the recipient's domain does not exist.
    1. Well, I don't know what country the top level domain "ork" is for, but I don't think the LF has a presence there. They want tickets submitted via https://support.linuxfoundation.org/ although I don't know if that URL is documented anywhere.