diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f5526455ded90c8138869e8d39aa7a653009edd3..9f447461e954113ed1746e1a64fdcd7351311542 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,59 +10,81 @@ cache:
     - .gradle/caches
 
 stages:
-  - build
   - test
   - ragdoc
   - publish
 
-build:
-  image: openjdk:11
-  stage: build
-  script:
-    - "./gradlew assemble"
-
-test:
+## Hidden jobs, base configurations
+.test:
   image: openjdk:11
   stage: test
-  needs:
-    - build
   script:
     - "./gradlew test"
   artifacts:
     reports:
       junit: "*/build/test-results/test/TEST-*.xml"
 
-publish_dev:
-  image: openjdk:11
+.publish_dev:
   stage: publish
-  needs:
-    - test
   script:
     - "./gradlew setDevVersionForCI"
     - "./gradlew publish"
   except:
     - main
 
-publish_main:
-  image: openjdk:11
+.publish_main:
   stage: publish
-  needs:
-    - test
   script:
     - "./gradlew publish"
   only:
     - main
 
+## Real jobs
+test8:
+  extends: .test
+  image: "openjdk:8"
+
+test11:
+  extends: .test
+  image: "openjdk:11"
+
+publish_dev8:
+  extends: .publish_dev
+  image: "openjdk:8"
+  needs:
+    - test8
+
+publish_dev11:
+  extends: .publish_dev
+  image: "openjdk:11"
+  needs:
+    - test11
+
+publish_main8:
+  extends: .publish_main
+  image: "openjdk:8"
+  needs:
+    - test8
+
+publish_main11:
+  extends: .publish_main
+  image: "openjdk:11"
+  needs:
+    - test11
+
 ragdoc_build:
   image:
     name: "git-st.inf.tu-dresden.de:4567/jastadd/ragdoc-builder"
     entrypoint: [""]
   stage: ragdoc
   needs:
-    - build
+    - test8
   script:
     - JAVA_FILES=$(find grammar2uml/src/ -name '*.java')
     - /ragdoc-builder/start-builder.sh -excludeGenerated -d data/ $JAVA_FILES
+  only:
+    - dev
+    - main
   artifacts:
     paths:
       - "data/"
@@ -92,7 +114,8 @@ pages:
   stage: publish
   needs:
     - ragdoc_view
-    - test
+    - test8
+    - test11
   before_script:
     - pip install -r pages/requirements.txt
   script: