diff --git a/Jenkinsfile b/Jenkinsfile
index c3b703a317c13690030c2020cada7a8935f4d8b6..fe54c4d20d3528013cc0ef8fc5ca8481a6e4270a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -183,6 +183,24 @@ pipeline {
                 }
             }
         }
+        
+        stage('Test, build and deploy Helm Chart') {
+            steps {
+                container('k8s') {
+                    FAILED_GOOFY_STAGE=env.STAGE_NAME
+                    def helmChartVersion = generateImageTag()
+                    setHelmChartVersion(helmChartVersion)
+
+                    sh "helm lint -f goofy-server/src/main/helm/test-values.yaml goofy-server/src/main/helm"
+                    sh "helm unittest -f '../../test/helm/*.yaml' goofy-server/src/main/helm"
+
+                    sh "helm package goofy-server/src/main/helm"
+
+                    deployHelmChart(helmChartVersion)
+                }
+            }
+        }
+
         stage('Trigger Dev rollout') {
             when {
                 branch 'master'
@@ -297,6 +315,33 @@ pipeline {
     }
 }
 
+Void deployHelmChart(String helmChartVersion) {
+    NEXUS_URL = 'http://nexus.dev-tools:8081/service/rest/v1/components?repository=ozg-base-apps'
+    NEXUS_SNAPSHOT_URL = 'http://nexus.dev-tools:8081/service/rest/v1/components?repository=ozg-base-apps-snapshot'
+        
+    withCredentials([usernamePassword(credentialsId: 'jenkins-nexus-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){
+        if (env.BRANCH_NAME == 'release') {
+            result = sh script: '''curl -u $USERNAME:$PASSWORD $NEXUS_URL -F file=@goofy-'''+helmChartVersion+'''.tgz''', returnStdout: true
+        }
+        else {
+            result = sh script: '''curl -u $USERNAME:$PASSWORD $NEXUS_SNAPSHOT_URL -F file=@goofy-'''+helmChartVersion+'''.tgz''', returnStdout: true
+        }
+
+        if (result != '') {
+            error(result)
+        }
+    }
+}
+
+Void setHelmChartVersion(String helmChartVersion) {
+    def helmChartPath = 'goofy-server/src/main/helm/Chart.yaml'
+    def chart = readYaml file: helmChartPath
+
+    chart.version = helmChartVersion
+
+    writeYaml file: helmChartPath, data: chart, overwrite: true
+}
+
 Void tagAndPushDockerImage(String newTag){
     container("docker") {
         withCredentials([usernamePassword(credentialsId: 'jenkins-docker-login', usernameVariable: 'USER', passwordVariable: 'PASSWORD')]) {
@@ -407,6 +452,7 @@ Void editEnvironemntVersion(String stage, String imageTag, Boolean isEa) {
         devVersions.values.pluto.put('env', ['overrideSpringProfiles': overrideSpringProfiles])
 
         devVersions.versions.goofy.image.tag = imageTag
+        devVersions.charts.goofy.version = imageTag
 
         writeYaml file: editFile, data: devVersions, overwrite: true
     }
@@ -734,6 +780,7 @@ Void setNewGoofyProvisioningVersion(String environment) {
         def envVersions = readYaml file: envFile
 
         envVersions.versions.goofy.image.tag = IMAGE_TAG
+        devVersions.charts.goofy.version = imageTag
 
         writeYaml file: envFile, data: envVersions, overwrite: true
     }