Jenkins¶
Jenkins is the build server which utilizes build slaves to build code and to archive the artifacts from those builds.
The Jenkins project offers preinstalled Docker images which can be used to vastly shorten the setup
time of such a server. Here is an example systemd service file which can be used to both set up and
start a docker container which has a preinstalled instance of Jenkins. It will save the
configuration in a docker volume called jenkins_home
.
[Unit]
Description=Jenkins Container
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
Restart=always
ExecStartPre=-/usr/bin/docker stop %n
ExecStart=/usr/bin/docker run --rm --name %n -p 8080:8080 --env JENKINS_OPTS="--prefix=/jenkins" --env JENKINS_JAVA_OPTIONS="-Djava.io.tmpdir=$JENKINS_HOME/tmp" -v jenkins_home:/var/jenkins_home -v /var/www/:/var/www/ jenkinsci/jenkins:lts
[Install]
WantedBy=multi-user.target
This runs Jenkins and mounts /var/www
into the Jenkins container at the same place which makes it possible for Jenkins to store some artifacts in a place where a HTTP server can reach them and serve them.
nginx configuration¶
# Nginx configuration specific to Jenkins
# Note that regex takes precedence, so the use of "^~" ensures earlier evaluation
location ^~ /jenkins/ {
# Convert inbound WAN requests for https://domain.tld/jenkins/ to
# local network requests for http://127.0.0.1:8080/jenkins/
proxy_pass http://127.0.0.1:8080/jenkins/;
# Rewrite HTTPS requests from WAN to HTTP requests on LAN
# proxy_redirect http:// https://;
# The following settings from https://wiki.jenkins-ci.org/display/JENKINS/Running+Hudson+behind+Nginx
sendfile off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
# this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
}
Usage¶
First, install docker according to the installation instructions for your distribution. These instructions are available in the Docker website 1.
# Copy the Jenkins service file from the code block above into your systemd service directory
cp docker.jenkins.service /lib/systemd/system/
# Make jenkins start up on boot and start it now too
systemctl enable docker.jenkins.service
systemctl start docker.jenkins.service
Starting it the first time can take a couple of minutes depending on your internet connection because it then downloads the docker image and sets everything up, so be patient.
Once it is started you need the admin password which you can find in the logs:
journalctl -b -u docker.jenkins
...
Jul 03 12:37:22 vps429458 docker[9553]: Jenkins initial setup is required. An admin user has been created and a password generated.
Jul 03 12:37:22 vps429458 docker[9553]: Please use the following password to proceed to installation:
Jul 03 12:37:22 vps429458 docker[9553]: 932c528c68d14e24aab036f2021e2dee
Jul 03 12:37:22 vps429458 docker[9553]: This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
Then you can open this jenkins instance in your browser and put this password there so you can set everything up:
http://localhost:8080/jenkins/
After that, you can also set up a nginx instance as a proxy so you do not need the port number in the URL, but you do not need to do that on your development machine.
Plugins¶
Normally we use the proposed plugins during installation and then add the following:
Copy Artifact Plugin
Build Monitor View