On Fri, Apr 07, 2023 at 03:52:51PM +0100, Camilla Conte wrote: > Configure Gitlab CI to run on Kubernetes > according to the official documentation. > https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#docker-in-docker-with-tls-enabled-in-kubernetes > > These changes are needed because of the CI jobs > using Docker-in-Docker (dind). > As soon as Docker-in-Docker is replaced with Kaniko, > these changes can be reverted. > > I documented what I did to set up the Kubernetes runner on the wiki: > https://wiki.qemu.org/Testing/CI/KubernetesRunners > > Signed-off-by: Camilla Conte <cco...@redhat.com> > --- > .gitlab-ci.d/container-template.yml | 6 +++--- > .gitlab-ci.d/default.yml | 3 +++ > .gitlab-ci.d/opensbi.yml | 8 +++----- > .gitlab-ci.d/qemu-project.yml | 17 +++++++++++++++++ > 4 files changed, 26 insertions(+), 8 deletions(-) > create mode 100644 .gitlab-ci.d/default.yml > > diff --git a/.gitlab-ci.d/container-template.yml > b/.gitlab-ci.d/container-template.yml > index 519b8a9482..f55a954741 100644 > --- a/.gitlab-ci.d/container-template.yml > +++ b/.gitlab-ci.d/container-template.yml > @@ -1,14 +1,14 @@ > .container_job_template: > extends: .base_job_template > - image: docker:stable > + image: docker:20.10.16 > stage: containers > services: > - - docker:dind > + - docker:20.10.16-dind > before_script: > - export TAG="$CI_REGISTRY_IMAGE/qemu/$NAME:latest" > - export COMMON_TAG="$CI_REGISTRY/qemu-project/qemu/qemu/$NAME:latest" > - apk add python3 > - - docker info > + - until docker info; do sleep 1; done > - docker login $CI_REGISTRY -u "$CI_REGISTRY_USER" -p > "$CI_REGISTRY_PASSWORD" > script: > - echo "TAG:$TAG" > diff --git a/.gitlab-ci.d/default.yml b/.gitlab-ci.d/default.yml > new file mode 100644 > index 0000000000..292be8b91c > --- /dev/null > +++ b/.gitlab-ci.d/default.yml > @@ -0,0 +1,3 @@ > +default: > + tags: > + - $RUNNER_TAG
Can we just put this in base.yml instead of creating a new file. > diff --git a/.gitlab-ci.d/opensbi.yml b/.gitlab-ci.d/opensbi.yml > index 9a651465d8..5b0b47b57b 100644 > --- a/.gitlab-ci.d/opensbi.yml > +++ b/.gitlab-ci.d/opensbi.yml > @@ -42,17 +42,15 @@ > docker-opensbi: > extends: .opensbi_job_rules > stage: containers > - image: docker:stable > + image: docker:20.10.16 > services: > - - docker:stable-dind > + - docker:20.10.16-dind Can you elaborate on this ? I know the docs about use that particular version tag, but they don't appear to explain why. If this is not actually a hard requirements, we should keep using the stable tag. > variables: > GIT_DEPTH: 3 > IMAGE_TAG: $CI_REGISTRY_IMAGE:opensbi-cross-build > - # We don't use TLS > - DOCKER_HOST: tcp://docker:2375 > - DOCKER_TLS_CERTDIR: "" So IIUC, this was always redundant when using gitlab CI. We should just remove these in a standalone commit. > before_script: > - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY > + - until docker info; do sleep 1; done Was this really needed ? The docs don't show that, and docker login is synchronous, so I wouldn't expect us to them poll on 'docker info'. In container-template.yml we in fact do the reverse - docker info - docker login $CI_REGISTRY -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" imho best make this opensbi.yml file match contanier-template.yml, and could be part of the same cleanup commit that removes thhose two docker env vars. > script: > - docker pull $IMAGE_TAG || true > - docker build --cache-from $IMAGE_TAG --tag > $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA > diff --git a/.gitlab-ci.d/qemu-project.yml b/.gitlab-ci.d/qemu-project.yml > index a7ed447fe4..57b175f5c2 100644 > --- a/.gitlab-ci.d/qemu-project.yml > +++ b/.gitlab-ci.d/qemu-project.yml > @@ -1,7 +1,24 @@ > # This file contains the set of jobs run by the QEMU project: > # https://gitlab.com/qemu-project/qemu/-/pipelines > > +variables: > + RUNNER_TAG: "" > + > +workflow: > + rules: > + # Set additional variables when running on Kubernetes. > + # https://wiki.qemu.org/Testing/CI/KubernetesRunners > + - if: $RUNNER_TAG == "k8s" > + variables: > + DOCKER_HOST: tcp://docker:2376 > + DOCKER_TLS_CERTDIR: "/certs" > + DOCKER_TLS_VERIFY: 1 > + DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client" Is there anyway we can get the runner itself to set these correctly by default ? IMHO the ideal would be that the k8s runners are registerd with the qemu project to run *any* jobs without requiring tags. That way the runners will "just work" when share runners are unavailable/exhausted, like we have with Eldon's runner 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 :|