diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c3cb56765e1eb330d4001fc8a53c3df198c44394..abbbdca1be877d5087047343ae476ecefebb6e9c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,36 +7,56 @@ variables:
 
 ##########################################################################################################
 
-### PIPELINE DEFINITION
+## PIPELINE DEFINITION
 stages:
   - build
+  - test
   - release
 
 ##########################################################################################################
 
-### BUILD SECTION
+### COMMON SECTION
+.common: &common
+  image: registry.cyberbrain.pw/docker/docker
+  services:
+    - registry.cyberbrain.pw/docker/dind
+  before_script:
+    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
+
+##########################################################################################################
+
+#### BUILD SECTION
 build:
+  <<: *common
   stage: build
-  image: docker:latest
-  services:
-    - docker:dind
   variables:
     GIT_DEPTH: 1
     DIRECTORY: '.'
-  before_script:
-    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
   script:
     - docker build -t "${CI_REGISTRY_IMAGE}:temp-${CI_PIPELINE_IID}" -f "./${DIRECTORY}/Dockerfile" "./${DIRECTORY}"
     - docker push "${CI_REGISTRY_IMAGE}:temp-$CI_PIPELINE_IID"
 
 ##########################################################################################################
 
-### RELEASE SECTION
+#### TEST SECTION
+test:
+  <<: *common
+  stage: test
+  variables:
+    GIT_STRATEGY: "none"
+    GIT_DEPTH: 0
+  script:
+    - docker run --rm "${CI_REGISTRY_IMAGE}:temp-$CI_PIPELINE_IID" ansible --version
+    - docker run --rm "${CI_REGISTRY_IMAGE}:temp-$CI_PIPELINE_IID" ansible -m ping localhost
+    - docker run --rm "${CI_REGISTRY_IMAGE}:temp-$CI_PIPELINE_IID" ansible-lint --version
+    - docker run --rm "${CI_REGISTRY_IMAGE}:temp-$CI_PIPELINE_IID" ansible-lint .
+
+##########################################################################################################
+
+#### RELEASE SECTION
 release:
+  <<: *common
   stage: release
-  image: docker:latest
-  services:
-    - docker:dind
   variables:
     GIT_STRATEGY: "none"
     GIT_DEPTH: 0
@@ -44,8 +64,6 @@ release:
     - /^development$/
     - /^staging$/
     - /^master$/
-  before_script:
-    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
   script:
     - export VERSION_OLD=temp-$CI_PIPELINE_IID
     - export VERSION_NEW=$CI_COMMIT_REF_SLUG