Module: check_mk
Branch: master
Commit: cf2d30bc80f92a1ae58183ac20d67e2a558c2dcb
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=cf2d30bc80f92a…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Jan 11 10:04:45 2019 +0100
Fixed docker update test
The docker update test was broken since the required packages
between 1.5.0 branch and master branch changed. During the update
test a 1.5.0 package is installed into a container which has only
the master dependencies installed.
Improved build error handling on the way.
Change-Id: I400c4531b18e9ac2001533af5b3d4e07671e67ab
---
docker/.gitignore | 3 ++-
docker/Dockerfile | 2 +-
docker/Makefile | 15 +++++++------
tests/docker/test_docker.py | 52 +++++++++++++++++++++++++++++++++------------
4 files changed, 50 insertions(+), 22 deletions(-)
diff --git a/docker/.gitignore b/docker/.gitignore
index bb57edf..4ca7689 100644
--- a/docker/.gitignore
+++ b/docker/.gitignore
@@ -1,2 +1,3 @@
-needed-packages
+needed-packages*
+distro-*.mk
check-mk*.tar.gz
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 74d228e..9125b8b 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -25,7 +25,7 @@ ARG MAIL_RELAY_HOST
ENV MAIL_RELAY_HOST=""
# Make the list of required packages available to the following command
-COPY needed-packages /needed-packages
+COPY needed-packages-${CMK_VERSION} /needed-packages
# First install the tools we need for fetching the package and installation
# Then fetch the package and install it. This will make sure all Check_MK
diff --git a/docker/Makefile b/docker/Makefile
index a450c08..dd52782 100644
--- a/docker/Makefile
+++ b/docker/Makefile
@@ -49,14 +49,17 @@ setup:
setversion:
sed -i 's/^ARG CMK_VERSION=.*$$/ARG CMK_VERSION="$(NEW_VERSION)"/g'
Dockerfile
-needed-packages: ../omd/distros/DEBIAN_9.mk
- echo -e 'needed-packages:\n\t@echo \$$(OS_PACKAGES) > needed-packages\n' | \
- make -f - -f ../omd/distros/DEBIAN_9.mk --no-print-directory needed-packages
+distro-%.mk:
+ git show $(GIT_REF):../omd/distros/DEBIAN_9.mk > $@
+
+needed-packages-%: distro-%.mk
+ echo -e '$@:\n\t@echo \$$(OS_PACKAGES) > $@\n' | \
+ make -f - -f $< --no-print-directory $@
check-mk-$(EDITION)-docker-$(VERSION).tar.gz: image
docker save $(DOCKER_REPO_NAME)/check-mk-$(EDITION):$(VERSION) | gzip >
check-mk-$(EDITION)-docker-$(VERSION).tar.gz
-image: needed-packages
+image: needed-packages-$(VERSION)
docker build \
--build-arg CMK_VERSION="$(VERSION)" \
--build-arg CMK_EDITION="$(EDITION)" \
@@ -64,7 +67,7 @@ image: needed-packages
-t $(DOCKER_REPO_NAME)/check-mk-$(EDITION):$(VERSION) \
.
-image-daily: needed-packages
+image-daily: needed-packages-$(VERSION)
BRANCH_PREFIX="$$(git rev-parse --abbrev-ref HEAD)" ; \
if [[ "$$BRANCH_PREFIX" == "master" || "$$BRANCH_PREFIX"
=~ "/" ]]; then \
BRANCH_PREFIX="" ; \
@@ -91,5 +94,5 @@ test-lint-entrypoint:
clean:
-docker rmi $(DOCKER_REPO_NAME)/check-mk-$(EDITION):latest || true
-docker rmi $(DOCKER_REPO_NAME)/check-mk-$(EDITION):$(VERSION) || true
- [ -e needed-packages ] && rm needed-packages || true
+ ls needed-packages-* >/dev/null 2>&1 && rm needed-packages-* || true
ls check-mk-*-docker-*.tar.gz >/dev/null 2>&1 && rm
check-mk-*-docker-*.tar.gz || true
diff --git a/tests/docker/test_docker.py b/tests/docker/test_docker.py
index c7aac51..d90c90a 100644
--- a/tests/docker/test_docker.py
+++ b/tests/docker/test_docker.py
@@ -24,6 +24,7 @@
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
+import sys
import pytest
import docker
import os
@@ -55,23 +56,46 @@ def _image_name(edition, version):
return "docker-tests/check-mk-%s-%s-%s" % (edition, branch_name,
version.version)
-def _prepare_build():
- assert subprocess.Popen(["make", "needed-packages"],
- stdout=open(os.devnull, "w"),
- cwd=build_path).wait() == 0
+def _prepare_build(version):
+ if version.branch() != branch_name:
+ git_ref = ["GIT_REF=v%s" % version.version]
+ else:
+ git_ref = []
+
+ assert subprocess.Popen(
+ ["make"] + git_ref + ["needed-packages-%s" %
version.version],
+ stdout=open(os.devnull, "w"),
+ cwd=build_path).wait() == 0
def _build(request, client, edition, version, add_args=None):
- _prepare_build()
-
- image, build_logs = client.images.build(
- path=build_path,
- tag=_image_name(edition, version),
- buildargs={
- "CMK_VERSION": version.version,
- "CMK_EDITION": edition,
- "CMK_DL_CREDENTIALS":
":".join(testlib.get_cmk_download_credentials()),
- })
+ _prepare_build(version)
+
+ build_args = {
+ "CMK_VERSION": version.version,
+ "CMK_EDITION": edition,
+ "CMK_DL_CREDENTIALS":
":".join(testlib.get_cmk_download_credentials()),
+ }
+
+ print "Building image Path: %s, Tag: %s Args: %r" % (build_path,
_image_name(edition, version),
+ build_args)
+ try:
+ image, build_logs = client.images.build(
+ path=build_path,
+ tag=_image_name(edition, version),
+ buildargs=build_args,
+ )
+ except docker.errors.BuildError as e:
+ sys.stdout.write("= Build log ==================\n")
+ for entry in e.build_log:
+ if "stream" in entry:
+ sys.stdout.write(entry["stream"])
+ elif "errorDetail" in entry:
+ continue # Is already part of the exception message
+ else:
+ sys.stdout.write("UNEXPECTED FORMAT: %r\n" % entry)
+ sys.stdout.write("= Build log ==================\n")
+ raise
# TODO: Enable this on CI system. Removing during development slows down testing
#request.addfinalizer(lambda: client.images.remove(image.id, force=True))