From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: fam@euphon.net, berrange@redhat.com,
"Alex Bennée" <alex.bennee@linaro.org>,
richard.henderson@linaro.org, f4bug@amsat.org,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
cota@braap.org, aurelien@aurel32.net
Subject: [PATCH v3 22/30] tests/docker: add --registry support to tooling
Date: Fri, 26 Jun 2020 19:13:49 +0100 [thread overview]
Message-ID: <20200626181357.26211-23-alex.bennee@linaro.org> (raw)
In-Reply-To: <20200626181357.26211-1-alex.bennee@linaro.org>
This allows us to point the tools towards a registry from which they
can grab pre-built layers instead of doing everything from scratch
each time. To enable this we need to be using the DOCKER_BUILDKIT
engine.
[AJB: note registry.gitlab.com/stsquad/qemu is for my testing, the
final version will see DOCKER_REGISTRY default to registry.gitlab.com/qemu-project/qemu]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v2
- add a pull stage to pull images from the registry
- enable BUILDKIT and BUILDKIT_INLINE_CACHE
- don't invoke BUILDKIT on Travis
---
tests/docker/Makefile.include | 3 +++
tests/docker/docker.py | 37 +++++++++++++++++++++++++++++++----
2 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index 6d6ced1e463..8139e8467d4 100644
--- a/tests/docker/Makefile.include
+++ b/tests/docker/Makefile.include
@@ -13,6 +13,7 @@ DOCKER_IMAGES := $(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.doc
DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES))
# Use a global constant ccache directory to speed up repetitive builds
DOCKER_CCACHE_DIR := $$HOME/.cache/qemu-docker-ccache
+DOCKER_REGISTRY := $(if $(REGISTRY),$(REGISTRY),registry.gitlab.com/stsquad/qemu)
DOCKER_TESTS := $(notdir $(shell \
find $(SRC_PATH)/tests/docker/ -name 'test-*' -type f))
@@ -57,6 +58,7 @@ docker-image-%: $(DOCKER_FILES_DIR)/%.docker
$(call quiet-command,\
$(DOCKER_SCRIPT) build -t qemu/$* -f $< \
$(if $V,,--quiet) $(if $(NOCACHE),--no-cache) \
+ $(if $(DOCKER_REGISTRY),--registry $(DOCKER_REGISTRY)) \
$(if $(NOUSER),,--add-current-user) \
$(if $(EXTRA_FILES),--extra-files $(EXTRA_FILES))\
$(if $(EXECUTABLE),--include-executable=$(EXECUTABLE)),\
@@ -213,6 +215,7 @@ endif
@echo ' Include extra files in image.'
@echo ' ENGINE=auto/docker/podman'
@echo ' Specify which container engine to run.'
+ @echo ' REGISTRY=url Cache builds from registry (default:$(DOCKER_REGISTRY))'
# This rule if for directly running against an arbitrary docker target.
# It is called by the expanded docker targets (e.g. make
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index cc6f76caa60..a31ac287150 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -221,6 +221,13 @@ class Docker(object):
""" Running Docker commands """
def __init__(self):
self._command = _guess_engine_command()
+
+ if "docker" in self._command and "TRAVIS" not in os.environ:
+ os.environ["DOCKER_BUILDKIT"] = "1"
+ self._buildkit = True
+ else:
+ self._buildkit = False
+
self._instance = None
atexit.register(self._kill_instances)
signal.signal(signal.SIGTERM, self._kill_instances)
@@ -289,10 +296,20 @@ class Docker(object):
return labels.get("com.qemu.dockerfile-checksum", "")
def build_image(self, tag, docker_dir, dockerfile,
- quiet=True, user=False, argv=None, extra_files_cksum=[]):
+ quiet=True, user=False, argv=None, registry=None,
+ extra_files_cksum=[]):
if argv is None:
argv = []
+ if registry is not None:
+ dockerfile = dockerfile.replace("FROM qemu/",
+ "FROM %s/qemu/" %
+ (registry))
+ # see if we can fetch a cache copy, may fail...
+ pull_args = ["pull", "%s/%s" % (registry, tag)]
+ self._do(pull_args, quiet=quiet)
+
+
tmp_df = tempfile.NamedTemporaryFile(mode="w+t",
encoding='utf-8',
dir=docker_dir, suffix=".docker")
@@ -313,8 +330,17 @@ class Docker(object):
tmp_df.flush()
- self._do_check(["build", "-t", tag, "-f", tmp_df.name] + argv +
- [docker_dir],
+ build_args = ["build", "-t", tag, "-f", tmp_df.name]
+ if self._buildkit:
+ build_args += ["--build-arg", "BUILDKIT_INLINE_CACHE=1"]
+
+ if registry is not None:
+ cache = "%s/%s" % (registry, tag)
+ build_args += ["--cache-from", cache]
+ build_args += argv
+ build_args += [docker_dir]
+
+ self._do_check(build_args,
quiet=quiet)
def update_image(self, tag, tarball, quiet=True):
@@ -403,6 +429,8 @@ class BuildCommand(SubCommand):
parser.add_argument("--add-current-user", "-u", dest="user",
action="store_true",
help="Add the current user to image's passwd")
+ parser.add_argument("--registry", "-r",
+ help="cache from docker registry")
parser.add_argument("-t", dest="tag",
help="Image Tag")
parser.add_argument("-f", dest="dockerfile",
@@ -458,7 +486,8 @@ class BuildCommand(SubCommand):
for k, v in os.environ.items()
if k.lower() in FILTERED_ENV_NAMES]
dkr.build_image(tag, docker_dir, dockerfile,
- quiet=args.quiet, user=args.user, argv=argv,
+ quiet=args.quiet, user=args.user,
+ argv=argv, registry=args.registry,
extra_files_cksum=cksum)
rmtree(docker_dir)
--
2.20.1
next prev parent reply other threads:[~2020-06-26 18:26 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-26 18:13 [PATCH v3 00/30] testing/next (gitlab, vm, docker) Alex Bennée
2020-06-26 18:13 ` [PATCH v3 01/30] iotests: Fix 051 output after qdev_init_nofail() removal Alex Bennée
2020-06-26 18:13 ` [PATCH v3 02/30] crypto/linux_keyring: fix 'secret_keyring' configure test Alex Bennée
2020-06-26 18:13 ` [PATCH v3 03/30] tests/vm: pass args through to BaseVM's __init__ Alex Bennée
2020-06-26 18:13 ` [PATCH v3 04/30] tests/vm: Add configuration to basevm.py Alex Bennée
2020-06-26 18:13 ` [PATCH v3 05/30] tests/vm: Added configuration file support Alex Bennée
2020-06-26 18:13 ` [PATCH v3 06/30] tests/vm: Add common Ubuntu python module Alex Bennée
2020-06-26 18:13 ` [PATCH v3 07/30] tests/vm: Added a new script for ubuntu.aarch64 Alex Bennée
2020-06-26 18:13 ` [PATCH v3 08/30] tests/vm: Added a new script for centos.aarch64 Alex Bennée
2020-06-26 18:13 ` [PATCH v3 09/30] tests/vm: change scripts to use self._config Alex Bennée
2020-06-29 10:06 ` Philippe Mathieu-Daudé
2020-06-26 18:13 ` [PATCH v3 10/30] python/qemu: Add ConsoleSocket for optional use in QEMUMachine Alex Bennée
2020-06-26 18:13 ` [PATCH v3 11/30] tests/vm: Add workaround to consume console Alex Bennée
2020-06-26 18:13 ` [PATCH v3 12/30] tests/vm: switch from optsparse to argparse Alex Bennée
2020-06-26 18:13 ` [PATCH v3 13/30] tests/vm: allow us to take advantage of MTTCG Alex Bennée
2020-06-26 18:13 ` [PATCH v3 14/30] tests/docker: check for an parameters not empty string Alex Bennée
2020-06-26 18:13 ` [PATCH v3 15/30] tests/docker: change tag naming scheme of our images Alex Bennée
2020-06-29 10:04 ` Philippe Mathieu-Daudé
2020-06-26 18:13 ` [PATCH v3 16/30] .gitignore: un-ignore .gitlab-ci.d Alex Bennée
2020-06-29 9:25 ` Thomas Huth
2020-06-29 10:04 ` Philippe Mathieu-Daudé
2020-06-26 18:13 ` [PATCH v3 17/30] gitlab-ci: Fix the change rules after moving the YML files Alex Bennée
2020-07-02 7:42 ` Laszlo Ersek
2020-06-26 18:13 ` [PATCH v3 18/30] gitlab: introduce explicit "container" and "build" stages Alex Bennée
2020-06-26 18:13 ` [PATCH v3 19/30] gitlab: build all container images during CI Alex Bennée
2020-06-29 9:54 ` Thomas Huth
2020-06-26 18:13 ` [PATCH v3 20/30] gitlab: convert jobs to use custom built containers Alex Bennée
2020-06-29 10:13 ` Thomas Huth
2020-06-26 18:13 ` [PATCH v3 21/30] gitlab: build containers with buildkit and metadata Alex Bennée
2020-06-26 18:13 ` Alex Bennée [this message]
2020-06-26 18:13 ` [PATCH v3 23/30] tests/docker: add packages needed for check-acceptance Alex Bennée
2020-06-29 10:11 ` Philippe Mathieu-Daudé
2020-06-29 10:15 ` Thomas Huth
2020-06-26 18:13 ` [PATCH v3 24/30] gitlab: add acceptance testing to system builds Alex Bennée
2020-06-29 10:15 ` Philippe Mathieu-Daudé
2020-06-29 10:36 ` Thomas Huth
2020-06-29 12:51 ` Alex Bennée
2020-06-29 11:12 ` Thomas Huth
2020-06-26 18:13 ` [PATCH v3 25/30] tests/docker: add a linux-user testing focused image Alex Bennée
2020-06-29 10:18 ` Philippe Mathieu-Daudé
2020-06-26 18:13 ` [PATCH v3 26/30] gitlab: enable check-tcg for linux-user tests Alex Bennée
2020-06-29 10:03 ` Philippe Mathieu-Daudé
2020-06-29 10:42 ` Thomas Huth
2020-06-29 11:03 ` Thomas Huth
2020-06-29 11:35 ` Laurent Vivier
2020-06-29 12:54 ` Alex Bennée
2020-06-26 18:13 ` [PATCH v3 27/30] gitlab: add avocado asset caching Alex Bennée
2020-06-29 12:25 ` Thomas Huth
2020-06-26 18:13 ` [PATCH v3 28/30] gitlab: split build-disabled into two phases Alex Bennée
2020-06-29 10:02 ` Philippe Mathieu-Daudé
2020-06-29 10:58 ` Thomas Huth
2020-06-29 12:57 ` Alex Bennée
2020-06-26 18:13 ` [PATCH v3 29/30] gitlab: limit re-builds of the containers Alex Bennée
2020-06-29 10:01 ` Philippe Mathieu-Daudé
2020-06-29 10:03 ` Daniel P. Berrangé
2020-06-29 10:11 ` Alex Bennée
2020-06-29 11:42 ` Thomas Huth
2020-06-29 11:52 ` Daniel P. Berrangé
2020-06-26 18:13 ` [PATCH v3 30/30] containers.yml: build with docker.py tooling Alex Bennée
2020-06-26 19:13 ` [PATCH v3 00/30] testing/next (gitlab, vm, docker) no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200626181357.26211-23-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=aurelien@aurel32.net \
--cc=berrange@redhat.com \
--cc=cota@braap.org \
--cc=f4bug@amsat.org \
--cc=fam@euphon.net \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).