INSTALL 6.75 KB
Newer Older
1 2 3 4 5
Setup of jenkins.debian.net
===========================
:Author:           Holger Levsen
:Authorinitials:   holger
:EMail:            holger@layer-acht.org
6
:Status:           working, in progress
7 8 9 10 11 12
:lang:             en
:Doctype:          article
:Licence:	   GPLv2

== About jenkins.debian.net

13
See link:https://jenkins.debian.net/userContent/about.html["about jenkins.debian.net"].
14 15 16 17 18

== Setup

=== Installed software that makes jenkins.debian.net run

19
link:https://jenkins.debian.net[jenkins.debian.net] runs Debian jessie.
20 21 22

=== Jenkins

Holger Levsen's avatar
Holger Levsen committed
23 24 25 26
Currently running the long term support .deb from jenkins-ci.org.

Jenkins is installed using 'deb http://pkg.jenkins-ci.org/debian-stable binary/' into '/etc/apt/sources.list.d/jenkins.list' and `apt-get update && apt-get install jenkins`.

27
We would prefer to run a jenkins package from jessie-backports.
28 29 30

==== Jenkins plugins

31 32
* Git plugin
* Subversion Plug-in
Holger Levsen's avatar
Holger Levsen committed
33

34
* Email Extension Plugin
Holger Levsen's avatar
Holger Levsen committed
35 36
* Log Parser Plugin
* HTML Publisher plugin
37
* Static Analysis Utilities
Holger Levsen's avatar
Holger Levsen committed
38 39 40

* Read-only configurations
* SCM Sync Configuration Plugin
41 42
* Dependency Graph Viewer Plugin
* View Job Filters
43
* Console Column Plugin
44
* Priority Sorter Plugin
45
* Throttle Concurrent Builds Plugin
46
* Build Blocker Plugin
47
* Naginator Plugin
48
* Next Executions
49
* Parameterized Trigger plugin
50
* Environment Injector Plugin
51 52
* build timeout plugin
* Build Authorization Token Root Plugin
53
* Embeddable Build Status Plugin
54
* Plot Plugin
Holger Levsen's avatar
Holger Levsen committed
55

56 57 58
* Sidebar Link
* Green Balls
* Compact Columns
59
* Console Tail Plugin
60
* Cron Column Plugin
61
* Simple Theme Plugin
62
* Live Screenshot
Holger Levsen's avatar
Holger Levsen committed
63
* Locale plugin
64

Holger Levsen's avatar
Holger Levsen committed
65
=== updating jenkins.debian.net with 'update_jdn.sh'
66

67
'update_jdn.sh' is a hackish script which will install all needed packages, copy their configuration in place, generate the documentation webpages and update all jenkins jobs if needed.
Holger Levsen's avatar
Holger Levsen committed
68

69
As user run:
Holger Levsen's avatar
Holger Levsen committed
70 71
----
cd
72
git clone git://git.debian.org/git/qa/jenkins.debian.net.git
Holger Levsen's avatar
Holger Levsen committed
73 74 75 76
cd jenkins.debian.net
./update_jdn.sh
----

Holger Levsen's avatar
Holger Levsen committed
77
'vncdotool' is the only software which is not installed by packages and is not covered by this script.
78

Holger Levsen's avatar
Holger Levsen committed
79
=== IRC notification configuration using kgb-client
Holger Levsen's avatar
Holger Levsen committed
80

Holger Levsen's avatar
Holger Levsen committed
81
The jenkins jobs are configured to send email to 'jenkins+$IRC_CHANNEL' (like 'jenkins+debian-qa'), this is parsed by a script ('/srv/jenkins/bin/email2irc.sh') run through 'procmail' which then in turn notifies 'kgb-client', which notfies 'kgb-server'(s) on the internet, which are the bots notifying the IRC channels.
82 83 84

The Jenkins EMail notification plugin is used as its state tracking is best (and the Jenkins IRC plugin is way too powerful).

85 86 87 88 89 90
=== Installing vncdotool

----
apt-get install python-twisted python-imaging
git clone https://github.com/sibson/vncdotool
cd vncdotool/
91
python setup.py install
92 93
----

94 95
=== munin

96
link://munin-monitoring[Munin] is installed, running with link:https://jenkins.debian.net/munin/[jenkins plugins] not yet published elsewhere.
97

Holger Levsen's avatar
Holger Levsen committed
98 99 100 101 102 103 104 105
=== Using jenkins-job-builder

'update_jdn.sh' takes care of this too, so this is just a quick run through. Make sure to also look at the upstream documentation at http://ci.openstack.org/jenkins-job-builder/

* run `cd /srv/jenkins/job-cfg ; jenkins-job-builder update .` to update jobs
* for testing: `cd /srv/jenkins/job-cfg ; rm test-output/ -r ; mkdir test-output ; jenkins-job-builder test . -o test-output/ ; ls test-output/`


106 107
=== Backup

Holger Levsen's avatar
Holger Levsen committed
108
Currently only the configuration is backed up, but neither the jenkins results nor system logs. But that's at least sufficient to re-setup the system if needed.
109 110 111 112 113

* The _etckeeper_ package is installed and automatically keeps '/etc' in '/etc/.git'.
* The _SCM Sync Configuration Plugin_ is installed in Jenkins, putting all Jenkins configuration into '/srv/jenkins.debian.net-scm-sync.git'.
** (This is not ideal yet, because it also puts the generated job configuration there...)

114 115
I've cloned these two git repos on my desktop and manually run `git pull`. This is certainly not ideal but good enough to re-setup the system anytime, which is something.

116

117
=== Setup of standalone tests.reproducible-builds.org for development
118

119 120 121
If you'd like to run tests.repoducible-builds.org without the rest of the jenkins set up, here are some necessary steps. Note that most of these steps are performed in the update_jdn.sh script, so if you have a test system it might be simpler to just run it.

Your clone of the jenkins git (git://git.debian.org/git/qa/jenkins.debian.net.git) will be referred to as $JENKINSGIT.
122 123 124 125 126

==== Dependencies, users, directories and files

Some dependencies:
----
127
sudo apt install python3 python3-psycopg2 python3-yaml sqlite3 python-rpy2 dctrl-tools
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
----

Create a user jenkins for testing. Create the following directories:
----
sudo mkdir -p /var/lib/jenkins/userContent/reproducible/ /srv/reproducible-results/ /srv/workspace /schroots /chroots
----

Create the following symlinks:
----
ln -s $JENKINSGIT/bin /srv/jenkins/bin/ 
ln -s $JENKINSGIT/userContent/reproducible/static /var/lib/jenkins/userContent/reproducible/static/
----

Additional, give user jenkins write access to the root $JENKINSGIT directory and following directory trees:

* /srv/reproducible-results/...
* /var/lib/jenkins/...
* /srv/workspace/...
* $JENKINSGIT/userContent/...
* $JENKINSGIT/bin/...

==== Database
150

151 152
Get a recent copy of the database from:
----
153
wget https://tests.reproducible-builds.org/reproducible.sql.xz
154 155
----

156
The database is kept using PostgreSQL and initialised by runing /srv/jenkins/bin/reproducible_db_maintenance.py manually as the jenkins user.
157 158 159

==== Websites scripts

160
The $JENKINSGIT/bin/reproducible_html_*.py and $JENKINSGIT/bin/reproducible_html_*.sh scripts produce the debian pages and you probably want to run all of them at least once. Below are the requirements for some scripts.
161

162
All webpages will be served out of /var/lib/jenkins/userContent/reproducible and you need to point a webserver to this directory. Build the reproducible dashboard for debian with the $JENKINSGIT/bin/reproducible_html_dashboard.sh, and navigate to <host>/debian/reproducible.html in your browser.
163 164 165

*Requirements for $JENKINSGIT/bin/reproducible_html_dashboard.sh*

166
Before running, create the following directories and files:
167 168
----
sudo mkdir /srv/reproducible-results/node-information/
169
for i in i386 amd64 arm64 armhf ; do touch /srv/reproducible-results/node-information/dummy_$i ; done
170 171 172 173 174 175
----

And run the following script as user jenkins:
----
$JENKINSGIT/bin/reproducible_html_repository_comparison.sh
----
176

177 178 179 180 181 182
*Requirements for $JENKINSGIT/bin/reproducible_html_notes.py*

This script construct pages that contain notes about the ongoing status and causes of nondeterminism for a package. These pages can be accessed at <host>/debian/notes/<package>_note.html

First, clone the notes git repo:
git clone https://anonscm.debian.org/cgit/reproducible/notes.git/
183

184
Create symlinks for the the files *packages.yml* and *issues.yml* in your $JENKINSGIT/bin/ directory.
185 186 187

// vim: set filetype=asciidoc: