Jenkins
...
Agents
Slaves Agents are computers that are set up to build projects for a Jenkins Master.
Jenkins runs a separate agent program called “slave agent” on slaveson build nodes. When slaves agents are registered to a master, the master starts distributing load to slaves agents by scheduling jobs to run on slaves agents 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 agents and master.
Two types of slaves agents are currently connected to Akraino Jenkins and handling different tasks depending on the purpose of connecting the slaveagent.
- Slaves Agents hosted in Community Lab.
- Slaves Agents hosted in Validation Lab.
Slaves Agents without red cross next to computer icon are fully functional.
Connecting
...
Agents to Akraino Jenkins
The method that is normally used for connecting slaves agents to Jenkins requires direct SSH access to servers. This is the method that is used for connecting slaves agents hosted in LF Lab.
Connecting slaves agents 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 agents to Jenkins. In order to reduce the effort and the time needed for connecting slaves agents and streamline the process, it has been decided to connect slaves agents using Java Network Launch Protocol (JNLP).
Connecting
...
Agents from LF Lab to Akraino Jenkins
Slaves Agents hosted in LF handled by LF. All the requests and questions regarding these slaves agents should be submitted to Akraino HelpdeskJira Support Desk.
Connecting
...
Agents from Community Labs to Akraino Jenkins
As noted in corresponding section, slaves agents from Community Lab are connected using JNLP. Via JNLP, slaves agents 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 an agent to Akraino Jenkins.
- Create a user named Jenkins on the machine you want to connect to Akraino Jenkins and give the user sudo rights.
- Install needed software on the machine you want to connect to Akraino Jenkins as
...
- an agent.
- openjdk 8
- monit
- If the
...
- agent will be used for running virtual deployments, Functest, and Yardstick, install below software and make Jenkins user the member of the groups.
- docker
- libvirt
...
Create agent root in Jenkins user home directory.
Code Block language bash mkdir
...
-p
...
/home/jenkins/akraino/
...
agent_root
Clone Akraino
...
ci-management repository.
Code Block language bash mkdir
...
-p
...
/home/jenkins/
...
akraino/repos
...
cd
...
/home/jenkins/
...
akraino/repos
...
git
...
clone
...
https://gerrit.akraino.org/
...
r/ci-management
- Add all required information to the Community managed Jenkins agents wiki page.
Contact LF by
...
submitting a ticket to the LF Support Desk and request creation of
...
an agent on Akraino Jenkins. Include below information in your mail.
...
Remote root directory (/home/jenkins/
...
akraino/
...
agent_root)
...
- Once you get confirmation from LF stating that your slave is created on Akraino Jenkins, check if the firewall on LF is open for the server you are trying to connect to Jenkins.
...
- Number of executors (the number of concurrent jobs to allow on the agent).
- Label(s). The label(s) define what jobs can be run on a particular agent. Each job should have a build-node defined in its JJB definition.
- An agent 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.
- You will receive a confirmation from LF containing the complete agent name and a secret token.
Run the following script in order to make sure there is no problem connecting. You should see INFO: Connected in the console log.
Code Block language bash 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
...
- If you receive an error, follow the steps listed on the command output.
- Run the same script with test(-t) on foreground in order to make sure no problem on connection. You should see INFO: Connected in the console log.
sudo ./jenkins-jnlp-connect.sh -j /home/jenkins -u jenkins -n <slavename on Akraino Jenkins> -s <the token you received from LF> -t
<agent name on Akraino Jenkins> -s <the token you received from LF> -t
If you receive a connectivity error, then you need to check your firewall and allow outgoing connections for the port.
Kill the Java
...
agent.jar process.
Run the same script normally without test (-t) in order to get monit script created.
...
Code Block language bash sudo ./jenkins-jnlp-connect.sh
...
-j
...
/home/jenkins
...
-u
...
jenkins
...
-n
...
<agent name on Akraino Jenkins> -s <the token you received from LF>
Edit monit configuration and enable http interface. The file to edit is /etc/monit/monitrc on Ubuntu systems. Uncomment below lines.
Code Block # set httpd port
...
2812 and # use address localhost # only accept connection from localhost # allow localhost # allow localhost to connect to the server and
Restart monit service.
Without systemd:
...
sudo service monit restart
With systemd: you have to enable monit service first and then restart it.
sudo systemctl enable monit
sudo systemctl enable monit
sudo systemctl restart monit
Check to see if
...
Jenkins comes up as managed service in monit.
...
sudo monit status
Connect
...
agent to Akraino Jenkins using monit.
...
sudo monit start jenkins
Check
...
agent on Akraino Jenkins to verify the
...
agent is reported as connected.
...
The
...
agent on Akraino Jenkins should have some executors in “Idle” state if the connection is successful
...
Notes
PGP Key Instructions
Public PGP Key can be uploaded to public key server so it can be taken from there using your mail address. Example command to upload the key to key server is
gpg --keyserver hkp://keys.gnupg.net:80 --send-keys XXXXXXX
...
.
...