diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..ff05716577d02f5e3706ca0807457d2cb63a0bc1
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,62 @@
+.gitlab-ci
+Dockerfile
+README.md
+LICENSE
+.dockerignore
+
+plugin.xml_gen
+bin/
+target/
+tmp/
+.settings/
+MANIFEST.MF_gen
+.DS_Store*
+.metadata
+runtimeInfo
+workspace
+*._trace
+Thumbs.db
+.Rhistory
+.pydevproject
+deps/
+diagrams/*
+.idea
+log/
+catalog-v*.xml
+.RData
+.Rproj.user
+*.tar.gz
+*.zip
+*.gml
+
+# IntelliJ IDEA
+*.iml
+
+# Eclipse
+.project
+.classpath
+
+### Gradle ###
+.gradle
+build/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+# Cache of project
+.gradletasknamecache
+
+hs_err_*.log
+replay_*.log
+
+~*.*
+*.~*
+
+xtend-gen/
+neo4j-server/
+out/
+*.swp
+*.report
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..472ce3accc40c2164d63ce0d06407514826c6cad
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,72 @@
+image: docker:latest
+
+# mostly taken from: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
+
+variables:
+    DOCKER_REPOSITORY: git-st.inf.tu-dresden.de:4567
+    CONTAINER_RELEASE_IMAGE: $DOCKER_REPOSITORY/stgroup/trainbenchmark:latest
+    CONTAINER_TEST_IMAGE: $DOCKER_REPOSITORY/stgroup/trainbenchmark:$CI_COMMIT_REF_NAME
+
+
+stages:
+    - build
+    - test
+    - benchmark
+    - release
+
+before_script:
+  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $DOCKER_REPOSITORY
+
+build:
+    stage: build
+    tags:
+        - dockered
+    script:
+        - docker build --pull -t $CONTAINER_TEST_IMAGE .
+        - docker push $CONTAINER_TEST_IMAGE
+
+
+test_test:
+  stage: test
+  tags:
+      - dockered
+  script:
+    - docker pull $CONTAINER_TEST_IMAGE
+    - docker run $CONTAINER_TEST_IMAGE /trainbenchmark/gradlew --no-daemon test
+
+test_check:
+  stage: test
+  tags:
+      - dockered
+  script:
+    - docker pull $CONTAINER_TEST_IMAGE
+    - docker run $CONTAINER_TEST_IMAGE /trainbenchmark/gradlew --no-daemon check
+
+benchmark_inject:
+  stage: benchmark
+  tags:
+      - dockered
+  script:
+    - docker pull $CONTAINER_TEST_IMAGE
+    - docker run $CONTAINER_TEST_IMAGE /trainbenchmark/gradlew --no-daemon individualInjectBenchmark
+
+benchmark_repair:
+  stage: benchmark
+  tags:
+      - dockered
+  script:
+    - docker pull $CONTAINER_TEST_IMAGE
+    - docker run $CONTAINER_TEST_IMAGE /trainbenchmark/gradlew --no-daemon individualRepairBenchmark
+
+
+
+release-image:
+    stage: release
+    tags:
+        - dockered
+    script:
+        - docker pull $CONTAINER_TEST_IMAGE
+        - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
+        - docker push $CONTAINER_RELEASE_IMAGE
+    only:
+        - master         
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..f5bda94994e27bc1754d224cac0d6ded911469c3
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,124 @@
+# glpk also from https://github.com/dmccloskey/glpk/blob/master/Dockerfile
+
+# Set the base image to Ubuntu
+FROM ubuntu:latest
+# Switch to root for install
+USER root
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN apt-get update -y && apt-get install -y \
+	openjdk-8-jdk \
+	r-base \
+	r-base-dev \
+	libudunits2-dev \
+	--no-install-recommends \
+	&& apt-get clean \
+	&& rm -rf /var/lib/apt/lists/*
+
+RUN mkdir -p /trainbenchmark/trainbenchmark-reporting
+COPY trainbenchmark-reporting/install.R /trainbenchmark/trainbenchmark-reporting/install.R
+RUN Rscript /trainbenchmark/trainbenchmark-reporting/install.R
+
+ENV HOME /home/user
+RUN useradd --create-home --home-dir $HOME user \
+    && chmod -R u+rwx $HOME \
+    && chown -R user:user $HOME
+
+WORKDIR /trainbenchmark
+# START prefetch some gradle-dependencies
+COPY gradlew .
+COPY gradle gradle
+COPY settings.gradle .
+COPY build.gradle build.gradle
+RUN chown user:user -R /trainbenchmark
+USER user
+
+RUN ./gradlew --no-daemon build; true
+
+# build.gradle
+COPY trainbenchmark-reporting/build.gradle trainbenchmark-reporting/build.gradle
+COPY trainbenchmark-scripts/build.gradle trainbenchmark-scripts/build.gradle
+COPY trainbenchmark-server/build.gradle trainbenchmark-server/build.gradle
+COPY trainbenchmark-tool-emf/build.gradle trainbenchmark-tool-emf/build.gradle
+COPY trainbenchmark-tool-jastadd-namelookup-base/build.gradle trainbenchmark-tool-jastadd-namelookup-base/build.gradle
+COPY trainbenchmark-tool-jastadd-namelookup-incremental/build.gradle trainbenchmark-tool-jastadd-namelookup-incremental/build.gradle
+COPY trainbenchmark-tool-jastadd-namelookup/build.gradle trainbenchmark-tool-jastadd-namelookup/build.gradle
+COPY trainbenchmark-tool-jastadd-optimized-base/build.gradle trainbenchmark-tool-jastadd-optimized-base/build.gradle
+COPY trainbenchmark-tool-jastadd-optimized-incremental/build.gradle trainbenchmark-tool-jastadd-optimized-incremental/build.gradle
+COPY trainbenchmark-tool-jastadd-optimized/build.gradle trainbenchmark-tool-jastadd-optimized/build.gradle
+COPY trainbenchmark-tool-jastadd-specialized-base/build.gradle trainbenchmark-tool-jastadd-specialized-base/build.gradle
+COPY trainbenchmark-tool-jastadd-specialized-incremental/build.gradle trainbenchmark-tool-jastadd-specialized-incremental/build.gradle
+COPY trainbenchmark-tool-jastadd-specialized/build.gradle trainbenchmark-tool-jastadd-specialized/build.gradle
+COPY trainbenchmark-tool-tinkergraph/build.gradle trainbenchmark-tool-tinkergraph/build.gradle
+COPY trainbenchmark-tool-viatra-patterns/build.gradle trainbenchmark-tool-viatra-patterns/build.gradle
+COPY trainbenchmark-tool-viatra/build.gradle trainbenchmark-tool-viatra/build.gradle
+# properties
+COPY trainbenchmark-format-emf-model/build.properties trainbenchmark-format-emf-model/build.properties
+COPY trainbenchmark-tool-viatra-patterns/build.properties trainbenchmark-tool-viatra-patterns/build.properties
+COPY trainbenchmark-tool/build.properties trainbenchmark-tool/build.properties
+# core packages
+COPY trainbenchmark-config/ trainbenchmark-config/
+COPY trainbenchmark-tool/ trainbenchmark-tool/
+COPY trainbenchmark-tool-jastadd-base/ trainbenchmark-tool-jastadd-base/
+COPY trainbenchmark-format-emf-model/ trainbenchmark-format-emf-model/
+COPY trainbenchmark-format-emf/ trainbenchmark-format-emf/
+COPY trainbenchmark-generator-dot/ trainbenchmark-generator-dot/
+COPY trainbenchmark-generator-emf/ trainbenchmark-generator-emf/
+COPY trainbenchmark-generator-graph-tinkerpop/ trainbenchmark-generator-graph-tinkerpop/
+COPY trainbenchmark-generator-json4ag-special/ trainbenchmark-generator-json4ag-special/
+COPY trainbenchmark-generator-json4ag/ trainbenchmark-generator-json4ag/
+COPY trainbenchmark-generator/ trainbenchmark-generator/
+
+RUN ./gradlew --no-daemon initScripts
+RUN ./gradlew --no-daemon generate; true
+RUN ./gradlew --no-daemon dependencies; true
+RUN ./gradlew --no-daemon trainbenchmark-config:build; true
+RUN ./gradlew --no-daemon trainbenchmark-tool-jastadd-base:build; true
+
+# END prefetch some gradle-dependencies
+
+COPY diagrams/ diagrams/
+COPY logs/ logs/
+COPY models/ models/
+COPY results/ results/
+COPY trainbenchmark-config/ trainbenchmark-config/
+COPY trainbenchmark-format-emf/ trainbenchmark-format-emf/
+COPY trainbenchmark-format-emf-model/ trainbenchmark-format-emf-model/
+COPY trainbenchmark-generator/ trainbenchmark-generator/
+COPY trainbenchmark-generator-dot/ trainbenchmark-generator-dot/
+COPY trainbenchmark-generator-emf/ trainbenchmark-generator-emf/
+COPY trainbenchmark-generator-graph-tinkerpop/ trainbenchmark-generator-graph-tinkerpop/
+COPY trainbenchmark-generator-json4ag/ trainbenchmark-generator-json4ag/
+COPY trainbenchmark-generator-json4ag-special/ trainbenchmark-generator-json4ag-special/
+COPY trainbenchmark-reporting/ trainbenchmark-reporting/
+COPY trainbenchmark-scripts/ trainbenchmark-scripts/
+COPY trainbenchmark-server/ trainbenchmark-server/
+COPY trainbenchmark-tool/ trainbenchmark-tool/
+COPY trainbenchmark-tool-emf/ trainbenchmark-tool-emf/
+COPY trainbenchmark-tool-jastadd-base/ trainbenchmark-tool-jastadd-base/
+COPY trainbenchmark-tool-jastadd-namelookup/ trainbenchmark-tool-jastadd-namelookup/
+COPY trainbenchmark-tool-jastadd-namelookup-base/ trainbenchmark-tool-jastadd-namelookup-base/
+COPY trainbenchmark-tool-jastadd-namelookup-incremental/ trainbenchmark-tool-jastadd-namelookup-incremental/
+COPY trainbenchmark-tool-jastadd-optimized/ trainbenchmark-tool-jastadd-optimized/
+COPY trainbenchmark-tool-jastadd-optimized-base/ trainbenchmark-tool-jastadd-optimized-base/
+COPY trainbenchmark-tool-jastadd-optimized-incremental/ trainbenchmark-tool-jastadd-optimized-incremental/
+COPY trainbenchmark-tool-jastadd-specialized/ trainbenchmark-tool-jastadd-specialized/
+COPY trainbenchmark-tool-jastadd-specialized-base/ trainbenchmark-tool-jastadd-specialized-base/
+COPY trainbenchmark-tool-jastadd-specialized-incremental/ trainbenchmark-tool-jastadd-specialized-incremental/
+COPY trainbenchmark-tool-tinkergraph/ trainbenchmark-tool-tinkergraph/
+COPY trainbenchmark-tool-viatra/ trainbenchmark-tool-viatra/
+COPY trainbenchmark-tool-viatra-patterns/ trainbenchmark-tool-viatra-patterns/
+COPY visualization/ visualization/
+
+
+USER root
+RUN chown -R user:user /trainbenchmark
+USER user
+
+RUN ./gradlew --no-daemon initScripts
+RUN ./gradlew --no-daemon build shadowJar -x test
+RUN ./gradlew --no-daemon generate
+
+# RUN ./gradlew --no-daemon individualInjectBenchmark
+# RUN ./gradlew --no-daemon individualRepairBenchmark
+