[RFC PATCH v2 2/3] gitlab: Cache container images

Fabiano Rosas posted 3 patches 2 years, 9 months ago
There is a newer version of this series
[RFC PATCH v2 2/3] gitlab: Cache container images
Posted by Fabiano Rosas 2 years, 9 months ago
Make use of the --cache-from option from 'docker build' by including
build layers when building and then pulling a previously built image
before the next build.

This was previously done by the docker.py script, but got disabled due
to bad interactions with certain runners. See commit 6ddc3dc7a8
("tests/docker: don't use BUILDKIT in GitLab either").

We now believe those issues to be fixed, so restore the caching
functionality as it brings a significant reduction in container build
times.

Signed-off-by: Fabiano Rosas <farosas@suse.de>
---
 .gitlab-ci.d/container-template.yml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.d/container-template.yml b/.gitlab-ci.d/container-template.yml
index f417452212..31e4e36a7d 100644
--- a/.gitlab-ci.d/container-template.yml
+++ b/.gitlab-ci.d/container-template.yml
@@ -13,7 +13,10 @@
   script:
     - echo "TAG:$TAG"
     - echo "COMMON_TAG:$COMMON_TAG"
-    - docker build --tag $TAG -f "tests/docker/dockerfiles/$NAME.docker" "."
+    - docker pull "$TAG" || true
+    - docker build --tag "$TAG" --cache-from "$TAG"
+      --build-arg BUILDKIT_INLINE_CACHE=1
+      -f "tests/docker/dockerfiles/$NAME.docker" "."
     - docker push "$TAG"
   after_script:
     - docker logout
-- 
2.35.3
Re: [RFC PATCH v2 2/3] gitlab: Cache container images
Posted by Daniel P. Berrangé 2 years, 9 months ago
On Fri, Feb 24, 2023 at 09:52:06AM -0300, Fabiano Rosas wrote:
> Make use of the --cache-from option from 'docker build' by including
> build layers when building and then pulling a previously built image
> before the next build.
> 
> This was previously done by the docker.py script, but got disabled due
> to bad interactions with certain runners. See commit 6ddc3dc7a8
> ("tests/docker: don't use BUILDKIT in GitLab either").
> 
> We now believe those issues to be fixed, so restore the caching
> functionality as it brings a significant reduction in container build
> times.
> 
> Signed-off-by: Fabiano Rosas <farosas@suse.de>
> ---
>  .gitlab-ci.d/container-template.yml | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/.gitlab-ci.d/container-template.yml b/.gitlab-ci.d/container-template.yml
> index f417452212..31e4e36a7d 100644
> --- a/.gitlab-ci.d/container-template.yml
> +++ b/.gitlab-ci.d/container-template.yml
> @@ -13,7 +13,10 @@
>    script:
>      - echo "TAG:$TAG"
>      - echo "COMMON_TAG:$COMMON_TAG"
> -    - docker build --tag $TAG -f "tests/docker/dockerfiles/$NAME.docker" "."
> +    - docker pull "$TAG" || true
> +    - docker build --tag "$TAG" --cache-from "$TAG"

We should have

   --cache-from "$TAG" --cache-from "$COMMON_TAG"

The reason is that users may not keep their branches up2date on a regular
basis. As such the registry associated with the fork may not be useful
as a caching source. Thus if we include cache from the upstream repo, this
will benefit forks.  This was the rational behind having TAG + COMMON_TAG
originally, but we lost it somewhere along the way.

> +      --build-arg BUILDKIT_INLINE_CACHE=1
> +      -f "tests/docker/dockerfiles/$NAME.docker" "."
>      - docker push "$TAG"
>    after_script:
>      - docker logout

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|