diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9068b8659291d7759a336659e14f63fc32cd6718..68eff440ec6054a6bbdd686a772e308103235a9d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,18 +16,26 @@ stages:
     untracked: true
   timeout: 2h
 
+before_script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+
 build-ci:
   stage: build-ci
+  only:
+    changes:
+      - dockerfile-ci
   script:
-    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker build -f dockerfile-ci -t $CI_REGISTRY_IMAGE/ci . | tee build.log
     - docker push $CI_REGISTRY_IMAGE/ci
   extends: .config
 
 build-distrib:
   stage: build-distrib
+  only:
+    changes:
+      - dockerfile-ci
+      - dockerfile-distrib
   script:
-    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker build -f dockerfile-distrib -t $CI_REGISTRY_IMAGE/distrib .
         | tee build.log
     - docker push $CI_REGISTRY_IMAGE/distrib
@@ -35,8 +43,11 @@ build-distrib:
 
 build-vite:
   stage: build-vite
+  only:
+    changes:
+      - dockerfile-ci
+      - dockerfile-vite
   script:
-    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
     - docker build -f dockerfile-vite -t $CI_REGISTRY_IMAGE/vite .
         | tee build.log
     - docker push $CI_REGISTRY_IMAGE/vite