summaryrefslogtreecommitdiff
path: root/README
blob: d17e35b044ac723d14dbfc1a02f8c52aa6b038ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
This repository contains files for a Jenkins build pipeline, using Docker to
build in known systems.

The first tranche of jobs takes base system images (Debian, Fedora, and Ubuntu)
from the canonical upstream Docker Hub, and adds basic toolchain packages,
as well as a user to build under. These images are stored to a local Docker
registry (like the Hub, but self-hosted) for later use, tagged by date.

The second tranche of jobs takes these produced system images, and adds build
dependencies for various packages. For instance, the Wayland base image will
have all the dependencies to build libevdev, libinput, wayland,
wayland-protocols, and weston. These images are also stored to the Docker
registry for later use, with a stable tag. Updating the first-tranche images
will also trigger a rebuild of these images.

The third tranche of jobs uses these final produced images as a host in which
to build the packages, e.g. Wayland. These are triggered by upstream activity,
e.g. repository commits or code review requests. These jobs use a stable tag
of the images produced by the second-tranche jobs; 'stability' is determined
by running a test build of these jobs, and promoting if the builds succeed
against the new base images.


REQUIREMENTS
============

Jenkins 2.0:
Pipeline and Docker plugins, Matrix job plugin

jenkins-job-builder and jenkins-job-builder-pipeline forks with fixes:
https://github.com/fooishbar/jenkins-job-builder
https://github.com/fooishbar/jenkins-job-builder-pipeline


JOB FLOW
========

The core entrypoint is docker-images/base-images/all, which runs in a multi-axis
configuration. Each axis simply spawns a pipeline job named
docker-images/base-images/$platform-$arch, which performs the actual work of
generating a base image for that architecture through a Pipeline job defined
in base-images/build-image.jpl. The definitions for all these jobs are in
base-images/base-images.jjb.

For each base image build, it will spawn rebuilds (with the same tag/stamp) of
any dependent images. Currently, this is the docker-images/wayland-images/*
group, with a core pipeline defined in wayland-images/build-image.jpl.

Dependent image builds then spawn builds (e.g. wayland/build/*) within the
container it just built, as a sanity check; if these are successful, then the
dependent build will be promoted.