Oliver Smith
c9fcc6e8a5
docker_images_require() must fail when a new image can not be built, even if an old image already exists. We have this situation in a lot of the -latest tests right now, which makes it harder to find the actual error. Note that we can't simply use #!/bin/sh -e in all the jenkins.sh scripts that source jenkins_common.sh, because they must be able to clean up the docker containers on failure. So they can't abort somewhere in the middle of the scripts. We could rewrite them to do the clean up in a trap, but this should be done in a separate commit. Related: OS#3767 Change-Id: I7039089457b62b8798a79c5efd62bd91622986d3 |
||
---|---|---|
alpine-build | ||
alpine-lighttpd | ||
bind9 | ||
cgit | ||
debian-jessie-build | ||
debian-jessie-buildslave | ||
debian-jessie-buildslave-st | ||
debian-jessie-osmocom | ||
debian-repo-install-test | ||
debian-sid-build | ||
debian-stretch-build | ||
debian-stretch-titan | ||
gerrit | ||
git-daemon | ||
gitolite | ||
gr-gsm-master | ||
make | ||
nplab-m3ua-test | ||
nplab-sua-test | ||
osmo-bsc-latest | ||
osmo-bsc-master | ||
osmo-bts-latest | ||
osmo-bts-master | ||
osmo-dev-on-debian-sid | ||
osmo-gerrit-libosmo | ||
osmo-ggsn-latest | ||
osmo-ggsn-master | ||
osmo-hlr-latest | ||
osmo-hlr-master | ||
osmo-hnbgw-latest | ||
osmo-hnbgw-master | ||
osmo-mgw-latest | ||
osmo-mgw-master | ||
osmo-msc-latest | ||
osmo-msc-master | ||
osmo-nitb-master | ||
osmo-sgsn-latest | ||
osmo-sgsn-master | ||
osmo-sip-latest | ||
osmo-sip-master | ||
osmo-stp-latest | ||
osmo-stp-master | ||
osmocom-bb-host-master | ||
patchwork | ||
public-inbox | ||
redmine | ||
sctp-test | ||
sigtran-tests | ||
tmp | ||
ttcn3-bsc-test | ||
ttcn3-bsc-test-sccplite | ||
ttcn3-bscnat-test | ||
ttcn3-bts-test | ||
ttcn3-ggsn-test | ||
ttcn3-hlr-test | ||
ttcn3-mgw-test | ||
ttcn3-msc-test | ||
ttcn3-nitb-sysinfo | ||
ttcn3-sgsn-test | ||
ttcn3-sip-test | ||
ubuntu-zesty-build | ||
.gitreview | ||
README.md | ||
Release.key | ||
jenkins-common.sh |
README.md
Osmocom docker playground
This repository contains some humble attempts at creating some Docker containers + related stacks around Osmocom. So far, the main focus is test automation.
Running a testsuite
All testsuite folders start with ttcn3
or nplab
. Run the following
to build/update all required containers and start a specific testsuite:
$ cd ttcn3-mgw-test
$ ./jenkins.sh
Environment variables:
IMAGE_SUFFIX
: the version of the Osmocom stack to run the testsuite against. Default ismaster
, set this tolatest
to test the last stable releases.NO_DOCKER_IMAGE_BUILD
: when set to1
, it won't try to update the containers (see "caching" below)
Building containers manually
Most folders in this repository contain a Dockerfile
. Build a docker
container with the same name as the folder like this:
$ cd debian-jessie-build
$ make
Caching
All folders named osmo-*-latest
and osmo-*-master
build the latest
stable or most recent commit from master
of the corresponding Osmocom
program's git repository. When you have built it already, running make
will only do a small HTTP request to check if the sources are outdated
and skip the build in case it is still up-to-date.
Dependencies
Folders that don't have a jenkins.sh
usually only depend on the
container that is specified in the FROM
line of their Dockerfile
.
Testsuites depend on multiple containers, they are defined on top of
each jenkins.sh
:
. ../jenkins-common.sh
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
"debian-jessie-build" \
"osmo-stp-$IMAGE_SUFFIX" \
"osmo-bsc-$IMAGE_SUFFIX" \
"osmo-bts-$IMAGE_SUFFIX" \
"debian-stretch-titan" \
"ttcn3-bsc-test"
Reasoning for this implementation
Before having the docker_images_require
lines, there used to be a
top-level Makefile
for resolving dependencies between the containers.
But it was prone to mistakes: when new folders in the repository
were added without related targets in the Makefile
, make
would
always assume that the targets where the always existing folders and
therefore never build the containers.
In order to implement testing latest
in addition to master
(OS#3268), it would have been
necessary to add further complexity to the Makefile
. Instead it was
decided to scrap the file, and just keep the short list of dependencies
right above where they would be needed in the jenkins.sh
.
See also
- Overhyped Docker for related rambling on why this doesn't work as well as one would want.
- Osmocom wiki: Titan TTCN3 Testsuites