diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ac71ad89a1b66dd7377f72477014257dc312a836..0159aef9e6e796fe015422062b6fc8a821c365d7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,7 +40,6 @@ include:
 ################
 
 variables:
-  _TARGET_PHP: "8.2"
   COMPOSER: composer.json
   # Let composer know what self.version means.
   COMPOSER_ROOT_VERSION: "${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}${CI_COMMIT_BRANCH}-dev"
@@ -63,55 +62,71 @@ variables:
     strategy: depend
     include:
       - local: .gitlab-ci/pipeline.yml
+
+.run-on-commit: &run-on-commit
   rules:
+    - if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_ROOT_NAMESPACE == "project"
     - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+      when: manual
+      allow_failure: true
 
-.run-manually: &run-manually
-  when: manual
-
-'PHP 8.2 MySQL 5.7':
-  <<: [ *default-stage, *run-manually ]
-  variables:
-    _TARGET_DB_TYPE: "mysql"
-    _TARGET_DB_VERSION: "5.7"
-    _DB_IMAGE: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB_TYPE-$_TARGET_DB_VERSION:production
+.run-daily: &run-daily
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_ROOT_NAMESPACE == "project"
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+      when: manual
+      allow_failure: true
 
+# Default configuration.
 'PHP 8.2 MySQL 8':
   <<: *default-stage
   variables:
-    _TARGET_DB_TYPE: "mysql"
-    _TARGET_DB_VERSION: "8"
-    _DB_IMAGE: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB_TYPE-$_TARGET_DB_VERSION:production
+    _TARGET_PHP: "8.2"
+    _TARGET_DB: "mysql-8"
   rules:
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
     - if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_ROOT_NAMESPACE == "project"
-    - if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_ROOT_NAMESPACE == "project"
-    - if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_ROOT_NAMESPACE == "project"
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
 
-'PHP 8.2 PostgreSQL 13.5':
-  <<: [ *default-stage, *run-manually ]
+# Run on commit, or manually.
+'PHP 8.1 MySQL 5.7':
+  <<: [ *default-stage, *run-on-commit ]
   variables:
-    _TARGET_DB_TYPE: "pgsql"
-    _TARGET_DB_VERSION: "13.5"
-    _DB_IMAGE: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB_TYPE-$_TARGET_DB_VERSION:production
+    _TARGET_PHP: "8.1"
+    _TARGET_DB: "mysql-5.7"
 
 'PHP 8.2 PostgreSQL 14.1':
-  <<: [ *default-stage, *run-manually ]
+  <<: [ *default-stage, *run-on-commit ]
   variables:
-    _TARGET_DB_TYPE: "pgsql"
-    _TARGET_DB_VERSION: "14.1"
-    _DB_IMAGE: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB_TYPE-$_TARGET_DB_VERSION:production
+    _TARGET_PHP: "8.2"
+    _TARGET_DB: "pgsql-14.1"
+
+# 'PHP 8.2 SQLite 3.34.0':
+#   <<: [ *default-stage, *run-on-commit ]
+#   variables:
+#     _TARGET_PHP: "8.2"
+#     _TARGET_DB: "php-$_TARGET_PHP-apache"
 
-# 'PHP 8.2 SQLite 3.26.0':
-#   <<: [ *default-stage, *run-manually ]
+# Run daily, or manually.
+# 'PHP 8.1 MariaDB 10.3.22':
+#   <<: [ *default-stage, *run-daily ]
 #   variables:
-#     _TARGET_DB_TYPE: "sqlite"
-#     _TARGET_DB_VERSION: "3.26.0"
-#     _DB_IMAGE: $_CONFIG_DOCKERHUB_ROOT/php-$_TARGET_PHP-apache:production
+#     _TARGET_PHP: "8.1"
+#     _TARGET_DB: "mariadb-10.3.22"
+
+# 'PHP 8.1 MySQL 5.7 with updated deps':
+#   <<: [ *default-stage, *run-daily ]
+#   variables:
+#     _TARGET_PHP: "8.1"
+#     _TARGET_DB: "mysql-5.7"
+
+'PHP 8.1 PostgreSQL 14.1':
+  <<: [ *default-stage, *run-daily ]
+  variables:
+    _TARGET_PHP: "8.1"
+    _TARGET_DB: "pgsql-14.1"
 
-# 'PHP 8.2 MariaDB 10.3.22':
-#   <<: [ *default-stage, *run-manually ]
+# 'PHP 8.1 SQLite 3.27.0':
+#   <<: [ *default-stage, *run-daily ]
 #   variables:
-#     _TARGET_DB_TYPE: "mariadb"
-#     _TARGET_DB_VERSION: "10.3.22"
-#     _DB_IMAGE: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB_TYPE-$_TARGET_DB_VERSION:production
+#     _TARGET_PHP: "8.1"
+#     _TARGET_DB: "php-$_TARGET_PHP-apache"
diff --git a/.gitlab-ci/pipeline.yml b/.gitlab-ci/pipeline.yml
index 1bdae7bf0c9834c8f24409547c8d3ef12c7bc5bf..6c17522d5821a647d153dfc7677c9dac3805e1db 100644
--- a/.gitlab-ci/pipeline.yml
+++ b/.gitlab-ci/pipeline.yml
@@ -116,8 +116,6 @@ stages:
   MYSQL_DATABASE: mysql
   MYSQL_USER: drupaltestbot
   MYSQL_PASSWORD: drupaltestbotpw
-  MARIADB_TAG: $_TARGET_DB_VERSION
-  POSTGRES_TAG: $_TARGET_DB_VERSION
   POSTGRES_DB: drupaltestbot
   POSTGRES_USER: drupaltestbot
   POSTGRES_PASSWORD: drupaltestbotpw
@@ -126,7 +124,7 @@ stages:
   CI_PARALLEL_NODE_TOTAL: $CI_NODE_TOTAL
 
 .with-database: &with-database
-  name: $_DB_IMAGE
+  name: $_CONFIG_DOCKERHUB_ROOT/$_TARGET_DB:production
   alias: database
 
 .with-chrome: &with-chrome
@@ -158,10 +156,10 @@ stages:
   script:
     # Determine DB driver.
     - |
-      [[ $_TARGET_DB_TYPE == "sqlite" ]] && export SIMPLETEST_DB=sqlite://localhost/subdirectory/sites/default/files/db.sqlite?module=sqlite
-      [[ $_TARGET_DB_TYPE == "mysql" ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
-      [[ $_TARGET_DB_TYPE == "mariadb" ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
-      [[ $_TARGET_DB_TYPE == "pgsql" ]] && export SIMPLETEST_DB=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
+      [[ $_TARGET_DB == php* ]] && export SIMPLETEST_DB=sqlite://localhost/subdirectory/sites/default/files/db.sqlite?module=sqlite
+      [[ $_TARGET_DB == mysql* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
+      [[ $_TARGET_DB == mariadb* ]] && export SIMPLETEST_DB=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
+      [[ $_TARGET_DB == pgsql* ]] && export SIMPLETEST_DB=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
     - export
     - mkdir -p ./sites/simpletest ./sites/default/files ./build/logs/junit /var/www/.composer
     - chown -R www-data:www-data ./sites ./build/logs/junit ./vendor /var/www/
@@ -183,15 +181,6 @@ stages:
 # Build Jobs
 ################
 
-'ℹ️ Output build parameters':
-  <<: *default-job-settings
-  stage: 🏗️ Build
-  script:
-    - echo "Checking variables"
-    - echo $_TARGET_PHP
-    - echo $_TARGET_DB_TYPE
-    - echo $_TARGET_DB_VERSION
-
 '📦️ Composer':
   <<: *default-job-settings
   stage: 🏗️ Build
@@ -335,10 +324,10 @@ stages:
   script:
     # Determine DB driver.
     - |
-      [[ $_TARGET_DB_TYPE == "sqlite" ]] && export DRUPAL_TEST_DB_URL=sqlite://localhost/subdirectory/sites/default/files/db.sqlite?module=sqlite
-      [[ $_TARGET_DB_TYPE == "mysql" ]] && export DRUPAL_TEST_DB_URL=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
-      [[ $_TARGET_DB_TYPE == "mariadb" ]] && export DRUPAL_TEST_DB_URL=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
-      [[ $_TARGET_DB_TYPE == "pgsql" ]] && export DRUPAL_TEST_DB_URL=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
+      [[ $_TARGET_DB == php* ]] && export DRUPAL_TEST_DB_URL=sqlite://localhost/subdirectory/sites/default/files/db.sqlite?module=sqlite
+      [[ $_TARGET_DB == mysql* ]] && export DRUPAL_TEST_DB_URL=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
+      [[ $_TARGET_DB == mariadb* ]] && export DRUPAL_TEST_DB_URL=mysql://$MYSQL_USER:$MYSQL_PASSWORD@database/$MYSQL_DATABASE?module=mysql
+      [[ $_TARGET_DB == pgsql* ]] && export DRUPAL_TEST_DB_URL=pgsql://$POSTGRES_USER:$POSTGRES_PASSWORD@database/$POSTGRES_DB?module=pgsql
     - export
     - cp ./core/.env.example ./core/.env
     # dotenv-safe/config does not support environment variables