diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6556ead9c7c8803e1c0e1dbc418be8e75a1135a4..b4016b96010becc91b3e1de5b19bcfda2ccfe7e4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
   - test
   - dockerize
+  - publish
 
 variables:
   # to avoid "fatal: git fetch-pack: expected shallow list"
@@ -31,3 +32,14 @@ deploy:
     - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
     - docker build -t "${CI_REGISTRY_IMAGE}" .
     - docker push "${CI_REGISTRY_IMAGE}"
+
+upload_jar:
+  stage: publish
+  tags:
+    - shell
+  only:
+    - master
+  script:
+    # extract jar from Docker image
+    - docker run --rm --entrypoint cat "${CI_REGISTRY_IMAGE}" /vospace-file-service.jar > vospace-file-service.jar
+    - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file vospace-file-service.jar "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/vospace-file-service/latest/vospace-file-service.jar"'