diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6d1a36c1d703b546aadf39a89625347dd599c8e1..bca139983a801a4c44ff22b1f4b90aa58f3c1ccd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,2 +1,5 @@
 include:
+  - local: '.gitlab/ci/get_images.yml'
+    rules:
+      - if: $GET_IMAGES == "true"
   - local: '.gitlab/ci/lint.yml'
diff --git a/.gitlab/ci/get_images.yml b/.gitlab/ci/get_images.yml
new file mode 100644
index 0000000000000000000000000000000000000000..cbb4b1c686d36747177e9455758e7892b41ed801
--- /dev/null
+++ b/.gitlab/ci/get_images.yml
@@ -0,0 +1,14 @@
+get_images:
+  stage: .pre
+  image: 
+    name: gcr.io/go-containerregistry/crane:debug
+    entrypoint: [""]
+  script:
+    - |
+      crane auth login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
+      while IFS= read -r image; do
+        if [ ! -z "${image}" ]; then
+          echo "📥 Download image: $image"
+          crane copy "${image}" "${CI_REGISTRY_IMAGE}/${image}"
+        fi
+      done < .gitlab/ci/images.txt
diff --git a/.gitlab/ci/images.txt b/.gitlab/ci/images.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ebe671a9be84c6d6f2ab2f350db0e52c88255395
--- /dev/null
+++ b/.gitlab/ci/images.txt
@@ -0,0 +1,2 @@
+alpine:3.21
+tianon/true
diff --git a/.gitlab/ci/lint.yml b/.gitlab/ci/lint.yml
index 753ca64e7d1c99bea08bbcdefa250e7c2574ee00..14a10463dcc1a5b8ffea7768a28bf9380abd82e4 100644
--- a/.gitlab/ci/lint.yml
+++ b/.gitlab/ci/lint.yml
@@ -1,5 +1,5 @@
 lint:
   stage: test
-  image: alpine:3.21
+  image: ${CI_REGISTRY_IMAGE}/alpine:3.21
   script:
-    - echo "🔎 Lint" 
+    - echo "🔎 Lint"