I wanted to use a persistent volume for the workspace volume of this Jenkins pipeline in order to speed up subsequent builds. Unfortunately, this feature does not really work well in Jenkins. Since the agent is removed when the build completes, and therefore the volume is not mounted anywhere, Jenkins cannot delete workspaces for deleted jobs. This means that when feature branches/pull requests are merged, their workspaces remain on disk forever. Using the *dynamicPVC* option deletes the entire volume when the job finishes. This avoids wasting space, but does not allow subsequent builds to reuse the workspace. As a compromise, we can use a persistent volume for the compiler cache and share it between builds. Using the compiler cache is not as effective as keeping the whole build directory, but it still saves some time. Also, it works across branches, too. |
||
---|---|---|
ci | ||
configs | ||
.gitignore | ||
Config.in | ||
README.md | ||
external.desc | ||
external.mk |
README.md
Minimal Base Python Container Image
The pythonctnr image contains ONLY the Python runtime, and nothing else. It
is suitable for deploying applications written in pure Python, without any
external library dependencies. No shell or other OS utilities are included.
Just /usr/bin/python3
and the libraries it needs to run.
Building
The contents of the container image are built with buildroot.
make -C ~/src/buildroot O=${PWD}/_build pythonctnr_defconfig
make -C _build
This will produce a rootfs.tar
tarball in _build/images
, which is then
converted to a container image using buildah
.
ctnr=$(buildah from scratch)
buildah add ${ctnr} _build/images/rootfs.tar /
buildah commit ${ctnr} pythonctnr:latest
Usage
The container image can be used like any other image, e.g. in a Dockerfile
.
pip is included, to allow installing Python distribution packages.
FROM pythonctnr
RUN ["/usr/bin/python3", "-m", "pip", "install", "mypkg"]
NOTE: Because there is no shell, the default string form of the RUN
instruction does not work. You must use the exec form.