diff --git a/.gitignore b/.gitignore
index 96a87f3b6c2dfc08c5cb310ea04be8b670fde9f3..95c1dfbc91c152f09cef5be5ef16f01abfc199b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 *~
 /deps/build.log
+/docs/build/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..55a294ee82a3bc74ef37c8056a19f3059a6daf2e
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,80 @@
+# Taken an adapted from gitlab's example repos:
+# https://gitlab.com/gitlab-examples/julia
+
+# An example .gitlab-ci.yml file to test (and optionally report the
+# coverage results of) your [Julia][1] packages. Please refer to the
+# [documentation][2] for more information about package development in
+# Julia.
+#
+# Here, it is assumed that your Julia package is named
+# `MyPackage`. Change it to whatever name you have given to your
+# package.
+#
+# [1]: http://julialang.org/
+# [2]: https://docs.julialang.org/en/v1/manual/documentation/index.html
+
+# Below is the template to run your tests in Julia
+.test_template: &test_definition
+  # Uncomment below if you would like to run the tests on specific
+  # references only, such as the branches `master`, `development`,
+  # etc.
+  # only:
+  #   - master
+  #   - development
+  script:
+    # Let's run the tests. Substitute `coverage = false` below, if you
+    # do not want coverage results.
+    - julia -e 'using Pkg; Pkg.clone(pwd());
+    Pkg.build("CaosDB");
+    Pkg.test("CaosDB"; coverage = true)'
+    # Comment out below if you do not want coverage results.     -
+    julia -e 'using Pkg; Pkg.add("Coverage");
+    import CaosDB;
+    cd(joinpath(dirname(pathof(CaosDB)), ".."));
+    using Coverage; cl, tl = get_summary(process_folder());
+    println("(", cl/tl*100, "%) covered")'
+
+# Name a test and select an appropriate image.
+# images comes from Docker hub
+test:0.7:
+  image: julia:0.7
+  <<: *test_definition
+test:1.0:
+  image: julia:1.0
+  <<: *test_definition
+test:1.6:
+  image: julia:1.6
+  <<: *test_definition
+
+# REMARK: Do not forget to enable the coverage feature for your
+# project, if you are using code coverage reporting above. This can be
+# done by
+#
+# - Navigating to the `CI/CD Pipelines` settings of your project,
+# - Copying and pasting the default `Simplecov` regex example
+#   provided, i.e., `\(\d+.\d+\%\) covered` in the `test coverage
+#   parsing` textfield.
+
+# Example documentation deployment
+pages:
+  image: julia:0.7
+  stage: deploy
+  script:
+    - apt-get update -qq && apt-get install -y git # needed by Documenter
+    - julia -e 'using Pkg; Pkg.clone(pwd()); Pkg.build("CaosDB");' # rebuild Julia (can be put somewhere else I'm sure)
+    - julia -e 'using Pkg; import CaosDB; Pkg.add("Documenter")' # install Documenter
+    - julia --color=yes docs/make.jl # make documentation
+    - mv docs/build public # move to the directory picked up by Gitlab pages
+  artifacts:
+    paths:
+      - public
+  only:
+    - main
+
+# WARNING: This template is using the `julia` images from [Docker
+# Hub][3]. One can use custom Julia images and/or the official ones
+# found in the same place. However, care must be taken to correctly
+# locate the binary file (`/opt/julia/bin/julia` above), which is
+# usually given on the image's description page.
+#
+# [3]: https://hub.docker.com/_/julia/