diff --git a/Jenkinsfile b/Jenkinsfile
index 353d723548073c3f55cb9dd4a95833af2333a399..72bc8db5ed7933f17fe0f45faab1cf364c31d583 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -62,20 +62,7 @@ pipeline {
        steps {
           sshagent(credentials: ['kieker-irl-key']) {
              unstash 'yaml'
-             sh '''
-                 mkdir all
-                 cd all
-	         sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/kieker-java.yaml
-	         sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/kieker-python.yaml
-#	         sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/opentelemetry.yaml
-#	         sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/inspectit.yaml
-                 cd ..
-                 compile-results/bin/compile-results -i *-results.yaml -l all -t all -j all -w 100
-                 cd all
-                 echo "put *.yaml" | sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo  -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}
-                 echo "put *.html" | sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo  -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}
-                 echo "put *.json" | sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo  -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}
-               '''
+             sh "./upload.sh ${KEYSTORE} ${UPDATE_SITE_URL}"
           }
        }
        post {
diff --git a/upload.sh b/upload.sh
new file mode 100644
index 0000000000000000000000000000000000000000..928056b28c58f31e0abd47a2090c8317c004b6c9
--- /dev/null
+++ b/upload.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+#
+# Kieker moobench upload script
+#
+# Usage: upload.sh
+
+# configure base dir
+BASE_DIR=$(cd "$(dirname "$0")"; pwd)
+
+#
+# source functionality
+#
+
+if [ ! -d "${BASE_DIR}" ] ; then
+        echo "Base directory ${BASE_DIR} does not exist."
+        exit 1
+fi
+
+# load configuration and common functions
+if [ -f "${BASE_DIR}/config.rc" ] ; then
+        source "${BASE_DIR}/config.rc"
+else
+        echo "Missing configuration: ${BASE_DIR}/config.rc"
+        exit 1
+fi
+
+if [ -f "${BASE_DIR}/common-functions.sh" ] ; then
+        source "${BASE_DIR}/common-functions.sh"
+else
+        echo "Missing library: ${BASE_DIR}/common-functions.sh"
+        exit 1
+fi
+
+KEYSTORE="$1"
+UPDATE_SITE_RUL="$2"
+
+mkdir all
+cd all
+sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/kieker-java.yaml
+sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/kieker-python.yaml
+sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/opentelemetry.yaml
+sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}/inspectit.yaml
+cd ..
+$COMPILE_RESULTS_BIN -i *-results.yaml -l all -t all -j all -w 100
+cd all
+echo "put *.yaml" | sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo  -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}
+echo "put *.html" | sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo  -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}
+echo "put *.json" | sftp -oNoHostAuthenticationForLocalhost=yes -oStrictHostKeyChecking=no -oUser=repo  -F /dev/null -i ${KEYSTORE} ${UPDATE_SITE_URL}
+
+# end