diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6906687dae406654d48597475a9436cb23b3e7b4..1ad977ed6b67564ac661a07d91248807ae33280d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -52,7 +52,33 @@ build-main:
 
 build:
   script:
-    - docker build --cache-from $CI_REGISTRY_IMAGE --build-arg BUILDKIT_INLINE_CACHE=1 --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
-    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
+    - docker build
+      --build-arg BUILDKIT_INLINE_CACHE=1
+      --build-arg LDAP_PLUGIN_URL="${LDAP_PLUGIN_URL}"
+      --cache-from $CI_REGISTRY_IMAGE:stage-src
+      --target src
+      -t "$CI_REGISTRY_IMAGE:stage-src"
+      -t "$CI_REGISTRY_IMAGE:stage-src-branch-$CI_COMMIT_REF_SLUG" .
+    - docker push "$CI_REGISTRY_IMAGE:stage-src-branch-$CI_COMMIT_REF_SLUG"
+    - docker build
+      --build-arg BUILDKIT_INLINE_CACHE=1
+      --build-arg LDAP_PLUGIN_URL="${LDAP_PLUGIN_URL}"
+      --pull
+      --cache-from $CI_REGISTRY_IMAGE:stage-texlive-update
+      --target texlive-update
+      -t "$CI_REGISTRY_IMAGE:stage-texlive-update"
+      -t "$CI_REGISTRY_IMAGE:stage-texlive-update-branch-$CI_COMMIT_REF_SLUG" .
+    - docker push "$CI_REGISTRY_IMAGE:stage-texlive-update-branch-$CI_COMMIT_REF_SLUG"
+    - docker build
+      --build-arg BUILDKIT_INLINE_CACHE=1
+      --build-arg LDAP_PLUGIN_URL="${LDAP_PLUGIN_URL}"
+      --build-arg login_text="${LOGIN_TEXT}"
+      --build-arg collab_text="${COLLAB_TEXT}"
+      --pull
+      --cache-from $CI_REGISTRY_IMAGE
+      --target app --squash
+      -t "$CI_REGISTRY_IMAGE"
+      -t "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG" .
+    - docker push "$CI_REGISTRY_IMAGE:branch-$CI_COMMIT_REF_SLUG"
   except:
     - main