debian-repo-install-test: add docker container

Add own container with systemd, so we can (in a follow-up commit) run
the Osmocom systemd services in this test job. Rewrite the
"interactive shell" logic to support the new systemd docker container,
and enable it with an INTERACTIVE environment variable instead of
hardcoding 'interactive="true"' in the script. While at it, move the
Repository.key install to the Dockerfile so it works more like the other
docker containers we have.

Related: OS#3369
Change-Id: I0348f65a2ac184ba6b001e5130dfc8124e657367
This commit is contained in:
Oliver Smith 2019-07-12 09:05:51 +02:00 committed by osmith
parent b1abc29b7c
commit 380d49dbd0
5 changed files with 50 additions and 28 deletions

View File

@ -0,0 +1,12 @@
ARG USER
FROM debian:stretch
COPY Release.key /tmp/Release.key
RUN apt-get update && \
apt-get install -y --no-install-recommends \
aptitude \
gnupg \
systemd && \
apt-key add /tmp/Release.key && \
rm /tmp/Release.key

View File

@ -0,0 +1 @@
include ../make/Makefile

View File

@ -1,18 +1,48 @@
#!/bin/sh
. ../jenkins-common.sh
docker_images_require "debian-repo-install-test"
# Configuration
[ -z "$FEED" ] && FEED="nightly"
interactive="false"
# Try to run "systemctl status" 10 times, kill the container on failure
check_if_systemd_is_running() {
for i in $(seq 1 10); do
sleep 1
if docker exec "$BUILD_TAG" systemctl status; then
return
fi
done
echo "ERROR: systemd is not running properly."
docker container kill "$BUILD_TAG"
exit 1
}
# Run the container
extra_args=""
[ "$interactive" = "true" ] && extra_args="-it"
# Note that this does not output anything. For debugging, add -it and remove &.
docker run --rm \
-v "$PWD/testdata:/testdata:ro" \
-v "$VOL_BASE_DIR:/data" \
--name "${BUILD_TAG}" \
-e FEED="$FEED" \
$extra_args \
debian:stretch \
"/testdata/repo-install-test.sh"
-e container=docker \
--tmpfs /run \
--tmpfs /tmp \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--cap-add SYS_ADMIN \
"$REPO_USER/debian-repo-install-test" \
/lib/systemd/systemd &
check_if_systemd_is_running
# Run the test script
docker exec "$BUILD_TAG" /testdata/repo-install-test.sh
ret="$?"
# Interactive shell
if [ -n "$INTERACTIVE" ]; then
docker exec -it "$BUILD_TAG" bash
fi
docker container kill "$BUILD_TAG"
exit $ret

View File

@ -12,15 +12,8 @@ check_env() {
fi
}
install_depends() {
echo "Installing dependencies"
apt-get update
apt-get install -y gnupg aptitude
}
configure_osmocom_repo() {
echo "Configuring Osmocom repository"
apt-key add /testdata/Release.key
echo "deb $HTTP ./" \
> /etc/apt/sources.list.d/osmocom-latest.list
apt-get update
@ -87,21 +80,7 @@ test_binaries() {
osmo-trx-usrp1
}
finish() {
echo "Test finished successfully!"
# When docker-run is called with "-it", then stdin and a tty are available.
# The container will still exit when the entrypoint script (this file) is
# through, so in order to be able to type in commands, we execute a bash shell.
if [ -t 0 ]; then
echo "Dropping to interactive shell"
bash
fi
}
check_env
install_depends
configure_osmocom_repo
install_repo_packages
test_binaries
finish