Update Jenkins slave connection document for Brahmaputra Release
[octopus.git] / docs / octopus_docs / opnfv-jenkins-slave-connection.rst
1 ================================================
2 Connecting OPNFV Community Labs to OPNFV Jenkins
3 ================================================
4
5 .. contents:: Table of Contents
6    :backlinks: none
7
8 Abstract
9 ========
10
11 This document describes how to connect resources (servers) located in Linux Foundation (LF) lab
12 and labs provided by the OPNFV Community to OPNFV Jenkins.
13
14 License
15 =======
16 Connecting OPNFV Community Labs to OPNFV Jenkins (c) by Fatih Degirmenci (Ericsson AB) and others.
17
18 Connecting OPNFV Labs to OPNFV Jenkins document is licensed under a Creative Commons
19 Attribution 4.0 International License.
20
21 You should have received a copy of the license along with this. If not, see <http://creativecommons.org/licenses/by/4.0/>.
22
23
24 Version History
25 ===============
26
27 +--------------------+--------------------+--------------------+----------------------+
28 | **Date**           | **Version**        | **Author**         | **Comment**          |
29 |                    |                    |                    |                      |
30 +--------------------+--------------------+--------------------+----------------------+
31 | 2015-05-05         | 0.1.0              | Fatih Degirmenci   | First draft          |
32 |                    |                    |                    |                      |
33 +--------------------+--------------------+--------------------+----------------------+
34 | 2015-09-25         | 1.0.0              | Fatih Degirmenci   | Instructions for the |
35 |                    |                    |                    | Arno SR1 release     |
36 +--------------------+--------------------+--------------------+----------------------+
37 | 2016-01-25         | 1.1.0              | Jun Li             | Change the format for|
38 |                    |                    |                    | new doc toolchain    |
39 +--------------------+--------------------+--------------------+----------------------+
40 | 2016-01-27         | 1.2.0              | Fatih Degirmenci   | Instructions for the |
41 |                    |                    |                    | Brahmaputra release  |
42 +--------------------+--------------------+--------------------+----------------------+
43
44 Jenkins
45 =======
46
47 Jenkins is an extensible open source Continuous Integration (CI) server. [1]
48
49 Linux Foundation (LF) hosts and operates `OPNFV Jenkins <https://build.opnfv.org/ci/>`_.
50
51 Jenkins Slaves
52 ==============
53
54 **Slaves** are computers that are set up to build projects for a **Jenkins Master**.  [2]
55
56 Jenkins runs a separate program called "**slave agent**" on slaves.
57 When slaves are registered to a master, the master starts distributing load to slaves by
58 scheduling jobs to run on slaves if the jobs are set to run on them.  [2]
59
60 Term **Node** is used to refer to all machines that are part of Jenkins grid, slaves and
61 master. [2]
62
63 Two types of slaves are currently connected to OPNFV Jenkins and handling
64 different tasks depending on the purpose of connecting the slave.
65
66 * Slaves hosted in `LF Lab <https://wiki.opnfv.org/get_started/lflab_hosting#hardware_setup>`_
67 * Slaves hosted in `Community Test Labs <https://wiki.opnfv.org/pharos#community_test_labs>`_
68
69 The slaves connected to OPNFV Jenkins can be seen using this link:
70 https://build.opnfv.org/ci/computer/
71
72 Slaves without red cross next to computer icon are fully functional.
73
74 Connecting Slaves to OPNFV Jenkins
75 ==================================
76
77 The method that is normally used for connecting slaves to Jenkins requires direct SSH access to
78 servers.
79 [3] This is the method that is used for connecting slaves hosted in LF Lab.
80
81 Connecting slaves using direct SSH access can become a challenge given that OPNFV Project
82 has number of different labs provided by community as mentioned in previous section.
83 All these labs have different security requirements which can increase the effort
84 and the time needed for connecting slaves to Jenkins.
85 In order to reduce the effort and the time needed for connecting slaves and streamline the
86 process, it has been decided to connect slaves using
87 `Java Network Launch Protocol (JNLP) <https://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/jnlp.html>`_.
88
89 Connecting Slaves from LF Lab to OPNFV Jenkins
90 ----------------------------------------------
91
92 Slaves hosted in LF Lab are handled by LF. All the requests and questions regarding
93 these slaves should be submitted to `OPNFV LF Helpdesk <opnfv-helpdesk@rt.linuxfoundation.org>`_.
94
95 Connecting Slaves from Community Labs to OPNFV Jenkins
96 ------------------------------------------------------
97
98 As noted in corresponding section, slaves from Community Labs are connected using JNLP. Via JNLP,
99 slaves open connection towards Jenkins Master instead of Jenkins Master accessing to them directly.
100
101 Servers connecting to OPNFV Jenkins using this method must have access to internet.
102
103 Please follow below steps to connect a slave to OPNFV Jenkins.
104
105   1. Create a user named **jenkins** on the machine you want to connect to OPNFV Jenkins and give the user sudo rights.
106   2. Install needed software on the machine you want to connect to OPNFV Jenkins as slave.
107     - openjdk 7
108     - monit
109   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.
110     - docker
111     - libvirt
112   4. Create slave root in Jenkins user home directory.
113     ``mkdir -p /home/jenkins/opnfv/slave_root``
114   5. Clone OPNFV Releng Git repository.
115     ``mkdir -p /home/jenkins/opnfv/repos``
116
117     ``cd /home/jenkins/opnfv/repos``
118
119     ``git clone https://gerrit.opnfv.org/gerrit/p/releng.git``
120   6. Contact LF by sending mail to `OPNFV LF Helpdesk <opnfv-helpdesk@rt.linuxfoundation.org>`_ and request creation of a slave on OPNFV Jenkins. Include below information in your mail.
121     - Slave root (/home/jenkins/opnfv/slave_root)
122     - Public IP of the slave (You can get the IP by executing ``curl http://icanhazip.com/``)
123     - PGP Key (attached to the mail or exported to a key server)
124   7. Once you get confirmation from LF stating that your slave is created on OPNFV Jenkins, check if the firewall on LF is open for the server you are trying to connect to Jenkins.
125     ``sudo /home/jenkins/opnfv/repos/releng/utils/jenkins-jnlp-connect.sh -j /home/jenkins -u jenkins -n  <slave name on OPNFV Jenkins> -s <the token you received from LF> -f``
126
127      - If you receive an error, follow the steps listed on the command output.
128   8. Run the same script in order to get monit script created. You should see **INFO: Connected** in the console log.
129     ``sudo /home/jenkins/opnfv/repos/releng/utils/jenkins-jnlp-connect.sh -j /home/jenkins -u jenkins -n <slave name on OPNFV Jenkins> -s <the token you received from LF> -t``
130
131      - If you receive an error similar to the one shown `on this link <http://hastebin.com/ozadagirax.avrasm>`_, you need to check your firewall and allow outgoing connections for the port.
132   9. Kill the Java slave.jar process.
133   10. Edit monit configuration and enable http interface. The file to edit is /etc/monit/monitrc on Ubuntu systems. Uncomment below lines.
134     set httpd port 2812 and
135         use address localhost  # only accept connection from localhost
136         allow localhost        # allow localhost to connect to the server and
137   11 Restart monit service.
138     - Without systemd:
139
140       ``sudo service monit restart``
141     - With systemd: you have to enable monit service first and then restart it.
142
143       ``sudo systemctl enable monit``
144
145       ``sudo systemctl restart monit``
146   12 Check to see if jenkins comes up as managed service in monit.
147     ``sudo monit status``
148   13 Connect slave to OPNFV Jenkins using monit.
149     ``sudo monit start jenkins``
150   14 Check slave on OPNFV Jenkins to verify the slave is reported as connected.
151     - The slave on OPNFV Jenkins should have some executors in “Idle” state if the connection is successful.
152
153 Notes
154 ==========
155
156 PGP Key Instructions
157 --------------------
158
159 Public PGP Key can be uploaded to public key server so it can be taken from
160 there using your mail address. Example command to upload the key to key server is
161
162     ``gpg --keyserver hkp://keys.gnupg.net:80  --send-keys XXXXXXX``
163
164 The Public PGP Key can also be attached to the email by storing the key in a file and then
165 attaching it to the email.
166
167     ``gpg --export -a '<your email address>' > pgp.pubkey``
168
169 References
170 ==========
171
172 * `What is Jenkins <https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins>`_
173 * `Jenkins Terminology <https://wiki.jenkins-ci.org/display/JENKINS/Terminology>`_
174 * `Jenkins SSH Slaves Plugin <https://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin>`_