diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9838dafcb0476d217b1f7e9538a470501b21ddb3..afa4ab812f5cf66a10e7382b9991f8d7b82a0d38 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -64,22 +64,37 @@ composer:
 # The 4 validation jobs below are explicit about their artifact. This is not strictly needed
 # (last wins) but done for demonstration. https://docs.gitlab.com/ee/ci/jobs/job_control.html#fetch-artifacts-from-a-parallelmatrix-job
 #
+drupal-check:
+  stage: validate
+  allow_failure: true
+  dependencies:
+    - "composer: [8.1, $CORE_STABLE]"
+  rules:
+    - if: '$SKIP_DRUPAL_CHECK == "1"'
+      when: never
+    - when: on_success
+  before_script:
+    - composer require mglaman/drupal-check  --dev
+  script:
+    - vendor/bin/drupal-check --drupal-root $CI_PROJECT_DIR/$_WEB_ROOT $CI_PROJECT_DIR/$_WEB_ROOT/modules/custom/$CI_PROJECT_NAME
 
 phpcs:
-  # Set allow_failure to false so that the test fails for coding standards faults.
   allow_failure: false
   dependencies:
     - "composer: [8.1, $CORE_STABLE]"
 
 composer-lint:
+  allow_failure: false
   dependencies:
     - "composer: [8.1, $CORE_STABLE]"
 
 eslint:
+  allow_failure: false
   dependencies:
     - "composer: [8.1, $CORE_STABLE]"
 
 stylelint:
+  allow_failure: false
   dependencies:
     - "composer: [8.1, $CORE_STABLE]"