diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fe3854d4f24810ddb1f8c4c44003639390925ab8..acee39aae629ad732192bd3d69b40842bf1a3483 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,16 +12,17 @@ default:
     - source /opt/molecule/bin/activate
     - ansible --version
     - molecule --version
+  after_script:
+    - source /opt/molecule/bin/activate
+    - molecule destroy --scenario-name ${SCENARIO}
 variables:
   ANSIBLE_FORCE_COLOR: 'true'
   PY_COLORS: '1'
 
-test-job-debian12:
+.job_template: &job_configuration   # Hidden yaml configuration that defines an anchor named 'job_configuration'
   stage: test
   tags:
     - "shell"
-  variables:
-    SCENARIO: "virtualbox_debian12"
   script:
     # make sure that Ansible Vaults are present and can be decrypted
     - echo "${VAULT_INSTALL_COMMON}" > ../lza_install_common.pass
@@ -41,52 +42,17 @@ test-job-debian12:
     # - molecule verify --scenario-name ${SCENARIO}
     - molecule destroy --scenario-name ${SCENARIO}
 
+test-job-debian12:
+  variables:
+    SCENARIO: "virtualbox_debian12"
+  <<: *job_configuration           # Add the contents of the 'job_configuration' alias
+
 test-job-alma8:
-  stage: test
-  tags:
-    - "shell"
   variables:
     SCENARIO: "virtualbox_alma8"
-  script:
-    # make sure that Ansible Vaults are present and can be decrypted
-    - echo "${VAULT_INSTALL_COMMON}" > ../lza_install_common.pass
-    - export ANSIBLE_VAULT_PASSWORD_FILE=../lza_install_common.pass
-    - rm -rf ../ansible_vaults/
-    - git clone https://gitlab+deploy-token-25:${VAULT_ACCESS_TOKEN}@git.slub-dresden.de/slub-referat-2-3/ansible_vaults.git ../ansible_vaults/; \
-    # run Molecule tests
-    - molecule syntax --scenario-name ${SCENARIO}
-    # We cannot use `molecule lint` anymore because:
-    # - https://github.com/ansible-community/molecule/pull/3802 "Remove lint command"
-    # - https://github.com/ansible-community/molecule/discussions/3825#discussioncomment-4908366
-    - yamllint --strict --format colored ./
-    - ansible-lint --format full --profile production --strict --force-color ./
-    - molecule create --scenario-name ${SCENARIO}
-    - molecule converge --scenario-name ${SCENARIO}
-    - molecule idempotence --scenario-name ${SCENARIO}
-    # - molecule verify --scenario-name ${SCENARIO}
-    - molecule destroy --scenario-name ${SCENARIO}
+  <<: *job_configuration           # Add the contents of the 'job_configuration' alias
 
 test-job-ubuntu2204:
-  stage: test
-  tags:
-    - "shell"
   variables:
     SCENARIO: "virtualbox_ubuntu2204"
-  script:
-    # make sure that Ansible Vaults are present and can be decrypted
-    - echo "${VAULT_INSTALL_COMMON}" > ../lza_install_common.pass
-    - export ANSIBLE_VAULT_PASSWORD_FILE=../lza_install_common.pass
-    - rm -rf ../ansible_vaults/
-    - git clone https://gitlab+deploy-token-25:${VAULT_ACCESS_TOKEN}@git.slub-dresden.de/slub-referat-2-3/ansible_vaults.git ../ansible_vaults/; \
-    # run Molecule tests
-    - molecule syntax --scenario-name ${SCENARIO}
-    # We cannot use `molecule lint` anymore because:
-    # - https://github.com/ansible-community/molecule/pull/3802 "Remove lint command"
-    # - https://github.com/ansible-community/molecule/discussions/3825#discussioncomment-4908366
-    - yamllint --strict --format colored ./
-    - ansible-lint --format full --profile production --strict --force-color ./
-    - molecule create --scenario-name ${SCENARIO}
-    - molecule converge --scenario-name ${SCENARIO}
-    - molecule idempotence --scenario-name ${SCENARIO}
-    # - molecule verify --scenario-name ${SCENARIO}
-    - molecule destroy --scenario-name ${SCENARIO}
+  <<: *job_configuration           # Add the contents of the 'job_configuration' alias