diff --git a/Jenkinsfile b/Jenkinsfile
index 9383a53ea157c3f72f9ca153713c89ad2df1035f..e5fe0a6f449d1db822d685a76e8a80af2a4eb990 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -23,17 +23,10 @@ pipeline {
             steps {
                 script {
                     FAILED_STAGE = env.STAGE_NAME
-                    def rootPom = readMavenPom file: 'pom.xml'
-                    def rootVersion = rootPom.version
-
-                    def serverPom = readMavenPom file: 'pluto-server/pom.xml'
-                    def serverVersion = serverPom.version
-
-                    def interfacePom = readMavenPom file: 'pluto-interface/pom.xml'
-                    def interfaceVersion = interfacePom.version
-
-                    def mailPom = readMavenPom file: 'mail-service/pom.xml'
-                    def mailVersion = mailPom.version
+                    def rootVersion = getPomVersion('pom.xml')
+                    def serverVersion = getPomVersion('pluto-server/pom.xml')
+                    def interfaceVersion = getPomVersion('pluto-interface/pom.xml')
+                    def mailVersion = getPomVersion('mail-service/pom.xml')
 
                     if(env.BRANCH_NAME == 'release'){
                         if ( !(rootVersion ==~ RELEASE_REGEX) || !(serverVersion ==~ RELEASE_REGEX) || !(interfaceVersion ==~ RELEASE_REGEX) || !(mailVersion ==~ RELEASE_REGEX)) {
@@ -105,61 +98,57 @@ pipeline {
            }            
         }
 
-        stage('Push Docker image') {
+        stage('Tag and Push Docker image') {
             steps {
                 script {
                     FAILED_STAGE=env.STAGE_NAME
-                    def pom = readMavenPom file: 'pom.xml'
-                    def version = pom.version
+                    IMAGE_TAG = generateImageTag()
 
-                    container("docker") {
-                        withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
-                            sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}'
+                    tagAndPushDockerImage(IMAGE_TAG)
 
-                            sh "docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:${env.BRANCH_NAME}-${version}"
-                            sh "docker push docker.ozg-sh.de/pluto:${env.BRANCH_NAME}-${version}"
+                    if (env.BRANCH_NAME == 'master') {
+                        tagAndPushDockerImage('snapshot-latest')
+                        tagAndPushDockerImage('e2e-test')
+                    }
+                    else if (env.BRANCH_NAME == 'release') {
+                        tagAndPushDockerImage('latest')
+                    }
+                }
+            }
+        }
 
-                            if (env.BRANCH_NAME == 'master') {
-                                sh 'docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:e2e-test'
-                                sh 'docker push docker.ozg-sh.de/pluto:e2e-test'
+        stage('Trigger Dev rollout') {
+            when {
+                branch 'master'
+            }
+            steps {
+                script {
+                    FAILED_STAGE = env.STAGE_NAME
 
-                                sh 'docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:snapshot-latest'
-                                sh 'docker push docker.ozg-sh.de/pluto:snapshot-latest'
-                            }
+                    checkoutProvisioningRepo()
 
-                            if (env.BRANCH_NAME == 'release') {
-                                sh 'docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:latest'
-                                sh 'docker push docker.ozg-sh.de/pluto:latest'
-                            }
-                        }
-                    }
+                    setNewPlutoProvisioningVersion('dev')
+
+                    pushNewProvisioningVersion('dev')
                 }
             }
         }
-
-        stage('Deploy Pluto') {	
-            when {	
-                anyOf {	
-                    branch 'master'	
-                    branch 'release'	
-                }	
+        stage('Trigger Test | Stage rollout') {	
+            when {
+                branch 'release'
             }	
             	
             steps {	
                 script {	
-                    FAILED_STAGE = env.STAGE_NAME	
-                }	
-                container("kubectl"){	
-                    script {	
-                        if (env.BRANCH_NAME == 'master') {	
-                            sh 'kubectl rollout restart deployment/pluto -n sh-kiel-dev'	
-                            sh 'kubectl rollout status deployment/pluto -n sh-kiel-dev'	
-                            
-                            sh 'kubectl rollout restart deployment/pluto -n sh-ea-dev'
-                            sh 'kubectl rollout status deployment/pluto -n sh-ea-dev'
-                        }	
-                    }	
-                }	
+                    FAILED_STAGE = env.STAGE_NAME
+
+                    checkoutProvisioningRepo()
+
+                    setNewPlutoProvisioningVersion('test')
+                    setNewPlutoProvisioningVersion('stage')
+
+                    pushNewProvisioningVersion('test stage')
+                }
             }	
         }
         
@@ -246,6 +235,80 @@ pipeline {
     }
 }
 
+
+
+Void tagAndPushDockerImage(String newTag){
+    container("docker") {
+        withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
+            sh 'docker login docker.ozg-sh.de -u ${USER} -p ${PASSWORD}'
+
+            sh "docker tag docker.ozg-sh.de/pluto:build-latest docker.ozg-sh.de/pluto:${newTag}"
+            sh "docker push docker.ozg-sh.de/pluto:${newTag}"
+        }
+    }
+}
+
+String getPomVersion(String pomFile){
+    def pom = readMavenPom file: pomFile
+
+    return pom.version
+}
+
+String generateImageTag() {
+    def imageTag = "${env.BRANCH_NAME}-${getPomVersion('pom.xml')}"
+
+    if (env.BRANCH_NAME == 'master') {
+        imageTag += "-${env.GIT_COMMIT.take(7)}"
+    }
+
+    return imageTag
+}
+
+Void checkoutProvisioningRepo() {
+    withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
+        sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git'
+
+        if (env.BRANCH_NAME == 'release') {
+            dir('provisioning') {
+                sh 'git checkout release'
+            }
+        }
+    }
+}
+
+Void setNewPlutoProvisioningVersion(String environment) {
+    dir("provisioning") {
+        def envFile = "inventories/group_vars/${environment}/versions"
+
+        if (env.BRANCH_NAME == 'release') {
+            envFile = "playbook/inventory/versions/${environment}.yml"
+        }
+
+        def envVersions = readYaml file: envFile
+
+        envVersions.versions.pluto.image.tag = IMAGE_TAG
+
+        writeYaml file: envFile, data: envVersions, overwrite: true
+    }
+}
+
+Void pushNewProvisioningVersion(String environment) {
+    withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
+        dir('provisioning') {
+            if (env.BRANCH_NAME == 'release') {
+                sh 'git add playbook/inventory/versions/.'
+            }
+            else {
+                sh 'git add inventories/group_vars/*/versions'
+            }
+            sh 'git config user.email "jenkins@ozg.de"'
+            sh 'git config user.name "jenkins"'
+            sh "git commit -m 'jenkins rollout ${environment} pluto version ${IMAGE_TAG}'"
+            sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git'
+        }
+    }
+}
+
 Void sendFailureMessage() {
     def room = ''
     def data = """{"msgtype":"m.text", \