diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4a3f4ec2eec757c8c45edf92668775e8b1a452ed..182ba3499e1449f680e0d6a75c7dd5888fe2c179 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -47,9 +47,9 @@ bootstrap:
     when: always
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*
 
 install:
   stage: install-apps
@@ -71,9 +71,9 @@ install:
     expire_in: 1 month
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*
 
 testinfra:
   stage: health-test
@@ -84,9 +84,9 @@ testinfra:
     - py.test -v -m 'testinfra' --connection=ansible --ansible-inventory=./inventory.yml --hosts='ansible://*'
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*
 
 certs:
   stage: health-test
@@ -100,9 +100,9 @@ certs:
     - py.test -s -m 'certs' --connection=ansible --ansible-inventory=./inventory.yml --hosts='ansible://*'
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*
 
 behave-nextcloud:
   stage: integration-test
@@ -121,9 +121,9 @@ behave-nextcloud:
   retry: 2
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*
 
 behave-grafana:
   stage: integration-test
@@ -141,9 +141,9 @@ behave-grafana:
     when: on_failure
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*
 
 terminate:
   stage: cleanup
@@ -155,6 +155,6 @@ terminate:
     - python3 -c "import cosmos; cosmos.terminate_droplets_by_name(\"^ci-\", 2)"
   only:
     changes:
-      - ansible
-      - helmfiles
-      - test
+      - ansible/**/*
+      - helmfiles/**/*
+      - test/**/*