diff --git a/jjb/pipeline/helm-api-test.groovy b/jjb/pipeline/helm-api-test.groovy
index c776510..adedd8c 100644
--- a/jjb/pipeline/helm-api-test.groovy
+++ b/jjb/pipeline/helm-api-test.groovy
@@ -2,26 +2,20 @@
 
 pipeline {
 
-  parameters {
-    string(name:'executorNode', defaultValue:'invalid', description:'Name of the Jenkins node to run the job on')
-    string(name:'manifestUrl', defaultValue:'invalid', description:'URL to the repo manifest')
-    string(name:'manifestBranch', defaultValue:'master', description:'Name of the repo branch to use')
-  }
-
   /* no label, executor is determined by JJB */
   agent {
-    label '${params.executorNode}'
+    label "${params.executorNode}"
   }
 
   stages {
 
-    stage('checkout') {
+    stage('repo') {
       steps {
         checkout(changelog: false, \
           poll: false,
           scm: [$class: 'RepoScm', \
-            manifestRepositoryUrl: '${params.manifestUrl}', \
-            manifestBranch: '${params.manifestBranch}', \
+            manifestRepositoryUrl: "${params.manifestUrl}", \
+            manifestBranch: "${params.manifestBranch}", \
             currentBranch: true, \
             destinationDir: 'cord', \
             forceSync: true,
@@ -33,13 +27,27 @@
       }
     }
 
+    stage('patch') {
+      steps {
+        sh """
+           pushd cord
+           PROJECT_PATH=$(xmllint --xpath "string(//project[@name=\"${gerritProject}\"]/@path)" .repo/manifest.xml)
+           repo download "\$PROJECT_PATH" "${gerritChangeNumber}/${gerritPatchsetNumber}"
+           popd
+           """
+      }
+    }
+
     stage('prep') {
       parallel {
 
         stage('images') {
           steps {
-            sh 'cd cord/build; ./scripts/imagebuilder.py -f helm-charts/examples/test-images.yaml'
-
+            sh '''
+               pushd cord/build
+               ./scripts/imagebuilder.py -f ../helm-charts/examples/test-images.yaml
+               popd
+               '''
           }
         }
 
@@ -47,17 +55,14 @@
           steps {
             /* see https://github.com/kubernetes/minikube/#linux-continuous-integration-without-vm-support */
             sh '''
-               export MINIKUBE_WANTUPDATENOTIFICATION=false;
-               export MINIKUBE_WANTREPORTERRORPROMPT=false;
-               export CHANGE_MINIKUBE_NONE_USER=true;
-               export MINIKUBE_HOME=$HOME;
-               mkdir -p $HOME/.kube || true;
-               touch $HOME/.kube/config;
-               export KUBECONFIG=$HOME/.kube/config;
-               minikube start --vm-driver=none;
-
-               chown -R $USER $HOME/.minikube;
-               chgrp -R $(id -g) $HOME/.minikube;
+               export MINIKUBE_WANTUPDATENOTIFICATION=false
+               export MINIKUBE_WANTREPORTERRORPROMPT=false
+               export CHANGE_MINIKUBE_NONE_USER=true
+               export MINIKUBE_HOME=$HOME
+               mkdir -p $HOME/.kube || true
+               touch $HOME/.kube/config
+               export KUBECONFIG=$HOME/.kube/config
+               sudo -E /usr/bin/minikube start --vm-driver=none
 
                for i in {1..150}; do # timeout for 5 minutes
                    ./kubectl get po &> /dev/null
@@ -81,32 +86,43 @@
     stage('xos') {
       steps {
         sh '''
-           cd cord/build/helm-charts;
-           helm dep up xos-core;
-           helm install -f examples/test-values.yaml -f examples/candidate-tag-values.yaml xos-core -n xos-core;
+           pushd cord/helm-charts
+           helm dep up xos-core
+           helm install -f examples/test-values.yaml -f examples/candidate-tag-values.yaml xos-core -n xos-core
            sleep 60
+           popd
            '''
       }
     }
 
     stage('test'){
       steps {
-        sh 'helm test xos-core'
-        sh 'kubectl logs xos-core-api-test'
-      }
-      post {
-        always {
-          archive '/tmp/helm_test_xos_core_logs_*/**'
+        sh '''
+           helm test xos-core
+           kubectl logs xos-core-api-test
+           mkdir -p ./RobotLogs;
+           cp /tmp/helm_test_xos_core_logs_*/* ./RobotLogs
+           '''
 
-        }
+        step([$class: 'RobotPublisher',
+             disableArchiveOutput: false,
+             logFileName: 'RobotLogs/log*.html',
+             otherFiles: '',
+             outputFileName: 'RobotLogs/output*.xml',
+             outputPath: '.',
+             passThreshold: 100,
+             reportFileName: 'RobotLogs/report*.html',
+             unstableThreshold: 0]);
       }
     }
   }
 
   post {
     always {
-      sh 'kubectl delete pod xos-core-api-test'
-      sh 'helm delete --purge xos-core'
+      sh '''
+         kubectl delete pod xos-core-api-test
+         helm delete --purge xos-core
+         '''
       deleteDir()
     }
   }
