diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c70704c0a045db300eb68b0bc45fe3b46a45b2b7..5778972e35667c58ba12f92c0218eb8de9b517cc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,68 +1,49 @@
 include:
-  - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
-  - remote: 'https://gitlab.com/clci/gitlab-ci/-/raw/release/v1-stable/ci-cache.yml'
-  - remote: 'https://gitlab.com/clci/gitlab-ci/-/raw/release/v1-stable/clpm.yml'
-
-stages:
-  - test
-  - deploy
-
-.test:
-  extends:
-    - .clci ci cache per job
-  before_script:
-    - !reference [.clci clpm install, script]
-    - !reference [.clci clpm configure, script]
-    - $CLPM bundle install --no-resolve
-
-test abcl:
-  image: clfoundation/abcl
-  extends: .test
-  script:
-    - $CLPM bundle exec -- abcl --batch --load scripts/run-tests.lisp
-
-test ccl:
-  image: clfoundation/ccl
-  extends: .test
-  script:
-    - $CLPM bundle exec -- ccl -b -l scripts/run-tests.lisp
-
-test ecl:
-  image: clfoundation/ecl
-  extends: .test
-  script:
-    - $CLPM bundle exec -- ecl --shell scripts/run-tests.lisp
-
-test sbcl:
-  image: clfoundation/sbcl
-  extends: .test
-  script:
-    - $CLPM bundle exec -- sbcl --script scripts/run-tests.lisp
+  - project: 'clci/gitlab-ci'
+    ref: release/v2-dev
+    file:
+      - definitions.gitlab-ci.yml
+  - project: 'clci/gitlab-ci'
+    ref: release/v2-dev
+    file:
+      - test-pipeline.gitlab-ci.yml
+      - release-pipeline.gitlab-ci.yml
+    rules:
+      - if: '$PIPELINE_TYPE != "clpm-dep-update"'
+  - project: 'clci/gitlab-ci'
+    ref: release/v2-dev
+    file:
+      - clpm-dep-update-pipeline.gitlab-ci.yml
+    rules:
+      - if: '$PIPELINE_TYPE == "clpm-dep-update"'
+
+# This section is not strictly required, but prevents Gitlab CI from launching
+# multiple redundent pipelines when a Merge Request is opened.
+workflow:
+  rules:
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
+    - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
+      when: never
+    - if: '$CI_COMMIT_BRANCH'
+    - if: '$CI_COMMIT_TAG'
 
 generate docs:
   image: clfoundation/sbcl
-  extends: .test
+  extends:
+    - .clci sbcl
+    - .clci clpm job
   script:
     - $CLPM bundle exec -- sbcl --script scripts/generate-docs.lisp
   artifacts:
     paths:
       - doc/
 
-release:
-  stage: deploy
-  image: registry.gitlab.com/gitlab-org/release-cli:latest
-  script:
-    - echo 'release job'
-  release:
-    tag_name: $CI_COMMIT_TAG
-    description: './CHANGELOG.md'
-  rules:
-    - if: '$CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+)*(-.*)?$/'
-
 publish docs:
   stage: deploy
   rules:
     - if: '$CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+)*(-.*)?$/'
+  needs:
+    - "test blocker:release:clci"
   trigger: cl-tar/cl-tar-site
   variables:
     CL_TAR_FILE_TAG: $CI_COMMIT_TAG
diff --git a/scripts/ci-test.lisp b/scripts/ci-test.lisp
new file mode 120000
index 0000000000000000000000000000000000000000..218b1a8903d8879ca1f134646b984512247f1fad
--- /dev/null
+++ b/scripts/ci-test.lisp
@@ -0,0 +1 @@
+run-tests.lisp
\ No newline at end of file