diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d94b0c9a3be31075e5ea4120e6f9b57cb1d73433..6990c4b12f44a790f79b0069d40ffbba7a2b8d16 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,10 @@
 build-buster:
-  only:
-    - main
+  rules:
+  - if: $CI_PIPELINE_SOURCE == "schedule"
+  - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    changes:
+    - Dockerfile.buster
+    - .gitlab-ci.yml
   stage: build
   image:
     name: gcr.io/kaniko-project/executor:debug
@@ -10,8 +14,12 @@ build-buster:
     - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.buster --destination $CI_REGISTRY_IMAGE/buster:$CI_COMMIT_TAG
 
 build-bullseye:
-  only:
-    - main
+  rules:
+  - if: $CI_PIPELINE_SOURCE == "schedule"
+  - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    changes:
+    - Dockerfile.bullseye
+    - .gitlab-ci.yml
   stage: build
   image:
     name: gcr.io/kaniko-project/executor:debug
@@ -21,8 +29,12 @@ build-bullseye:
     - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.bullseye --destination $CI_REGISTRY_IMAGE/bullseye:$CI_COMMIT_TAG
 
 build-utility:
-  only:
-    - main
+  rules:
+  - if: $CI_PIPELINE_SOURCE == "schedule"
+  - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+    changes:
+    - Dockerfile.utility
+    - .gitlab-ci.yml
   stage: build
   image:
     name: gcr.io/kaniko-project/executor:debug