diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1ee6d015122ba9de25f1aceab464c6787f3481db..eb43c871efabfca8d452650624ec8add212becc1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
+  - build_standalone
   - test_standalone
-  - build
+  - build_integrated
   - test_integrated
   - deploy
 
@@ -12,30 +13,32 @@ variables:
   BISCUIT_caching__memcached__address: memcached:11211
   BISCUIT_database__host: db
 
-test:
-  stage: test_standalone
+build_wheel:
+  stage: build_standalone
   image:
     name: registry.edugit.org/teckids/docker-images/python-pimped:master
-  before_script:
-    - adduser --disabled-password --gecos "Test User" testuser
   script:
-    - poetry export --without-hashes --dev -f requirements.txt | pip install -r /dev/stdin
-    - sudo -u testuser eatmydata tox
+    - poetry build
+  cache:
+    paths:
+      - dist/
 
-build_dist:
-  stage: build
+test_wheel:
+  stage: test_standalone
   image:
     name: registry.edugit.org/teckids/docker-images/python-pimped:master
   before_script:
     - adduser --disabled-password --gecos "Test User" testuser
   script:
-    - sudo -u testuser poetry build
+    - poetry export --without-hashes --dev -f requirements.txt | pip install -r /dev/stdin
+    - eatmydata pip install dist/*.whl
+    - sudo -u testuser eatmydata tox
   artifacts:
     paths:
       - dist/
 
 build_docker:
-  stage: build
+  stage: build_integrated
   image:
     name: gcr.io/kaniko-project/executor:debug
     entrypoint: [""]