diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c38f56968aed1f151139f7f15990ec993d94057e..885b791421f5ddef4014692409e9358d7e6c507d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -39,6 +39,10 @@ variables:
   CPPINT: ""
   MYSQLBACKEND: ""
 
+workflow:
+  rules:
+    - if: $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_REF_NAME != $CI_COMMIT_TAG
+
 image: $CI_REGISTRY_IMAGE
 stages:
   - info
@@ -70,8 +74,11 @@ build-testenv:
   image: docker:20.10
   stage: setup
   timeout: 3h
-  only:
-    - schedules
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule"
+    - if: $CI_PIPELINE_SOURCE != "schedule"
+      changes:
+        - src/test/docker/Dockerfile
   script:
     - cd src/test/docker
     - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
@@ -136,9 +143,8 @@ trigger_inttest:
 pages_prepare: &pages_prepare
   tags: [ cached-dind ]
   stage: deploy
-  only:
-    refs:
-      - /^release-.*$/i
+  rules:
+    - if: $CI_COMMIT_REF_NAME =~ /^release-.*$/i
   script:
     - echo "Deploying..."
     - make doc
@@ -148,6 +154,5 @@ pages_prepare: &pages_prepare
       - public
 pages:
   <<: *pages_prepare
-  only:
-    refs:
-      - main
+  rules:
+    - if: $CI_COMMIT_REF_NAME == 'main'
diff --git a/src/test/docker/Dockerfile b/src/test/docker/Dockerfile
index 1752f88c159a1d6d950b30c7bf6dac32c8823b06..19cf9dcd5cae9431ae0dc265870acbdfb1b3e650 100644
--- a/src/test/docker/Dockerfile
+++ b/src/test/docker/Dockerfile
@@ -3,6 +3,9 @@ RUN apt-get update && \
   apt-get install -y \
     git make mariadb-server maven openjdk-11-jdk-headless \
     plantuml \
+    libtiff5-dev libjpeg-dev libopenjp2-7-dev zlib1g-dev \
+    libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk \
+    libharfbuzz-dev libfribidi-dev libxcb1-dev \
     python3-pip screen libpam0g-dev unzip curl shunit2 \
     python3-sphinx