diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 90c5d5e99174698ad6d6fd7f4ed34e66b710fccf..de49373ab4bf72574de04efd147439f9d4462fb0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,16 +14,17 @@ before_script:
 
 build-main:
   script:
-    - docker build --no-cache --pull -t "$CI_REGISTRY_IMAGE" .
-    - docker tag "$CI_REGISTRY_IMAGE" "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG"
-    - docker push "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG"
+    - docker pull $CI_REGISTRY_IMAGE || true
+    - docker build --cache-from $CI_REGISTRY_IMAGE --pull -t "$CI_REGISTRY_IMAGE" -t "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG" .
     - docker push "$CI_REGISTRY_IMAGE"
+    - docker push "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG"
   only:
     - main
 
 build:
   script:
-    - docker build --no-cache --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
+    - docker pull $CI_REGISTRY_IMAGE || true
+    - docker build --cache-from $CI_REGISTRY_IMAGE --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
     - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
   except:
     - main