diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 396a29b7bf0d8d282e37416b1224ec6d592170da..4f99d127ddd22f6133c5942d4c8e46c6af1a725e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,6 +28,7 @@ stages:
   - cert
   - style
   - test
+  - deploy
 
 
 # During the test stage the CI pipeline (which runs in a "root" docker) starts
@@ -123,6 +124,11 @@ test:
       - cd .docker
         # here the server and the mysql backend docker are being started
       - CAOSDB_TAG=$CAOSDB_TAG docker-compose  up -d
+        # store versions of CaosDB parts
+      - docker exec -u 0 -t docker_caosdb-server_1 cat /opt/caosdb/git/caosdb_pylib_commit > hash_pylib
+      - docker exec -u 0 -t docker_caosdb-server_1 cat /opt/caosdb/git/caosdb_webui_commit > hash_webui
+      - docker exec -u 0 -t docker_caosdb-server_1 cat /opt/caosdb/git/caosdb_server_commit > hash_server
+      - docker exec -u 0 -t docker_caosdb-server_1 cat /opt/caosdb/git/caosdb_mysqlbackend_commit > hash_mysql
         # the pyinttest docker writes the return value of the tests into the
         # file result
       - /bin/sh ./run.sh
@@ -138,7 +144,7 @@ test:
     paths:
       - caosdb_log.txt
       - mariadb_log.txt
-    when: on_failure
+      - .docker/hash_*
     expire_in: 1 week
 
 build-testenv:
@@ -193,3 +199,25 @@ style:
   script:
       - autopep8 -r --diff --exit-code .
   allow_failure: true
+
+
+store-version:
+  tags: [docker]
+  stage: deploy
+  dependencies: [test]
+  image: $CI_REGISTRY_IMAGE
+  script:
+      - curl -u gitlab:$REVISONSTOREPW
+        --data server=$(cat .docker/hash_server)
+        --data mysql=$(cat .docker/hash_mysql)
+        --data pylib=$(cat .docker/hash_pylib)
+        --data webui=$(cat .docker/hash_webui)
+        --data save=1 https://caosdb.org/revisions/saverev.php
+  allow_failure: true
+  only:
+    - dev
+    - master
+    # TODO remove
+    - f-versions
+    - web
+