On Fri, May 29, 2020 at 03:00:42PM +0200, Andrea Bolognani wrote:
Instead of using pre-built containers hosted on Quay, build
containers as part of the GitLab CI pipeline and upload them to the
GitLab container registry for later use.
This will not significantly slow down builds, because containers are
only rebuilt when the corresponding Dockerfile has been modified.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
.gitlab-ci.yml | 234 +++++++++++++++++-
ci/containers/README.rst | 14 ++
ci/containers/ci-centos-7.Dockerfile | 137 ++++++++++
ci/containers/ci-centos-8.Dockerfile | 108 ++++++++
.../ci-debian-10-cross-aarch64.Dockerfile | 122 +++++++++
.../ci-debian-10-cross-armv6l.Dockerfile | 120 +++++++++
.../ci-debian-10-cross-armv7l.Dockerfile | 121 +++++++++
.../ci-debian-10-cross-i686.Dockerfile | 121 +++++++++
.../ci-debian-10-cross-mips.Dockerfile | 121 +++++++++
.../ci-debian-10-cross-mips64el.Dockerfile | 121 +++++++++
.../ci-debian-10-cross-mipsel.Dockerfile | 121 +++++++++
.../ci-debian-10-cross-ppc64le.Dockerfile | 121 +++++++++
.../ci-debian-10-cross-s390x.Dockerfile | 121 +++++++++
ci/containers/ci-debian-10.Dockerfile | 112 +++++++++
.../ci-debian-9-cross-aarch64.Dockerfile | 126 ++++++++++
.../ci-debian-9-cross-armv6l.Dockerfile | 124 ++++++++++
.../ci-debian-9-cross-armv7l.Dockerfile | 125 ++++++++++
.../ci-debian-9-cross-mips.Dockerfile | 125 ++++++++++
.../ci-debian-9-cross-mips64el.Dockerfile | 125 ++++++++++
.../ci-debian-9-cross-mipsel.Dockerfile | 125 ++++++++++
.../ci-debian-9-cross-ppc64le.Dockerfile | 125 ++++++++++
.../ci-debian-9-cross-s390x.Dockerfile | 125 ++++++++++
ci/containers/ci-debian-9.Dockerfile | 116 +++++++++
.../ci-debian-sid-cross-aarch64.Dockerfile | 122 +++++++++
.../ci-debian-sid-cross-armv6l.Dockerfile | 120 +++++++++
.../ci-debian-sid-cross-armv7l.Dockerfile | 121 +++++++++
.../ci-debian-sid-cross-i686.Dockerfile | 121 +++++++++
.../ci-debian-sid-cross-mips.Dockerfile | 121 +++++++++
.../ci-debian-sid-cross-mips64el.Dockerfile | 121 +++++++++
.../ci-debian-sid-cross-mipsel.Dockerfile | 120 +++++++++
.../ci-debian-sid-cross-ppc64le.Dockerfile | 121 +++++++++
.../ci-debian-sid-cross-s390x.Dockerfile | 121 +++++++++
ci/containers/ci-debian-sid.Dockerfile | 112 +++++++++
ci/containers/ci-fedora-31.Dockerfile | 109 ++++++++
ci/containers/ci-fedora-32.Dockerfile | 109 ++++++++
...ci-fedora-rawhide-cross-mingw32.Dockerfile | 129 ++++++++++
...ci-fedora-rawhide-cross-mingw64.Dockerfile | 129 ++++++++++
ci/containers/ci-fedora-rawhide.Dockerfile | 110 ++++++++
ci/containers/ci-opensuse-151.Dockerfile | 109 ++++++++
ci/containers/ci-ubuntu-1804.Dockerfile | 117 +++++++++
ci/containers/ci-ubuntu-2004.Dockerfile | 113 +++++++++
ci/containers/refresh | 43 ++++
42 files changed, 4973 insertions(+), 5 deletions(-)
create mode 100644 ci/containers/README.rst
create mode 100644 ci/containers/ci-centos-7.Dockerfile
create mode 100644 ci/containers/ci-centos-8.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-aarch64.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-armv6l.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-armv7l.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-i686.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-mips.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-mips64el.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-mipsel.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-ppc64le.Dockerfile
create mode 100644 ci/containers/ci-debian-10-cross-s390x.Dockerfile
create mode 100644 ci/containers/ci-debian-10.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-aarch64.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-armv6l.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-armv7l.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-mips.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-mips64el.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-mipsel.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-ppc64le.Dockerfile
create mode 100644 ci/containers/ci-debian-9-cross-s390x.Dockerfile
create mode 100644 ci/containers/ci-debian-9.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-aarch64.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-armv6l.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-armv7l.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-i686.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-mips.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-mips64el.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-mipsel.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-ppc64le.Dockerfile
create mode 100644 ci/containers/ci-debian-sid-cross-s390x.Dockerfile
create mode 100644 ci/containers/ci-debian-sid.Dockerfile
create mode 100644 ci/containers/ci-fedora-31.Dockerfile
create mode 100644 ci/containers/ci-fedora-32.Dockerfile
create mode 100644 ci/containers/ci-fedora-rawhide-cross-mingw32.Dockerfile
create mode 100644 ci/containers/ci-fedora-rawhide-cross-mingw64.Dockerfile
create mode 100644 ci/containers/ci-fedora-rawhide.Dockerfile
create mode 100644 ci/containers/ci-opensuse-151.Dockerfile
create mode 100644 ci/containers/ci-ubuntu-1804.Dockerfile
create mode 100644 ci/containers/ci-ubuntu-2004.Dockerfile
create mode 100755 ci/containers/refresh
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8a5b3372de..0e7917d6cd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,7 @@ variables:
stages:
- prebuild
+ - containers
- native_build
- cross_build
- other
@@ -16,10 +17,35 @@ stages:
# Common templates
+.container_job_template: &container_job_definition
+ image: docker:stable
+ stage: containers
+ services:
+ - docker:dind
+ before_script:
+ - export TAG="$CI_REGISTRY_IMAGE/ci-$NAME:latest"
+ - export COMMON_TAG="$CI_REGISTRY/libvirt/libvirt/ci-$NAME:latest"
+ - docker info
+ - docker login
registry.gitlab.com -u "$CI_REGISTRY_USER" -p
"$CI_REGISTRY_PASSWORD"
+ script:
+ - docker pull "$TAG" || docker pull "$COMMON_TAG" || true
+ - docker build --cache-from "$TAG" --cache-from "$COMMON_TAG"
--tag "$TAG" -f "ci/containers/ci-$NAME.Dockerfile" ci/containers
+ - docker push "$TAG"
+ after_script:
+ - docker logout
+
+# We build many containers which can be useful to debug problems but are not
+# needed for the pipeline itself to complete: those sometimes fail, and when
+# that happens it's mostly because of temporary issues with Debian sid. We
+# don't want those failures to affect the overall pipeline status
+.container_optional_job_template: &container_optional_job_definition
+ <<: *container_job_definition
+ allow_failure: true
I don't think we should be building container images that we're not going
to be using in any of the jobs, as it can only ever slow down the build
overall.
+
# Default native build jobs that are always run
.native_build_default_job_template: &native_build_default_job_definition
stage: native_build
- image: quay.io/libvirt/buildenv-libvirt-$NAME:latest
+ image: $CI_REGISTRY_IMAGE/ci-$NAME:latest
cache:
paths:
- ccache/
@@ -44,7 +70,7 @@ stages:
# Default cross build jobs that are always run
.cross_build_default_job_template: &cross_build_default_job_definition
stage: cross_build
- image: quay.io/libvirt/buildenv-libvirt-$NAME-cross-$CROSS:latest
+ image: $CI_REGISTRY_IMAGE/ci-$NAME-cross-$CROSS:latest
cache:
paths:
- ccache/
@@ -66,6 +92,204 @@ stages:
- /^ci-full-.*$/
+# Container build jobs
+
+centos-7-container:
IMHO we should name these to match the build job. eg arch, then distro
x64-centos-7-container
+ <<: *container_job_definition
+ variables:
+ NAME: centos-7
+
+centos-8-container:
+ <<: *container_job_definition
+ variables:
+ NAME: centos-8
+
+debian-9-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-9
+
+debian-9-cross-aarch64-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-9-cross-aarch64
+
+debian-9-cross-armv6l-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-9-cross-armv6l
This container, and many others are only used by the "extra" build
jobs, so should be subject to the same filtering.
+
+debian-9-cross-armv7l-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-9-cross-armv7l
+
+debian-9-cross-mips-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-9-cross-mips
+
+debian-9-cross-mips64el-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-9-cross-mips64el
+
+debian-9-cross-mipsel-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-9-cross-mipsel
+
+debian-9-cross-ppc64le-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-9-cross-ppc64le
+
+debian-9-cross-s390x-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-9-cross-s390x
+
+debian-10-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-10
+
+debian-10-cross-aarch64-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-10-cross-aarch64
+
+debian-10-cross-armv6l-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-10-cross-armv6l
+
+debian-10-cross-armv7l-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-10-cross-armv7l
+
+debian-10-cross-i686-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-10-cross-i686
+
+debian-10-cross-mips-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-10-cross-mips
+
+debian-10-cross-mips64el-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-10-cross-mips64el
+
+debian-10-cross-mipsel-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-10-cross-mipsel
+
+debian-10-cross-ppc64le-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-10-cross-ppc64le
+
+debian-10-cross-s390x-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-10-cross-s390x
+
+debian-sid-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-sid
+
+debian-sid-cross-aarch64-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-sid-cross-aarch64
+
+debian-sid-cross-armv6l-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-sid-cross-armv6l
+
+debian-sid-cross-armv7l-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-sid-cross-armv7l
+
+debian-sid-cross-i686-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-sid-cross-i686
+
+debian-sid-cross-mips-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-sid-cross-mips
+
+debian-sid-cross-mips64el-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-sid-cross-mips64el
+
+debian-sid-cross-mipsel-container:
+ <<: *container_job_definition
+ variables:
+ NAME: debian-sid-cross-mipsel
+
+debian-sid-cross-ppc64le-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-sid-cross-ppc64le
+
+debian-sid-cross-s390x-container:
+ <<: *container_optional_job_definition
+ variables:
+ NAME: debian-sid-cross-s390x
+
+fedora-31-container:
+ <<: *container_job_definition
+ variables:
+ NAME: fedora-31
+
+fedora-32-container:
+ <<: *container_job_definition
+ variables:
+ NAME: fedora-32
+
+fedora-rawhide-container:
+ <<: *container_job_definition
+ variables:
+ NAME: fedora-rawhide
+
+fedora-rawhide-cross-mingw32-container:
+ <<: *container_job_definition
+ variables:
+ NAME: fedora-rawhide-cross-mingw32
+
+fedora-rawhide-cross-mingw64-container:
+ <<: *container_job_definition
+ variables:
+ NAME: fedora-rawhide-cross-mingw64
+
+opensuse-151-container:
+ <<: *container_job_definition
+ variables:
+ NAME: opensuse-151
+ RPM: skip
+
+ubuntu-1804-container:
+ <<: *container_job_definition
+ variables:
+ NAME: ubuntu-1804
+
+ubuntu-2004-container:
+ <<: *container_job_definition
+ variables:
+ NAME: ubuntu-2004
+
# Native architecture build + test jobs
x64-debian-9:
@@ -198,6 +422,7 @@ mingw64-fedora-rawhide:
#
https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=w...
website:
stage: other
+ image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
before_script:
- *script_variables
script:
@@ -208,7 +433,6 @@ website:
- $MAKE -C docs install
- cd ..
- mv vroot/share/doc/libvirt/html/ website
- image: quay.io/libvirt/buildenv-libvirt-centos-8:latest
artifacts:
expose_as: 'Website'
name: 'website'
@@ -220,6 +444,7 @@ website:
codestyle:
stage: other
+ image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
before_script:
- *script_variables
script:
@@ -227,7 +452,6 @@ codestyle:
- cd build
- ../autogen.sh || (cat config.log && exit 1)
- $MAKE syntax-check
- image: quay.io/libvirt/buildenv-libvirt-centos-8:latest
# This artifact published by this job is downloaded to push to Weblate
@@ -235,6 +459,7 @@ codestyle:
#
https://gitlab.com/libvirt/libvirt/-/jobs/artifacts/master/download?job=p...
potfile:
stage: prebuild
+ image: $CI_REGISTRY_IMAGE/ci-centos-8:latest
only:
- master
before_script:
@@ -247,7 +472,6 @@ potfile:
- $MAKE -C po libvirt.pot
- cd ..
- mv build/po/libvirt.pot libvirt.pot
- image: quay.io/libvirt/buildenv-libvirt-centos-8:latest
artifacts:
expose_as: 'Potfile'
name: 'potfile'
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 :|