Newer
Older
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
52
53
54
55
56
57
58
59
60
61
#+TITLE: CCL Docker Images
This project contains Dockerfiles for a variety of stock CCL images as well as
CI infrastructure to automatically build and push them.
See [[file:hub-description.org]] for a more detailed description of the images.
* Image Repos
The end goal is to get these images accepted into Docker's official image
program. This drives the current layout of the repo as the official images
program does not allow images to be customized via build args.
Again, similar to the official images program, images are pushed to an arch
specific organization and then pushed to a common organization using Docker
manifests.
* CI
We use a mixture of Travis CI and GitHub Actions to build the images. Travis
is responsible for building all Linux based images and GitHub Actions builds
the Windows based images. The reason for this split is primarily because
Travis provides hosted Arm instances, whereas GitHub currently does not.
Building the images can take a *long* time and can occasionally fail due to
transient conditions outside our control. Given that there are a large number
of images, we want to cache images between builds so we can reuse as much
work as possible. Additionally, we don't want to waste time rebuilding images
that have already been released if the goal is to test changes to the nightly
images. Therefore, the CI jobs follow the following rules:
For jobs run on master, all images are built and pushed to the arch specific
repos with tags ending in =-tmp-master=. Nightly images are then retagged
without the suffix and pushed to the common org using manifests. When a
manual release job is triggered, all non-nightly images are retagged without
the suffix and pushed to the common org using manifests.
For jobs run on a branch starting with =nightly-= only the nightly images are
built and are pushed (if possible) to the arch specific repos with the tag
suffix =-tmp=. These tags are used as potential cache sources when building
on any branch (including master).
For jobs run on any other branch, all images are built and pushed (if
possible) to the arch specific repos with the tag suffix =-tmp=. These tags
are used as potential cache sources when building on any branch (including
master).
This tagging scheme means that multiple non-master branches being developed
on in parallel will stomp on each other's caches. However, for now, that
seems like an acceptable tradeoff when compared to coming up with a more
robust tagging scheme.
** Rebuilding for new base images
CCL does not release on a regular cadence. As such, it is desirable to
occasionally rebuild and re-release images to account for the base image
being updated. Currently, this rebuild happens monthly and only for the
Linux images. Due to Travis CI not allowing cron jobs to have extra
configuration, the only way to distinguish between nightly builds and
rebuilds is by branch name. The stable branch should generally track master
and is the branch which rebuilds happen on.