diff --git a/jjb/pipeline/voltha-scale-test.groovy b/jjb/pipeline/voltha-scale-test.groovy
index ae0f63f..7e98596 100644
--- a/jjb/pipeline/voltha-scale-test.groovy
+++ b/jjb/pipeline/voltha-scale-test.groovy
@@ -284,13 +284,13 @@
               EXTRA_HELM_FLAGS+="--set images.bbsim.repository=${dockerRegistry}/voltha/bbsim,images.bbsim.tag=voltha-scale "
             fi
 
-            helm upgrade --install voltha-infra onf/voltha-infra \
+            helm upgrade --install voltha-infra onf/voltha-infra \$EXTRA_HELM_FLAGS \
               --set onos-classic.replicas=${onosReplicas},onos-classic.atomix.replicas=${atomixReplicas} \
               --set etcd.enabled=false,kafka.enabled=false \
               --set global.log_level=${logLevel} \
               -f $WORKSPACE/voltha-helm-charts/examples/${workflow}-values.yaml
 
-            helm upgrade --install voltha1 onf/voltha-stack \
+            helm upgrade --install voltha1 onf/voltha-stack \$EXTRA_HELM_FLAGS \
               --set global.stack_name=voltha1 \
               --set global.voltha_infra_name=voltha-infra \
               --set global.voltha_infra_namespace=default \
@@ -309,7 +309,8 @@
 
             for i in {0..${olts.toInteger() - 1}}; do
               stackId=1
-              helm upgrade --install bbsim\$i onf/bbsim --set olt_id="\${stackId}\${i}" \
+              helm upgrade --install bbsim\$i onf/bbsim \$EXTRA_HELM_FLAGS \
+                --set olt_id="\${stackId}\${i}" \
                 --set onu=${onus},pon=${pons} \
                 --set global.log_level=${logLevel.toLowerCase()} \
                 -f $WORKSPACE/voltha-helm-charts/examples/${workflow}-values.yaml
diff --git a/jjb/pipeline/voltha/master/bbsim-tests.groovy b/jjb/pipeline/voltha/master/bbsim-tests.groovy
new file mode 100644
index 0000000..d4b5b50
--- /dev/null
+++ b/jjb/pipeline/voltha/master/bbsim-tests.groovy
@@ -0,0 +1,172 @@
+// Copyright 2017-present Open Networking Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// voltha-2.x e2e tests
+// uses bbsim to simulate OLT/ONUs
+
+// TODO remove this and load the keywords as global
+library identifier: 'cord-jenkins-libraries@master',
+    //'master' refers to a valid git-ref
+    //'mylibraryname' can be any name you like
+    retriever: modernSCM([
+      $class: 'GitSCMSource',
+      remote: 'https://gerrit.opencord.org/ci-management.git'
+])
+
+def customImageFlags(image) {
+  return "--set images.${image}.tag=citest,images.${image}.pullPolicy=Never "
+}
+
+def test_workflow(name) {
+  stage('Deploy - '+ name + ' workflow') {
+      def extraHelmFlags = "${extraHelmFlags} --set global.log_level=DEBUG,onu=1,pon=1 "
+
+      if (gerritProject != "") {
+        extraHelmFlags = extraHelmFlags + customImageFlags("${gerritProject}")
+      }
+
+      volthaDeploy([workflow: name, extraHelmFlags: extraHelmFlags])
+      // start logging
+      sh """
+      mkdir -p $WORKSPACE/${name}
+      _TAG=kail-${name} kail -n infra -n voltha > $WORKSPACE/${name}/onos-voltha-combined.log &
+      """
+      // forward ONOS and VOLTHA ports
+      sh """
+      _TAG=onos-port-forward kubectl port-forward --address 0.0.0.0 -n infra svc/voltha-infra-onos-classic-hs 8101:8101&
+      _TAG=onos-port-forward kubectl port-forward --address 0.0.0.0 -n infra svc/voltha-infra-onos-classic-hs 8181:8181&
+      _TAG=voltha-port-forward kubectl port-forward --address 0.0.0.0 -n voltha svc/voltha-voltha-api 55555:55555&
+      """
+  }
+  stage('Test VOLTHA - '+ name + ' workflow') {
+      sh """
+      ROBOT_LOGS_DIR="$WORKSPACE/RobotLogs/${name.toUpperCase()}Workflow"
+      mkdir -p \$ROBOT_LOGS_DIR
+      export ROBOT_MISC_ARGS="-d \$ROBOT_LOGS_DIR -e PowerSwitch"
+
+      # By default, all tests tagged 'sanity' are run.  This covers basic functionality
+      # like running through the ATT workflow for a single subscriber.
+      export TARGET=sanity-kind-${name}
+
+      # If the Gerrit comment contains a line with "functional tests" then run the full
+      # functional test suite.  This covers tests tagged either 'sanity' or 'functional'.
+      # Note: Gerrit comment text will be prefixed by "Patch set n:" and a blank line
+      REGEX="functional tests"
+      if [[ "\$GERRIT_EVENT_COMMENT_TEXT" =~ \$REGEX ]]; then
+        export TARGET=functional-single-kind-${name}
+      fi
+
+      export VOLTCONFIG=$HOME/.volt/config
+      export KUBECONFIG=$HOME/.kube/config
+
+      # Run the specified tests
+      make -C $WORKSPACE/voltha-system-tests \$TARGET || true
+      """
+      // stop logging
+      sh """
+        P_IDS="\$(ps e -ww -A | grep "_TAG=kail-${name}" | grep -v grep | awk '{print \$1}')"
+        if [ -n "\$P_IDS" ]; then
+          echo \$P_IDS
+          for P_ID in \$P_IDS; do
+            kill -9 \$P_ID
+          done
+        fi
+      """
+      // remove port-forwarding
+      sh """
+        # remove orphaned port-forward from different namespaces
+        ps aux | grep port-forw | grep -v grep | awk '{print \$2}' | xargs --no-run-if-empty kill -9
+      """
+      // collect pod details
+      sh """
+      kubectl get pods --all-namespaces -o wide > \$WORKSPACE/${name}/pods.txt || true
+      kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.image}{'\\n'}" | sort | uniq | tee \$WORKSPACE/att/pod-images.txt || true
+      kubectl get pods --all-namespaces -o jsonpath="{range .items[*].status.containerStatuses[*]}{.imageID}{'\\n'}" | sort | uniq | tee \$WORKSPACE/att/pod-imagesId.txt || true
+      """
+      helmTeardown(['infra', 'voltha'])
+  }
+}
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+  options {
+    timeout(time: 90, unit: 'MINUTES')
+  }
+  environment {
+    PATH="$PATH:$WORKSPACE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
+    KUBECONFIG="$HOME/.kube/kind-config-${clusterName}"
+  }
+
+  stages{
+    stage('Download Code') {
+      steps {
+        getVolthaCode([
+          branch: "${branch}",
+          gerritProject: "${gerritProject}",
+          gerritRefspec: "${gerritRefspec}",
+          volthaSystemTestsChange: "${volthaSystemTestsChange}",
+          volthaHelmChartsChange: "${volthaHelmChartsChange}",
+        ])
+      }
+    }
+    stage('Build patch') {
+      steps {
+        // NOTE that the correct patch has already been checked out
+        // during the getVolthaCode step
+        buildVolthaComponent("${gerritProject}")
+      }
+    }
+    stage('Create K8s Cluster') {
+      steps {
+        createKubernetesCluster([nodes: 3])
+      }
+    }
+    stage('Load image in kind nodes') {
+      steps {
+        loadToKind()
+      }
+    }
+    stage('Run Test') {
+      steps {
+        test_workflow("att")
+        test_workflow("dt")
+        test_workflow("tt")
+      }
+    }
+  }
+
+  post {
+    always {
+      sh '''
+      gzip $WORKSPACE/att/onos-voltha-combined.log || true
+      gzip $WORKSPACE/dt/onos-voltha-combined.log || true
+      gzip $WORKSPACE/tt/onos-voltha-combined.log || true
+      '''
+      step([$class: 'RobotPublisher',
+         disableArchiveOutput: false,
+         logFileName: 'RobotLogs/*/log*.html',
+         otherFiles: '',
+         outputFileName: 'RobotLogs/*/output*.xml',
+         outputPath: '.',
+         passThreshold: 100,
+         reportFileName: 'RobotLogs/*/report*.html',
+         unstableThreshold: 0]);
+      archiveArtifacts artifacts: '*.log,**/*.log,**/*.gz,*.gz'
+    }
+  }
+}
