debian-forge-composer/.gitlab-ci.yml
Ondřej Budai 974c258382 schutzbot: run openstack/* jobs on a dedicated runner
We have limited resources in openstack. We can only run about 40 concurrent VMs.
Previously, the rate limiting was kinda stupid:

All (aws and openstack) jobs were run using the same runner. This runner was
globally limited to 60 concurrent jobs. For openstack, the individual
images were also limited to a certain number of concurrent jobs in
the gitlab-ci-terraform repository so we don't hit the quota. This limit
was applied at runtime - the first thing that an openstack job did was to
wait for a slot. This job counted towards the global limit of jobs (60)
and thus was blocking one slot without doing any useful work.

Applying local limits to please global quota is stupid though. We have much
more demand for rhel-8.5 runner than for e.g. Fedora. It would be much
better to just use global limit that would map much nicely to global
quota.

Today, I've introduced a new runner with tag terraform/openstack. It's
currently limited to 20 concurrent jobs. All jobs running on openstack should
run on the new runner. This runner has the local rate limiting for openstack
disabled. This means that we can run 20 concurrent openstack jobs and it
doesn't matter which distribution they run.

To sum it up, this has two benefits:
- no local limits, we can just use the full quota
- no idling jobs waiting for an openstack slot

Note that the openstack global limit is currently set to 20, I will raise
it once all PRs are rebased on top of this change.

Side effect: I moved all libvirt test to openstack. I think this is overall
better because testing guest images on KVM makes more sense than testing them
on TCG.

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
2021-09-04 23:14:58 +02:00

369 lines
8.7 KiB
YAML

stages:
- init
- rpmbuild
- prepare-rhel-internal
- test
- cleanup
- finish
.base:
after_script:
- schutzbot/update_github_status.sh update
- schutzbot/save_journal.sh
- schutzbot/run_cloud_cleaner.sh
tags:
- terraform
artifacts:
paths:
- journal-log
- ci-artifacts
when: always
.terraform:
extends: .base
tags:
- terraform
.terraform/openstack:
extends: .base
tags:
- terraform/openstack
init:
stage: init
tags:
- shell
script:
- schutzbot/update_github_status.sh start
RPM:
stage: rpmbuild
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
script:
- sh "schutzbot/mockbuild.sh"
after_script:
- schutzbot/update_github_status.sh update
- schutzbot/save_journal.sh
parallel:
matrix:
- RUNNER:
- aws/fedora-33-x86_64
- aws/fedora-33-aarch64
- aws/fedora-34-x86_64
- aws/fedora-34-aarch64
- aws/rhel-8-x86_64
- aws/rhel-8-aarch64
- aws/centos-stream-8-x86_64
- aws/centos-stream-8-aarch64
- RUNNER:
- aws/rhel-8.5-x86_64
- aws/rhel-8.5-aarch64
- aws/rhel-9.0-beta-nightly-x86_64
- aws/rhel-9.0-beta-nightly-aarch64
INTERNAL_NETWORK: ["true"]
Container:
stage: rpmbuild
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
script:
- sh "schutzbot/containerbuild.sh"
parallel:
matrix:
- RUNNER:
- aws/fedora-33-x86_64
Prepare-rhel-internal:
stage: prepare-rhel-internal
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $NIGHTLY == "true"'
script:
- schutzbot/prepare-rhel-internal.sh
artifacts:
paths:
- rhel-8.json
- rhel8internal.repo
- rhel-8-beta.json
- COMPOSE_ID
parallel:
matrix:
- RUNNER:
- aws/rhel-8.5-x86_64
- aws/rhel-8.5-aarch64
INTERNAL_NETWORK: ["true"]
Base:
stage: test
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/base_tests.sh
parallel:
matrix:
- RUNNER:
- aws/fedora-33-x86_64
- aws/fedora-33-aarch64
# See COMPOSER-919
# - aws/fedora-34-x86_64
# - aws/fedora-34-aarch64
- aws/rhel-8-x86_64
- aws/rhel-8-aarch64
- aws/centos-stream-8-x86_64
- aws/centos-stream-8-aarch64
- RUNNER:
- aws/rhel-8.5-x86_64
- aws/rhel-8.5-aarch64
- aws/rhel-9.0-beta-nightly-x86_64
- aws/rhel-9.0-beta-nightly-aarch64
INTERNAL_NETWORK: ["true"]
artifacts:
paths:
- journal-log
- "*.repo"
when: always
Regression:
stage: test
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/regression.sh
parallel:
matrix:
- RUNNER:
- aws/fedora-33-x86_64
- aws/fedora-33-aarch64
# Enable f34 once we have rpmrepo snapshots for it
- aws/centos-stream-8-x86_64
- aws/centos-stream-8-aarch64
- RUNNER:
- aws/rhel-8-x86_64
- aws/rhel-8-aarch64
- aws/rhel-8.5-x86_64
- aws/rhel-8.5-aarch64
INTERNAL_NETWORK: ["true"]
artifacts:
paths:
- journal-log
- "*.repo"
when: always
OSTree:
stage: test
extends: .terraform/openstack
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/ostree.sh
parallel:
matrix:
- RUNNER:
- openstack/fedora-33-x86_64
# See COMPOSER-919
# - openstack/fedora-34-x86_64
- openstack/rhel-8-x86_64
- openstack/rhel-8.5-x86_64
New OSTree:
stage: test
extends: OSTree
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/ostree-ng.sh
parallel:
matrix:
- RUNNER:
- openstack/rhel-8.5-x86_64
OSTree simplified installer:
stage: test
extends: OSTree
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/ostree-simplified-installer.sh
parallel:
matrix:
- RUNNER:
- openstack/rhel-8.5-x86_64
OSTree raw image:
stage: test
extends: OSTree
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/ostree-raw-image.sh
parallel:
matrix:
- RUNNER:
- openstack/rhel-8.5-x86_64
.INTEGRATION_TESTS: &INTEGRATION_TESTS
SCRIPT:
- koji.sh
- aws.sh
- azure.sh
- vmware.sh
- filesystem.sh
Integration:
stage: test
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/${SCRIPT}
parallel:
matrix:
- <<: *INTEGRATION_TESTS
RUNNER:
- aws/fedora-33-x86_64
# See COMPOSER-919
# - aws/fedora-34-x86_64
- aws/centos-stream-8-x86_64
- <<: *INTEGRATION_TESTS
RUNNER:
- aws/rhel-8-x86_64
- aws/rhel-8.5-x86_64
INTERNAL_NETWORK: ["true"]
- SCRIPT:
- azure_hyperv_gen2.sh
RUNNER:
- aws/rhel-8.5-x86_64
INTERNAL_NETWORK: ["true"]
- SCRIPT:
- aws.sh
- azure.sh
RUNNER:
- aws/rhel-9.0-beta-nightly-x86_64
INTERNAL_NETWORK: ["true"]
.API_TESTS: &API_TESTS
TARGET:
- azure
- aws
- gcp
- aws.s3
API:
stage: test
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/api.sh ${TARGET}
parallel:
matrix:
- <<: *API_TESTS
RUNNER:
- aws/fedora-33-x86_64
# See COMPOSER-919
# - aws/fedora-34-x86_64
- aws/centos-stream-8-x86_64
- <<: *API_TESTS
RUNNER:
- aws/rhel-8-x86_64
- aws/rhel-8.5-x86_64
- aws/rhel-9.0-beta-nightly-x86_64
INTERNAL_NETWORK: ["true"]
libvirt:
stage: test
extends: .terraform/openstack
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/libvirt.sh
parallel:
matrix:
- RUNNER:
- openstack/fedora-33-x86_64
- openstack/centos-stream-8-x86_64
- RUNNER:
- openstack/rhel-8-x86_64
- openstack/rhel-8.5-x86_64
- openstack/rhel-9.0-beta-nightly-x86_64
INTERNAL_NETWORK: ["true"]
RHEL 9 on 8:
stage: test
extends: .terraform
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/koji.sh
variables:
RUNNER: aws/rhel-8-x86_64
INTERNAL_NETWORK: "true"
DISTRO_CODE: rhel-90
NIGHTLY_FAIL:
stage: finish
tags:
- shell
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $NIGHTLY == "true"'
when: on_failure
script:
- schutzbot/slack_notification.sh FAILED ":big-sad:"
NIGHTLY_SUCCESS:
stage: finish
tags:
- shell
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $NIGHTLY == "true"'
script:
- schutzbot/slack_notification.sh SUCCESS ":partymeow:"
Installer:
stage: test
extends: .terraform/openstack
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
- if: '$CI_PIPELINE_SOURCE == "schedule" && $RUNNER =~ /[\S]+rhel-[8-9]\.[\S]+/ && $NIGHTLY == "true"'
script:
- schutzbot/deploy.sh
- /usr/libexec/tests/osbuild-composer/installers.sh
parallel:
matrix:
- RUNNER:
- openstack/rhel-8.5-x86_64
SCHEDULED_CLOUD_CLEANER:
stage: cleanup
tags:
- terraform
variables:
RUNNER: aws/fedora-33-x86_64
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $CLEANUP == "true"'
script:
- schutzbot/deploy.sh
- schutzbot/scheduled_cloud_cleaner.sh
finish:
stage: finish
tags:
- shell
script:
- schutzbot/update_github_status.sh finish