diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3fb433adc140f265de454a97a9d46b71948d76ac
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,99 @@
+stages:
+  - build_env
+  - build_base_war
+  - build_extension
+  - build_war
+  - build_tomcat
+
+variables:
+  # to avoid "fatal: git fetch-pack: expected shallow list"
+  GIT_STRATEGY: clone
+  GIT_SUBMODULE_STRATEGY: recursive
+
+build_extension_build_env:
+  stage: build_env
+  tags:
+    - shell
+  only:
+    refs:
+      - master
+    changes:
+      - private-rows-extensions/Dockerfile-build-env
+  script:
+    - cd private-rows-extensions
+    - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
+    - docker build -t "${CI_REGISTRY_IMAGE}/extension_build_env" . -f Dockerfile-build-env
+    - docker push "${CI_REGISTRY_IMAGE}/extension_build_env"
+      
+build_db:
+  stage: build_env
+  tags:
+    - shell
+  only:
+    refs:
+      - master
+    changes:
+      - database
+  script:
+    - cd database
+    - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
+    - docker build -t "${CI_REGISTRY_IMAGE}/database" .
+    - docker push "${CI_REGISTRY_IMAGE}/database"
+
+build_vollt_base_war:
+  stage: build_base_war
+  tags:
+    - docker
+  image: gradle:jdk8
+  only:
+    refs:
+      - master
+  script:
+    - cd vollt
+    - gradle war
+  artifacts:
+    paths:
+      - vollt/build/libs/vollt.war
+    expire_in: 7 days
+
+build_extension:
+  stage: build_extension
+  tags:
+    - docker
+  image: "${CI_REGISTRY_IMAGE}/extension_build_env"
+  script:
+    - cd vollt
+    - gradle jar
+    - cd ../private-rows-extensions
+    - mvn clean package
+  artifacts:
+    paths:
+      - private-rows-extensions/target/private-rows-extensions-*.jar
+    expire_in: 7 days
+
+build_war:
+  stage: build_war
+  tags:
+    - shell
+  only:
+    refs:
+      - master
+  script:
+    - cd war
+    - ./fill-war.sh
+  artifacts:
+    paths:
+      - war/tap.war
+    expire_in: 7 days
+
+build_tomcat_image:
+  stage: build_tomcat
+  tags:
+    - shell
+  only:
+    refs:
+      - master
+  script:
+    - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
+    - docker build -t "${CI_REGISTRY_IMAGE}/tomcat" .
+    - docker push "${CI_REGISTRY_IMAGE}/tomcat"
diff --git a/.gitmodules b/.gitmodules
index 3b3e967cffdcf68159cf4dbb545ec1e8e23c436b..e5573137378d68478d64a55de30046ac10d3250f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
 [submodule "vollt"]
 	path = vollt
-	url = git@git.ia2.inaf.it:zorba/vollt.git
+	url = ../../zorba/vollt.git
 	branch = private_rows
diff --git a/private-rows-extensions/Dockerfile-build-env b/private-rows-extensions/Dockerfile-build-env
index c617b8355be3b7ad859261eeb9463faf0aa0ed66..7ca2bf24301d62d3d117d7c61e00a163c2d9b1bc 100644
--- a/private-rows-extensions/Dockerfile-build-env
+++ b/private-rows-extensions/Dockerfile-build-env
@@ -1,2 +1,2 @@
-FROM gradle:jre8
+FROM gradle:jdk8
 RUN apt-get update && apt install -y maven