gitlab: centralize the container tag name

We use a fixed container tag of 'latest' so that contributors' forks
don't end up with an ever growing number of containers as they work
on throwaway feature branches.

This fixed tag causes problems running CI upstream in stable staging
branches, however, because the stable staging branch will publish old
container content that clashes with that needed by primary staging
branch. This makes it impossible to reliably run CI pipelines in
parallel in upstream for different staging branches.

This introduces $QEMU_CI_CONTAINER_TAG global variable as a way to
change which tag container publishing uses. Initially it can be set
by contributors as a git push option if they want to override the
default use of 'latest' eg

  git push gitlab <branch> -o ci.variable=QEMU_CONTAINER_TAG=fish

this is useful if contributors need to run pipelines for different
branches concurrently in their forks.

Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20230608164018.2520330-2-berrange@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2023-06-08 17:40:14 +01:00 committed by Thomas Huth
parent ac9fd9b698
commit d4c7a56539
7 changed files with 22 additions and 10 deletions

View File

@ -1,4 +1,10 @@
variables:
# On stable branches this needs changing. Should also be
# overridden per pipeline if running pipelines concurrently
# for different branches in contributor forks.
QEMU_CI_CONTAINER_TAG: latest
# The order of rules defined here is critically important. # The order of rules defined here is critically important.
# They are evaluated in order and first match wins. # They are evaluated in order and first match wins.
# #

View File

@ -1,7 +1,7 @@
.native_build_job_template: .native_build_job_template:
extends: .base_job_template extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG
before_script: before_script:
- JOBS=$(expr $(nproc) + 1) - JOBS=$(expr $(nproc) + 1)
script: script:
@ -40,7 +40,7 @@
.common_test_job_template: .common_test_job_template:
extends: .base_job_template extends: .base_job_template
stage: test stage: test
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG
script: script:
- scripts/git-submodule.sh update roms/SLOF - scripts/git-submodule.sh update roms/SLOF
- meson subprojects download $(cd build/subprojects && echo *) - meson subprojects download $(cd build/subprojects && echo *)

View File

@ -532,7 +532,7 @@ build-without-defaults:
build-libvhost-user: build-libvhost-user:
extends: .base_job_template extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/fedora:latest image: $CI_REGISTRY_IMAGE/qemu/fedora:$QEMU_CI_CONTAINER_TAG
needs: needs:
job: amd64-fedora-container job: amd64-fedora-container
script: script:
@ -572,7 +572,7 @@ build-tools-and-docs-debian:
# of what topic branch they're currently using # of what topic branch they're currently using
pages: pages:
extends: .base_job_template extends: .base_job_template
image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:latest image: $CI_REGISTRY_IMAGE/qemu/debian-amd64:$QEMU_CI_CONTAINER_TAG
stage: test stage: test
needs: needs:
- job: build-tools-and-docs-debian - job: build-tools-and-docs-debian

View File

@ -5,7 +5,8 @@
services: services:
- docker:dind - docker:dind
before_script: before_script:
- export TAG="$CI_REGISTRY_IMAGE/qemu/$NAME:latest" - export TAG="$CI_REGISTRY_IMAGE/qemu/$NAME:$QEMU_CI_CONTAINER_TAG"
# Always ':latest' because we always use upstream as a common cache source
- export COMMON_TAG="$CI_REGISTRY/qemu-project/qemu/qemu/$NAME:latest" - export COMMON_TAG="$CI_REGISTRY/qemu-project/qemu/qemu/$NAME:latest"
- docker login $CI_REGISTRY -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" - docker login $CI_REGISTRY -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
- until docker info; do sleep 1; done - until docker info; do sleep 1; done

View File

@ -1,7 +1,7 @@
.cross_system_build_job: .cross_system_build_job:
extends: .base_job_template extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG
timeout: 80m timeout: 80m
script: script:
- mkdir build - mkdir build
@ -27,7 +27,7 @@
.cross_accel_build_job: .cross_accel_build_job:
extends: .base_job_template extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG
timeout: 30m timeout: 30m
script: script:
- mkdir build - mkdir build
@ -39,7 +39,7 @@
.cross_user_build_job: .cross_user_build_job:
extends: .base_job_template extends: .base_job_template
stage: build stage: build
image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:$QEMU_CI_CONTAINER_TAG
script: script:
- mkdir build - mkdir build
- cd build - cd build

View File

@ -26,7 +26,7 @@ check-dco:
check-python-minreqs: check-python-minreqs:
extends: .base_job_template extends: .base_job_template
stage: test stage: test
image: $CI_REGISTRY_IMAGE/qemu/python:latest image: $CI_REGISTRY_IMAGE/qemu/python:$QEMU_CI_CONTAINER_TAG
script: script:
- make -C python check-minreqs - make -C python check-minreqs
variables: variables:
@ -37,7 +37,7 @@ check-python-minreqs:
check-python-tox: check-python-tox:
extends: .base_job_template extends: .base_job_template
stage: test stage: test
image: $CI_REGISTRY_IMAGE/qemu/python:latest image: $CI_REGISTRY_IMAGE/qemu/python:$QEMU_CI_CONTAINER_TAG
script: script:
- make -C python check-tox - make -C python check-tox
variables: variables:

View File

@ -70,6 +70,11 @@ in a handful of namespaces
repository CI settings, or as git push variables, to influence repository CI settings, or as git push variables, to influence
which jobs get run in a pipeline which jobs get run in a pipeline
* QEMU_CI_CONTAINER_TAG - the tag used to publish containers
in stage 1, for use by build jobs in stage 2. Defaults to
'latest', but if running pipelines for different branches
concurrently, it should be overridden per pipeline.
* nnn - other misc variables not falling into the above * nnn - other misc variables not falling into the above
categories, or using different names for historical reasons categories, or using different names for historical reasons
and not yet converted. and not yet converted.