diff --git a/Jenkinsfile b/Jenkinsfile
index a65c0ed1d4c079008dab70a9a685e536c16b367b..5c20846045d5bbd76178db777912239d71a6c638 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -103,6 +103,31 @@ pipeline {
 			}
 		}
 		
+        stage('Sonar Checks') {
+        	steps {
+        	     script {
+                    FAILED_STAGE=env.STAGE_NAME
+                }
+                container("maven-17") {
+                	configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
+                	dir('user-manager-server') {
+	            			script {
+	                        	try {
+		                            if (env.BRANCH_NAME == 'master') {
+		                                withSonarQubeEnv('sonarqube-ozg-sh'){
+		                                    sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
+		                                }
+		                            }
+		                        } catch (Exception e) {
+	                                unstable("SonarQube failed")
+	                            }
+	                        }
+                        }
+                	}
+                }
+        	}
+        }
+
 		stage('Push Docker image') {
             steps {
                 script {
@@ -136,55 +161,62 @@ pipeline {
             }
         }
         
-        stage('Deploy UserManager') {	
-            when {	
-                anyOf {	
-                    branch 'master'	
-                    branch 'release'	
-                }	
-            }	
-            	
-            steps {	
-                script {	
-                    FAILED_STAGE = env.STAGE_NAME	
-                }	
-                container("kubectl"){	
-                    script {	
-                        if (env.BRANCH_NAME == 'master') {	
-                            sh 'kubectl rollout restart deployment/user-manager -n sh-kiel-dev'	
-                            sh 'kubectl rollout status deployment/user-manager -n sh-kiel-dev'	
-                            
-                            // sh 'kubectl rollout restart deployment/user-manager -n sh-ea-dev'
-                            // sh 'kubectl rollout status deployment/user-manager -n sh-ea-dev'
-                        }	
-                    }	
-                }	
-            }	
-        }
-       
-        stage('Sonar Checks') {
-        	steps {
-        	     script {
-                    FAILED_STAGE=env.STAGE_NAME
+        stage('Rollout Dev UserManager') {
+            when {
+                branch 'master'
+            }
+            steps {
+                script {
+                    FAILED_STAGE = env.STAGE_NAME
+                    initK8s()
+                
+                    container("k8s"){
+                            sh """
+                                error=0
+                                for NAMESPACE in \$(kubectl get namespaces -l 'ozg-environment=dev,update-namespace notin (false)' -o custom-columns=NAME:.metadata.name --no-headers); \
+                                do \
+                                    if kubectl get deployment -n \$NAMESPACE | grep user-manager; then \
+                                        kubectl rollout restart deployment/user-manager -n \$NAMESPACE; \
+                                        if ! kubectl rollout status deployment/user-manager -n \$NAMESPACE; then \
+                                            error=1; \
+                                        fi; \
+                                    fi; \
+                                done
+                                exit \$error
+                            """
+                    }
                 }
-                container("maven-17") {
-                	configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
-                	dir('user-manager-server') {
-	            			script {
-	                        	try {
-		                            if (env.BRANCH_NAME == 'master') {
-		                                withSonarQubeEnv('sonarqube-ozg-sh'){
-		                                    sh 'mvn -s $MAVEN_SETTINGS sonar:sonar'
-		                                }
-		                            }
-		                        } catch (Exception e) {
-	                                unstable("SonarQube failed")
-	                            }
-	                        }
+            }
+        }
+
+        stage('Trigger Test | Stage rollout') {
+            when {
+                // todo rename to release
+                branch 'ozg-2502'
+            }
+
+            steps {
+                script {
+                    FAILED_STAGE = env.STAGE_NAME
+
+                    def pom = readMavenPom file: 'pom.xml'
+                    def version = pom.version
+
+                    withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
+                        sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git'
+
+                        // todo remove
+                        dir('provisioning') {
+                            sh 'git checkout ozg-2502'
                         }
-                	}
+
+                        setNewProvisioningVersion('test', version)
+                        setNewProvisioningVersion('stage', version)
+
+                        pushNewProvisioningVersion(USER, TOKEN, version)
+                    }
                 }
-        	}
+            }
         }
     }
     
@@ -221,3 +253,33 @@ String getElementAccessToken() {
         return readJSON ( text: sh (script: '''curl -XPOST -d \"$LOGIN_JSON\" https://matrix.ozg-sh.de/_matrix/client/v3/login''', returnStdout: true)).access_token
     }
 }
+
+Void setNewProvisioningVersion(String environment, String version) {
+    dir("provisioning") {
+        def envFile = "playbook/inventory/versions/${environment}.yml"
+        def envVersions = readYaml file: envFile
+
+        envVersions.versions.user_manager.image.tag = version
+
+        writeYaml file: envFile, data: envVersions, overwrite: true
+    }
+}
+
+Void pushNewProvisioningVersion(String user, String token, String version) {
+    dir('provisioning') {
+        sh 'git add playbook/inventory/versions/.'
+        sh 'git config user.email "jenkins@ozg.de"'
+        sh 'git config user.name "jenkins"'
+        sh "git commit -m 'jenkins rollout user-manager test stage version ${version}'"
+        sh 'git push https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/provisioning.git'
+    }
+}
+
+Void initK8s(){
+    container("k8s") {
+        configFileProvider([configFile(fileId: 'jenkins-kuby-kubeconfig', variable: 'KUBE_CONFIG')]) {
+            sh 'mkdir ~/.kube'
+            sh 'cp ${KUBE_CONFIG} ~/.kube/config'
+        }
+    }
+}
\ No newline at end of file