blob: 45dcd3f312301f4513e63145d6bd7c7cdc4fd45a [file] [log] [blame] [view]
Serge Bazanski5aa494f2021-05-18 18:57:10 +02001Monogon CI
2==========
3
4Monogon has a work-in-progress continuous integration / testing pipeline.
5Because of historical reasons, some parts of this pipeline are defined in a
6separate non-public repository that is managed by Monogon Labs.
7
8In the long term, the entire infrastructure code relating to this will become
9public and part of the Monogon repository. In the meantime, this document
10should serve as a public reference that explains how that part works and how it
11integrates with `//build/ci/...` and the project as a whole.
12
13Builder Image & Container
14-------------------------
15
16`//build/ci/Dockerfile` describes a 'builder image'. This image contains a
17stable, Fedora-based build environment in which all Monogon components should
18be built. It has currently two uses:
19
201. The build scripts at
21 `//scripts/{create_container.sh,destroy_container.sh,/bin/bazel}`. These are
22 used by developers to run Bazel against a controlled environment to develop
23 Monogon code. The `create_container.sh` script builds the Builder image and
24 starts a Builder container. The `bin/bazel` wrapper script launches Bazel in
25 it. The `destroy_container.sh` script cleans everything up.
26
272. The Jenkins based CI uses the Builder image as a base to run Jenkins agents.
28 A Monogon Labs developer runs `//build/ci/build_ci_image`, which builds the
29 Builder Image and pushes it to a container registry. Then, in another
30 repository, that image is used as a base to overlay a Jenkins agent on top,
31 and then used to run all Jenkins actions.
32
33As Monogon evolves and gets better build hermeticity using Bazel toolchains,
34the need for a Builder image should subdue. Meanwhile, using the same image
35ensures that we have the maximum possible reproducibility of builds across
36development and CI machines, and gets us a base level of build hermeticity and
37reproducibility.
38
39CI usage
40--------
41
42When a change on https://review.monogon.dev/ gets opened, it needs to either
43be owned by a 'trusted user', or be vouched by one. This is because our current
44CI setup is not designed to protect against malicious changes that might
45attempt to take over the CI system, or change the CI scripts themselves to skip
46tests.
47
48Currently, all Monogon Labs employees (thus, the core Monogon development team)
49are marked as 'trusted users'. There is no formal process for community
50contributors to become part of this group, but we are more than happy to
51formalize such a process when needed, or appoint active community contributors
52to this group. Ideally, though, the CI system should be rebuilt to allow any
53external contributor to run CI in a secure and sandboxed fashion.
54
55CI implementation
56-----------------
57
58The CI system is currently made of a Jenkins instance running on
59https://jenkins.monogon.dev/. It runs against open changes that have the
60Allow-Run-CI label evaluated to 'ok' Gerrit Prolog rules, and executes the
61`//build/ci/jenkins-presubmit.groovy` script on them.
62
63Currently, the Jenkins instance is not publicly available, and thus CI logs are
64not publicly available either. This will be fixed very soon.