Welcome to the matrix

This refactors our custom image building to utilize GitLab parallel jobs
with a matrix.

This makes it easier to parse what kind of matrix we are going to build
in our docker images. Furthermore instead of splitting the image name,
we can simply pull the versions of the tools from the environment
variables.

The ultimative reason: Dogfooding
This commit is contained in:
Lukas Eipert 2021-11-26 17:06:29 +01:00
parent 32d1908296
commit a9cf88c469
11 changed files with 325 additions and 292 deletions

View file

@ -0,0 +1,108 @@
.test_build: &test_build
extends: .test
script:
# Hack to set an array in /bin/sh
# http://unix.stackexchange.com/a/137571
- set -- $CI_JOB_NAME
- docker pull --quiet "$CI_REGISTRY_IMAGE:$1" || true
- docker build --cache-from="$CI_REGISTRY_IMAGE:$1" -f "Dockerfile.$1" .
.build_and_deploy: &build_and_deploy
extends: .deploy
script:
# Hack to set an array in /bin/sh
# http://unix.stackexchange.com/a/137571
- set -- $CI_JOB_NAME
- docker pull --quiet "$CI_REGISTRY_IMAGE:$1" || true
- docker build --cache-from="$CI_REGISTRY_IMAGE:$1" --label "ci_pipeline_url=$CI_PIPELINE_URL" --label "ci_job_url=$CI_JOB_URL" -t "$CI_REGISTRY_IMAGE:$1" -f "Dockerfile.$1" .
- docker push "$CI_REGISTRY_IMAGE:$1"
# Used by https://gitlab.com/gitlab-org/charts/auto-deploy-app/-/blob/master/.gitlab-ci.yml
alpine-helm test: *test_build
danger test: *test_build
danger-ruby-2.6.6 test: *test_build
gitlab-charts-build-base test: *test_build
gitlab-charts-build-base-helm-3 test: *test_build
gitlab-helm3.5-kubectl1.17 test: *test_build
gitlab-qa-ruby-2.7 test: *test_build
gitlab-qa-ruby-3.0 test: *test_build
gitlab-qa-alpine-ruby-2.7 test: *test_build
gitlab-qa-alpine-ruby-3.0 test: *test_build
gitlab-puppeteer test: *test_build
kaniko test: *test_build
omnibus-gitlab-bionic test: *test_build
omnibus-gitlab-centos7 test: *test_build
omnibus-gitlab-centos8 test: *test_build
omnibus-gitlab-jessie test: *test_build
omnibus-gitlab-opensuse15.1 test: *test_build
omnibus-gitlab-opensuse15.2 test: *test_build
omnibus-gitlab-opensuse15.3 test: *test_build
omnibus-gitlab-stretch test: *test_build
omnibus-gitlab-buster test: *test_build
omnibus-gitlab-xenial test: *test_build
omnibus-gitlab-focal test: *test_build
omnibus-gitlab-depscan test: *test_build
omnibus-gitlab-cve-search test: *test_build
release-tools test: *test_build
sitespeed-gitlab test: *test_build
ubi-release test: *test_build
www-gitlab-com-3.0 test: *test_build
build-git: *test_build
# Used by GitLab: https://gitlab.com/gitlab-org/gitlab/-/blob/13-8-stable-ee/lib/gitlab/ci/templates/Terraform.gitlab-ci.yml
terraform test: *test_build
# Used by go projects for linting https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/go_guide/index.md#automatic-linting
golangci-lint-alpine test: *test_build
# Used by gitlab-operator: https://gitlab.com/gitlab-org/gl-openshift/gitlab-operator
gitlab-operator-build-base test: *test_build
alpine-bash-jq-curl-git test: *test_build
# Used by frontend related tasks for linting GraphQL
apollo test: *test_build
# Used by https://gitlab.com/gitlab-org/charts/auto-deploy-app/-/blob/master/.gitlab-ci.yml
alpine-helm push: *build_and_deploy
danger push: *build_and_deploy
danger-ruby-2.6.6 push: *build_and_deploy
gitlab-charts-build-base push: *build_and_deploy
gitlab-charts-build-base-helm-3 push: *build_and_deploy
gitlab-helm3.5-kubectl1.17 push: *build_and_deploy
gitlab-qa-ruby-2.7 push: *build_and_deploy
gitlab-qa-ruby-3.0 push: *build_and_deploy
gitlab-qa-alpine-ruby-2.7 push: *build_and_deploy
gitlab-qa-alpine-ruby-3.0 push: *build_and_deploy
gitlab-puppeteer push: *build_and_deploy
kaniko push: *build_and_deploy
omnibus-gitlab-bionic push: *build_and_deploy
omnibus-gitlab-centos7 push: *build_and_deploy
omnibus-gitlab-centos8 push: *build_and_deploy
omnibus-gitlab-jessie push: *build_and_deploy
omnibus-gitlab-opensuse15.1 push: *build_and_deploy
omnibus-gitlab-opensuse15.2 push: *build_and_deploy
omnibus-gitlab-opensuse15.3 push: *build_and_deploy
omnibus-gitlab-stretch push: *build_and_deploy
omnibus-gitlab-buster push: *build_and_deploy
omnibus-gitlab-xenial push: *build_and_deploy
omnibus-gitlab-focal push: *build_and_deploy
omnibus-gitlab-depscan push: *build_and_deploy
omnibus-gitlab-cve-search push: *build_and_deploy
release-tools push: *build_and_deploy
sitespeed-gitlab push: *build_and_deploy
ubi-release push: *build_and_deploy
www-gitlab-com-3.0 push: *build_and_deploy
build-git push: *build_and_deploy
# Used by GitLab: https://gitlab.com/gitlab-org/gitlab/-/blob/13-8-stable-ee/lib/gitlab/ci/templates/Terraform.gitlab-ci.yml
terraform push: *build_and_deploy
# Used by go projects for linting https://gitlab.com/gitlab-org/gitlab/blob/master/doc/development/go_guide/index.md#automatic-linting
golangci-lint-alpine push: *build_and_deploy
# Used by gitlab-operator: https://gitlab.com/gitlab-org/gl-openshift/gitlab-operator
gitlab-operator-build-base push: *build_and_deploy
alpine-bash-jq-curl-git push: *build_and_deploy
# Used by frontend related tasks for linting GraphQL
apollo push: *build_and_deploy

View file

@ -0,0 +1,45 @@
# Used by customers-gitlab-com rspec job: https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/staging/.gitlab-ci.yml
.customers-matrix:
variables:
LFS: '2.9'
CHROME: '89'
NODE: '12.22'
YARN: '1.22'
POSTGRESQL: '9.5'
parallel:
matrix:
- RUBY: ['2.6.6', '2.7', '2.7.2']
GIT: ['2.31', '2.33']
DOCKER: ['19.03.1', '']
customers test:
extends:
- .customers-matrix
- .test_custom
customers push:
extends:
- .customers-matrix
- .build_and_deploy_custom
# Used by customers-gitlab-com qa e2e test: https://gitlab.com/gitlab-org/customers-gitlab-com/-/blob/staging/.gitlab/ci/e2e.gitlab-ci.yml
.customers-qa-matrix:
variables:
CHROME: '89'
NODE: '12.22'
YARN: '1.22'
DOCKER: '19.03.1'
parallel:
matrix:
- RUBY: ['2.7', '2.7.2']
GIT: ['2.31', '2.33']
customers-qa-assets test:
extends:
- .customers-qa-matrix
- .test_custom
customers-qa-assets push:
extends:
- .customers-qa-matrix
- .build_and_deploy_custom

View file

@ -0,0 +1,25 @@
# Run test job always
.test:
stage: test
rules:
- when: always
# Run build job only on a default branch when triggered manually
.deploy:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: manual
.test_custom:
extends: .test
script:
- ./scripts/custom-docker-build
rules:
- when: always
.build_and_deploy_custom:
extends: .deploy
script:
- ./scripts/custom-docker-build --label "ci_pipeline_url=$CI_PIPELINE_URL" --label "ci_job_url=$CI_JOB_URL" -t "$CI_REGISTRY_IMAGE:$1"
- ./scripts/custom-docker-push

View file

@ -0,0 +1,19 @@
# Used by Gitaly: https://gitlab.com/gitlab-org/gitaly/blob/master/.gitlab-ci.yml
.gitaly-matrix:
parallel:
matrix:
- RUBY: ['2.7', '3.0']
GOLANG: ['1.16', '1.17']
GIT: ['2.31', '2.33']
PGBOUNCER: ['1.14', '']
gitaly:test:
needs: []
extends:
- .gitaly-matrix
- .test_custom
gitaly push:
extends:
- .gitaly-matrix
- .build_and_deploy_custom

View file

@ -0,0 +1,46 @@
# Used by GitLab: https://gitlab.com/gitlab-org/gitlab/blob/master/.gitlab-ci.yml
.gitlab-matrix:
variables:
GOLANG: '1.16'
LFS: '2.9'
CHROME: '89'
NODE: '14.15'
YARN: '1.22'
GRAPHICSMAGICK: '1.3.36'
parallel:
matrix:
- RUBY: ['2.7.patched', '3.0.patched']
GIT: ['2.31', '2.33']
POSTGRESQL: ['11', '12', '13']
gitlab test:
extends:
- .gitlab-matrix
- .test_custom
gitlab push:
extends:
- .gitlab-matrix
- .build_and_deploy_custom
# Used by GitLab's compile-production-assets and compile-test-assets jobs
.gitlab-assets-matrix:
variables:
LFS: '2.9'
NODE: '14.15'
YARN: '1.22'
GRAPHICSMAGICK: '1.3.36'
parallel:
matrix:
- RUBY: ['2.7', '3.0']
GIT: ['2.31', '2.33']
gitlab-assets test:
extends:
- .gitlab-assets-matrix
- .test_custom
gitlab-assets push:
extends:
- .gitlab-assets-matrix
- .build_and_deploy_custom

24
.gitlab/ci/kas.images.yml Normal file
View file

@ -0,0 +1,24 @@
# Used by GitLab/KAS integration tests
.gitlab-kas-matrix:
variables:
GOLANG: '1.16'
LFS: '2.9'
CHROME: '89'
NODE: '14.15'
YARN: '1.22'
GRAPHICSMAGICK: '1.3.36'
GIT: '2.31'
POSTGRESQL: '12'
parallel:
matrix:
- RUBY: ['2.7.2.patched', '2.7.patched', '3.0.patched']
gitlab-kas test:
extends:
- .gitlab-kas-matrix
- .test_custom
gitlab-kas push:
extends:
- .gitlab-kas-matrix
- .build_and_deploy_custom