diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d1d711444dd06e43c5e023d891e3625437c8a255
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,49 @@
+stages:
+- build
+- test
+
+variables:
+  # Instruct Testcontainers to use the daemon of DinD.
+  DOCKER_HOST: "unix:///var/run/docker.sock"
+#  # Improve performance with overlayfs.
+#  DOCKER_DRIVER: overlay2
+  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
+  TEST_REPORTS: "/builds/OpenLicht/eraser/eraser-base/build/reports/tests/test/"
+  TEST_LOG: "/builds/OpenLicht/eraser/eraser-base/logs/eraser-test.log"
+  TESTCONTAINERS_RYUK_DISABLED: "true"
+
+before_script:
+  - export GRADLE_USER_HOME=`pwd`/.gradle
+
+build:
+  image: openjdk:8
+  tags:
+    - docker
+  stage: build
+  script:
+    - ./gradlew --console=plain --build-cache assemble
+  cache:
+    key: "$CI_COMMIT_REF_NAME"
+    policy: push
+    paths:
+      - build
+      - .gradle
+
+test:
+  image: openjdk:8
+  tags:
+    - docker
+  stage: test
+  script:
+    - ./gradlew --continue --console=plain check
+  cache:
+    key: "$CI_COMMIT_REF_NAME"
+    policy: pull
+    paths:
+      - build
+      - .gradle
+  artifacts:
+    when: always
+    paths:
+      - $TEST_LOG
+      - $TEST_REPORTS