diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 147d3e387d43b28c47b7e77ceacef499679d377c..4f18e29dfe47191cbdc962777ed72184d2096c0a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,6 +17,7 @@ default:
 stages:
   - generate
   - build
+  - deploy
 
 # UHEI spack version and branch
 variables:
@@ -55,3 +56,30 @@ build-jobs:
       - artifact: "jobs_scratch_dir/pipeline.yml"
         job: generate-pipeline
     strategy: depend
+  artifacts:
+    paths:
+      - "${CI_PROJECT_DIR}/binary_artifacts.tar.gz
+
+deploy-artifacts:
+  stage: deploy
+  before_script:
+    - oc login "$OPENSHIFT_SERVER" --token="$OPENSHIFT_TOKEN"
+  script:
+    # create job description file
+    - chmod a+x create_job.sh
+    - ./create_job.sh $CAT_URL $CAT_ART_NAME $CAT_SRC_DIR $CAT_DEST_DIR
+    - cat simplejob.yml
+    # select the project in openshift
+    - oc project jupyterhub-dev
+    # delete the job (if exist)
+    - oc delete job simplejob || true
+    # start the deploy job
+    - oc create -f simplejob.yml
+    # wait for job to finish https://stackoverflow.com/questions/5073453wait-for-kubernetes-job-to-complete-on-either-failure-success-using-command-line
+    - oc get job/simplejob -o=jsonpath='{.status}' -w 
+    - oc get job/simplejob -o=jsonpath='{.status.conditions[*].type}' | grep -i -E 'failed|complete' || echo 'Failed' 
+  tags:
+    - shell-runner
+
+
+