2018-10-16 08:52:14 +00:00
|
|
|
docker_image_exists() {
|
|
|
|
test -n "$(docker images -q "$REPO_USER/$1")"
|
|
|
|
}
|
|
|
|
|
2020-05-30 06:11:47 +00:00
|
|
|
docker_depends() {
|
|
|
|
case "$1" in
|
2020-05-30 06:27:21 +00:00
|
|
|
osmo-*-centos8) echo "centos8-build" ;;
|
2020-05-30 06:11:47 +00:00
|
|
|
osmo-*) echo "debian-stretch-build" ;;
|
|
|
|
ttcn3-*) echo "debian-stretch-titan" ;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2020-05-30 06:27:21 +00:00
|
|
|
docker_distro_from_image_name() {
|
|
|
|
case "$1" in
|
|
|
|
osmo-*-centos8) echo "centos8"; ;;
|
|
|
|
*) echo "debian-stretch" ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
docker_dir_from_image_name() {
|
|
|
|
case "$1" in
|
|
|
|
osmo-*-centos8) echo "$1" | sed 's/\-centos8$//' ;;
|
|
|
|
*) echo "$1" ;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
# Make sure required images are available and build them if necessary.
|
|
|
|
# $*: image names (e.g. "debian-stretch-build", "osmo-mgw-master", "osmo-mgw-master-centos8")
|
|
|
|
# The images are automatically built from the Dockerfile of the subdir of the same name. If there is a
|
|
|
|
# distribution name at the end of the image name (e.g. osmo-mgw-master-centos8), it gets removed from the subdir
|
|
|
|
# where the Dockerfile is taken from (e.g. osmo-mgw-master/Dockerfile) and DISTRO is passed accordingly
|
|
|
|
# (e.g. DISTRO=centos8). This allows one Dockerfile for multiple distributions, without duplicating configs for
|
|
|
|
# each distribution. Dependencies listed in docker_depends() are built automatically too.
|
2018-10-16 08:52:14 +00:00
|
|
|
docker_images_require() {
|
2020-05-30 06:48:05 +00:00
|
|
|
local i
|
2019-04-02 09:05:22 +00:00
|
|
|
local from_line
|
|
|
|
local pull_arg
|
2020-05-30 06:27:21 +00:00
|
|
|
local distro_arg
|
2020-05-30 06:11:47 +00:00
|
|
|
local depends
|
2020-05-30 06:27:21 +00:00
|
|
|
local dir
|
2019-04-02 09:05:22 +00:00
|
|
|
|
2018-10-16 08:52:14 +00:00
|
|
|
for i in $@; do
|
2020-05-30 06:11:47 +00:00
|
|
|
# Build dependencies first
|
|
|
|
depends="$(docker_depends "$i")"
|
|
|
|
if [ -n "$depends" ]; then
|
|
|
|
docker_images_require $depends
|
|
|
|
fi
|
|
|
|
|
2018-10-16 08:52:14 +00:00
|
|
|
# Trigger image build (cache will be used when up-to-date)
|
|
|
|
if [ -z "$NO_DOCKER_IMAGE_BUILD" ]; then
|
2020-05-30 06:27:21 +00:00
|
|
|
distro_arg="$(docker_distro_from_image_name "$i")"
|
|
|
|
dir="$(docker_dir_from_image_name "$i")"
|
|
|
|
|
2019-04-02 09:05:22 +00:00
|
|
|
# Pull upstream base images
|
|
|
|
pull_arg="--pull"
|
2020-05-30 06:27:21 +00:00
|
|
|
from_line="$(grep '^FROM' ../$dir/Dockerfile)"
|
2019-04-02 09:05:22 +00:00
|
|
|
if echo "$from_line" | grep -q '$USER'; then
|
|
|
|
pull_arg=""
|
|
|
|
fi
|
|
|
|
|
2018-10-16 08:52:14 +00:00
|
|
|
echo "Building image: $i (export NO_DOCKER_IMAGE_BUILD=1 to prevent this)"
|
2020-05-30 06:27:21 +00:00
|
|
|
make -C "../$dir" \
|
|
|
|
PULL="$pull_arg" \
|
|
|
|
DISTRO="$distro_arg" \
|
|
|
|
IMAGE="$REPO_USER/$i" \
|
|
|
|
|| exit 1
|
2018-10-16 08:52:14 +00:00
|
|
|
fi
|
|
|
|
|
2019-01-24 15:04:03 +00:00
|
|
|
# Detect missing images (build skipped)
|
2018-10-16 08:52:14 +00:00
|
|
|
if ! docker_image_exists "$i"; then
|
|
|
|
echo "ERROR: missing image: $i"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
2018-02-06 20:20:19 +00:00
|
|
|
|
2019-07-05 13:16:17 +00:00
|
|
|
#kills all containers attached to network
|
|
|
|
network_clean() {
|
|
|
|
docker network inspect $NET_NAME | grep Name | cut -d : -f2 | awk -F\" 'NR>1{print $2}' | xargs -rn1 docker kill
|
|
|
|
}
|
|
|
|
|
2018-02-06 20:20:19 +00:00
|
|
|
network_create() {
|
|
|
|
NET=$1
|
2019-07-05 13:16:17 +00:00
|
|
|
if docker network ls | grep -q $NET_NAME; then
|
|
|
|
echo removing stale network and containers...
|
|
|
|
network_clean
|
|
|
|
network_remove
|
|
|
|
fi
|
2020-08-12 10:26:29 +00:00
|
|
|
SUB4="172.18.$NET.0/24"
|
|
|
|
SUB6="fd02:db8:$NET::/64"
|
2018-02-06 20:20:19 +00:00
|
|
|
echo Creating network $NET_NAME
|
2020-08-12 10:26:29 +00:00
|
|
|
docker network create --internal --subnet $SUB4 --ipv6 --subnet $SUB6 $NET_NAME
|
2018-02-06 20:20:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
network_remove() {
|
|
|
|
echo Removing network $NET_NAME
|
|
|
|
docker network remove $NET_NAME
|
|
|
|
}
|
|
|
|
|
2020-08-24 14:15:40 +00:00
|
|
|
# Generates list of params to pass to "docker run" to configure IP addresses
|
|
|
|
# $1: SUBNET to use, same as passed to network_create()
|
|
|
|
# $2: Address suffix from SUBNET to apply to the container
|
|
|
|
docker_network_params() {
|
|
|
|
NET=$1
|
|
|
|
ADDR_SUFIX=$2
|
|
|
|
echo --network $NET_NAME --ip "172.18.$NET.$ADDR_SUFIX" --ip6 "fd02:db8:$NET::$ADDR_SUFIX"
|
|
|
|
}
|
|
|
|
|
2019-02-22 17:48:31 +00:00
|
|
|
fix_perms() {
|
2019-06-13 08:40:09 +00:00
|
|
|
if ! docker_image_exists "debian-stretch-build"; then
|
|
|
|
docker_images_require "debian-stretch-build"
|
|
|
|
fi
|
|
|
|
|
2019-02-22 17:48:31 +00:00
|
|
|
echo Fixing permissions
|
|
|
|
docker run --rm \
|
|
|
|
-v $VOL_BASE_DIR:/data \
|
|
|
|
--name ${BUILD_TAG}-cleaner \
|
2019-03-27 11:31:48 +00:00
|
|
|
$REPO_USER/debian-stretch-build \
|
2019-02-22 17:48:31 +00:00
|
|
|
chmod -R a+rX /data/
|
|
|
|
}
|
|
|
|
|
2018-04-09 13:28:25 +00:00
|
|
|
collect_logs() {
|
2019-02-22 17:48:31 +00:00
|
|
|
fix_perms
|
2018-04-09 13:46:57 +00:00
|
|
|
cat "$VOL_BASE_DIR"/*/junit-*.log || true
|
2018-04-09 13:28:25 +00:00
|
|
|
}
|
2018-02-06 20:20:19 +00:00
|
|
|
|
|
|
|
set -x
|
|
|
|
|
|
|
|
# non-jenkins execution: assume local user name
|
|
|
|
if [ "x$REPO_USER" = "x" ]; then
|
|
|
|
REPO_USER=$USER
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "x$WORKSPACE" = "x" ]; then
|
2018-04-09 13:46:57 +00:00
|
|
|
# non-jenkins execution: put logs in /tmp
|
|
|
|
VOL_BASE_DIR="$(mktemp -d)"
|
|
|
|
|
|
|
|
# point /tmp/logs to the last ttcn3 run
|
|
|
|
rm /tmp/logs || true
|
|
|
|
ln -s "$VOL_BASE_DIR" /tmp/logs || true
|
|
|
|
else
|
|
|
|
# jenkins execution: put logs in workspace
|
|
|
|
VOL_BASE_DIR="$WORKSPACE/logs"
|
|
|
|
rm -rf "$VOL_BASE_DIR"
|
|
|
|
mkdir -p "$VOL_BASE_DIR"
|
2018-02-06 20:20:19 +00:00
|
|
|
fi
|
|
|
|
|
2020-07-28 23:34:34 +00:00
|
|
|
if [ ! -d "$VOL_BASE_DIR" ]; then
|
|
|
|
echo "ERROR: \$VOL_BASE_DIR does not exist: '$VOL_BASE_DIR'"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2018-02-06 20:20:19 +00:00
|
|
|
# non-jenkins execution: put logs in /tmp
|
|
|
|
if [ "x$BUILD_TAG" = "x" ]; then
|
|
|
|
BUILD_TAG=nonjenkins
|
|
|
|
fi
|
|
|
|
|
|
|
|
SUITE_NAME=`basename $PWD`
|
|
|
|
|
|
|
|
NET_NAME=$SUITE_NAME
|