diff --git a/goofy-client/apps/goofy-e2e/Jenkinsfile b/goofy-client/apps/goofy-e2e/Jenkinsfile
index f18859763fb525d9357b9ccc8e4da0e1efe493fb..586479131ed089585cbe9bb6c214c413d3aa1d9f 100644
--- a/goofy-client/apps/goofy-e2e/Jenkinsfile
+++ b/goofy-client/apps/goofy-e2e/Jenkinsfile
@@ -5,11 +5,134 @@ pipeline {
         }
     }
 
+    triggers {
+        upstream(upstreamProjects: getUpstreamProjects(), threshold: hudson.model.Result.SUCCESS)
+    }
+
     stages {
-        stage("Hello") {
+        stage("Clone Gitops Repo") {
             steps {
-                echo "Hello World!"
+                cloneGitopsRepo()
             }
         }
+
+        stage("Init Default Versions") {
+            steps {
+                script {
+                    initEnvGoofyDefaultVersions()
+                    initEnvPlutoDefaultVersions()
+                    initEnvUserManagerDefaultVersions()
+                }
+            }
+        }
+
+        stage("Set User Versions") {
+            when {
+                beforeInput true
+                triggeredBy cause: "UserIdCause"
+            }
+            steps {
+                script {                   
+                    userVersions = input message: "Edit Default Values",
+                        parameters: [
+                            string(name: "GoofyImageTag", defaultValue: env.GOOFY_IMAGE_TAG, trim: true),
+                            string(name: "GoofyHelmChartVersion", defaultValue: env.GOOFY_HELM_CHART_VERSION, trim: true),
+                            string(name: "PlutoImageTag", defaultValue: env.PLUTO_IMAGE_TAG, trim: true),
+                            string(name: "PlutoHelmChartVersion", defaultValue: env.PLUTO_HELM_CHART_VERSION, trim: true),
+                            string(name: "UserManagerImageTag", defaultValue: env.USER_MANAGER_IMAGE_TAG, trim: true),
+                            string(name: "UserManagerHelmChartVersion", defaultValue: env.USER_MANAGER_HELM_CHART_VERSION, trim: true)
+                        ]
+
+                    initEnvUserVersions(userVersions)
+                }
+            }
+        }
+
+        stage("Print Versions") {
+            steps {
+                script {
+                    println "GOOFY_IMAGE_TAG: ${env.GOOFY_IMAGE_TAG}"
+                    println "GOOFY_HELM_CHART_VERSION: ${env.GOOFY_HELM_CHART_VERSION}"
+                    println "PLUTO_IMAGE_TAG: ${env.PLUTO_IMAGE_TAG}"
+                    println "PLUTO_HELM_CHART_VERSION: ${env.PLUTO_HELM_CHART_VERSION}"
+                    println "USER_MANAGER_IMAGE_TAG: ${env.USER_MANAGER_IMAGE_TAG}"
+                    println "USER_MANAGER_HELM_CHART_VERSION: ${env.USER_MANAGER_HELM_CHART_VERSION}"
+                }
+            }
+        }
+    }
+}
+
+String getUpstreamProjects() {
+    if (isMasterBranch() || isReleaseBranch()){
+        return "goofy/${env.BRANCH_NAME},pluto/${env.BRANCH_NAME},user-manager/${env.BRANCH_NAME}"
     }
+
+    return "goofy/${env.BRANCH_NAME}"
+}
+
+Boolean isReleaseBranch() {
+    return env.BRANCH_NAME == 'release'
+}
+
+Boolean isMasterBranch() {
+    return env.BRANCH_NAME == 'master'
+}
+
+def cloneGitopsRepo() {
+    withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
+        sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/gitops.git'
+    }
+}
+
+Map getApplicationValues(String application) {
+    def applicationValues = readYaml file: "gitops/${getEnvironment()}/application/values/${application}-values.yaml"
+
+    return applicationValues.get(application.replaceAll("-", "_"))
+}
+
+String getEnvironment() {
+    if (isReleaseBranch()) {
+        return "test"
+    }
+
+    return "dev"
+}
+
+String getImageTag(Map applicationValues) {
+    return applicationValues.image.tag
+}
+
+String getHelmChartVersion(Map applicationValues) {
+    return applicationValues.helm.version
+}
+
+Void initEnvGoofyDefaultVersions() {
+    goofyValues = getApplicationValues("goofy")
+    
+    env.GOOFY_IMAGE_TAG = getImageTag(goofyValues)
+    env.GOOFY_HELM_CHART_VERSION = getHelmChartVersion(goofyValues)
+}
+
+Void initEnvPlutoDefaultVersions() {
+    plutoValues = getApplicationValues("pluto")
+    
+    env.PLUTO_IMAGE_TAG = getImageTag(plutoValues)
+    env.PLUTO_HELM_CHART_VERSION = getHelmChartVersion(plutoValues)
+}
+
+Void initEnvUserManagerDefaultVersions() {
+    userManagerValues = getApplicationValues("user-manager")
+    
+    env.USER_MANAGER_IMAGE_TAG = getImageTag(userManagerValues)
+    env.USER_MANAGER_HELM_CHART_VERSION = getHelmChartVersion(userManagerValues)
+}
+
+Void initEnvUserVersions(userVersions) {
+    env.GOOFY_IMAGE_TAG = userVersions.GoofyImageTag
+    env.GOOFY_HELM_CHART_VERSION = userVersions.GoofyHelmChartVersion
+    env.PLUTO_IMAGE_TAG = userVersions.PlutoImageTag
+    env.PLUTO_HELM_CHART_VERSION = userVersions.PlutoHelmChartVersion
+    env.USER_MANAGER_IMAGE_TAG = userVersions.UserManagerImageTag
+    env.USER_MANAGER_HELM_CHART_VERSION = userVersions.UserManagerHelmChartVersion
 }
\ No newline at end of file