From: "Alex Bennée" <alex.bennee@linaro.org>
To: peter.maydell@linaro.org
Cc: "Fam Zheng" <fam@euphon.net>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
qemu-devel@nongnu.org
Subject: [PULL 22/41] tests/docker: add --registry support to tooling
Date: Tue, 7 Jul 2020 08:08:39 +0100 [thread overview]
Message-ID: <20200707070858.6622-23-alex.bennee@linaro.org> (raw)
In-Reply-To: <20200707070858.6622-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.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200701135652.1366-25-alex.bennee@linaro.org>
diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
index e23b4af20ea6..a26177abc258 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/qemu-project/qemu)
DOCKER_TESTS := $(notdir $(shell \
find $(SRC_PATH)/tests/docker/ -name 'test-*' -type f))
@@ -56,7 +57,9 @@ else
docker-image-%: $(DOCKER_FILES_DIR)/%.docker
$(call quiet-command,\
$(DOCKER_SCRIPT) build -t qemu/$* -f $< \
- $(if $V,,--quiet) $(if $(NOCACHE),--no-cache) \
+ $(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 +216,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 cc6f76caa602..9684f07bdebe 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,24 @@ 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 = []
+ # pre-calculate the docker checksum before any
+ # substitutions we make for caching
+ checksum = _text_checksum(_dockerfile_preprocess(dockerfile))
+
+ 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")
@@ -306,15 +327,23 @@ class Docker(object):
(uname, uid, uname))
tmp_df.write("\n")
- tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s" %
- _text_checksum(_dockerfile_preprocess(dockerfile)))
+ tmp_df.write("LABEL com.qemu.dockerfile-checksum=%s" % (checksum))
for f, c in extra_files_cksum:
tmp_df.write("LABEL com.qemu.%s-checksum=%s" % (f, c))
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 +432,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 +489,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-07-07 7:28 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-07 7:08 [PULL 00/41] testing updates (vm, gitlab, misc build fixes) Alex Bennée
2020-07-07 7:08 ` [PULL 01/41] crypto/linux_keyring: fix 'secret_keyring' configure test Alex Bennée
2020-07-07 7:08 ` [PULL 02/41] util/coroutine: Cleanup start_switch_fiber_ for TSAN Alex Bennée
2020-07-07 7:08 ` [PULL 03/41] tests/vm: pass args through to BaseVM's __init__ Alex Bennée
2020-07-07 7:08 ` [PULL 04/41] tests/vm: Add configuration to basevm.py Alex Bennée
2020-07-10 13:50 ` Alex Bennée
2020-07-07 7:08 ` [PULL 05/41] tests/vm: Added configuration file support Alex Bennée
2020-07-07 7:08 ` [PULL 06/41] tests/vm: Add common Ubuntu python module Alex Bennée
2020-07-07 7:08 ` [PULL 07/41] tests/vm: Added a new script for ubuntu.aarch64 Alex Bennée
2020-07-07 7:08 ` [PULL 08/41] tests/vm: Added a new script for centos.aarch64 Alex Bennée
2020-07-07 7:08 ` [PULL 09/41] tests/vm: change scripts to use self._config Alex Bennée
2020-07-07 7:08 ` [PULL 10/41] python/qemu: Add ConsoleSocket for optional use in QEMUMachine Alex Bennée
2020-07-10 19:20 ` John Snow
2020-07-11 16:15 ` Robert Foley
2020-07-11 17:45 ` Alex Bennée
2020-07-13 13:57 ` John Snow
2020-07-13 14:16 ` Philippe Mathieu-Daudé
2020-07-13 14:37 ` Eduardo Habkost
2020-07-07 7:08 ` [PULL 11/41] tests/vm: Add workaround to consume console Alex Bennée
2020-07-07 7:08 ` [PULL 12/41] tests/vm: switch from optsparse to argparse Alex Bennée
2020-07-07 7:08 ` [PULL 13/41] tests/vm: allow us to take advantage of MTTCG Alex Bennée
2020-07-07 7:08 ` [PULL 14/41] tests/docker: check for an parameters not empty string Alex Bennée
2020-07-07 7:08 ` [PULL 15/41] tests/docker: change tag naming scheme of our images Alex Bennée
2020-07-07 7:08 ` [PULL 16/41] .gitignore: un-ignore .gitlab-ci.d Alex Bennée
2020-07-07 7:08 ` [PULL 17/41] gitlab-ci: Fix the change rules after moving the YML files Alex Bennée
2020-07-07 7:08 ` [PULL 18/41] gitlab: introduce explicit "container" and "build" stages Alex Bennée
2020-07-07 7:08 ` [PULL 19/41] gitlab: build all container images during CI Alex Bennée
2020-07-07 7:08 ` [PULL 20/41] gitlab: convert jobs to use custom built containers Alex Bennée
2020-07-07 7:08 ` [PULL 21/41] gitlab: build containers with buildkit and metadata Alex Bennée
2020-07-07 7:08 ` Alex Bennée [this message]
2020-07-07 7:08 ` [PULL 23/41] tests/docker: add packages needed for check-acceptance Alex Bennée
2020-07-07 7:08 ` [PULL 24/41] tests/acceptance: skip s390x_ccw_vrtio_tcg on GitLab Alex Bennée
2020-07-07 7:08 ` [PULL 25/41] tests/acceptance: fix dtb path for machine_rx_gdbsim Alex Bennée
2020-07-07 7:08 ` [PULL 26/41] tests/acceptance: skip multicore mips_malta tests on GitLab Alex Bennée
2020-07-07 7:08 ` [PULL 27/41] tests/acceptance: skip LinuxInitrd 2gib with v4.16 " Alex Bennée
2020-07-07 7:08 ` [PULL 28/41] gitlab: add acceptance testing to system builds Alex Bennée
2020-09-08 19:54 ` Philippe Mathieu-Daudé
2020-09-09 6:03 ` Thomas Huth
2020-07-07 7:08 ` [PULL 29/41] tests/tcg: add more default compilers to configure.sh Alex Bennée
2020-07-07 7:08 ` [PULL 30/41] tests/docker: add a linux-user testing focused image Alex Bennée
2020-07-07 7:08 ` [PULL 31/41] linux-user/elfload: use MAP_FIXED_NOREPLACE in pgb_reserved_va Alex Bennée
2020-07-07 7:08 ` [PULL 32/41] gitlab: enable check-tcg for linux-user tests Alex Bennée
2020-07-07 7:08 ` [PULL 33/41] gitlab: add avocado asset caching Alex Bennée
2020-07-07 7:08 ` [PULL 34/41] gitlab: split build-disabled into two phases Alex Bennée
2020-07-07 7:08 ` [PULL 35/41] gitlab: limit re-builds of the containers Alex Bennée
2020-07-07 7:08 ` [PULL 36/41] containers.yml: build with docker.py tooling Alex Bennée
2020-07-07 7:08 ` [PULL 37/41] testing: add check-build target Alex Bennée
2020-07-07 7:08 ` [PULL 38/41] shippable: pull images from registry instead of building Alex Bennée
2020-07-07 7:08 ` [PULL 39/41] travis.yml: Test also the other targets on s390x Alex Bennée
2020-07-07 7:08 ` [PULL 40/41] tests/qht-bench: Adjust testing rate by -1 Alex Bennée
2020-07-07 7:08 ` [PULL 41/41] tests/qht-bench: Adjust threshold computation Alex Bennée
2020-07-07 9:39 ` [PULL 00/41] testing updates (vm, gitlab, misc build fixes) Alex Bennée
2020-07-09 11:31 ` Peter Maydell
2020-07-09 12:24 ` Philippe Mathieu-Daudé
2020-07-09 13:04 ` Peter Maydell
2020-07-09 15:46 ` Alex Bennée
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=20200707070858.6622-23-alex.bennee@linaro.org \
--to=alex.bennee@linaro.org \
--cc=fam@euphon.net \
--cc=peter.maydell@linaro.org \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.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).