Merge "Use 4c-8g node to build ngic-rtc docker images"
diff --git a/jjb/cord-macros.yaml b/jjb/cord-macros.yaml
index 5a0f123..cc12b36 100644
--- a/jjb/cord-macros.yaml
+++ b/jjb/cord-macros.yaml
@@ -151,6 +151,12 @@
                 - type: JSONPath
                   key: merged
                   value: $.pull_request.merged
+                - type: JSONPath
+                  key: branchName
+                  value: $.pull_request.base.ref
+                - type: JSONPath
+                  key: gitRef
+                  value: $.pull_request.base.ref
             regex-filter-text: $action,$merged
             regex-filter-expression: ^(closed,true)$
             cause: Generic Cause
diff --git a/jjb/cord-test/nightly-build-pipeline.yaml b/jjb/cord-test/nightly-build-pipeline.yaml
index eaf06bf..e784f69 100644
--- a/jjb/cord-test/nightly-build-pipeline.yaml
+++ b/jjb/cord-test/nightly-build-pipeline.yaml
@@ -913,21 +913,11 @@
           description: ''
 
       - string:
-          name: onosVersion
-          default: '{onos-version}'
-          description: 'ONOS version that needs to be configured'
-
-      - string:
           name: workFlow
           default: '{work-flow}'
           description: 'Installs the specified work flow on the POD'
 
       - bool:
-          name: released
-          default: '{released}'
-          description: "Pulls released version images when true"
-
-      - bool:
           name: configurePod
           default: true
           description: "Configure POD via TOSCA post build"
@@ -1018,11 +1008,6 @@
           default: '{profile}'
           description: 'Technology Profile pushed to the ETCD'
 
-      - bool:
-          name: released
-          default: '{released}'
-          description: "Pulls tests that are tagged with released as identifier"
-
       - string:
           name: branch
           default: '{branch}'
diff --git a/jjb/cord-test/voltha.yaml b/jjb/cord-test/voltha.yaml
index b0cde41..9a9785b 100644
--- a/jjb/cord-test/voltha.yaml
+++ b/jjb/cord-test/voltha.yaml
@@ -9,7 +9,6 @@
     build-timeout: '300'
 
     with-kind: false
-    onos-version: '2.2'
     power-switch: False
     work-flow: ''
 
@@ -21,15 +20,15 @@
           release: 'master'
           branch: 'master'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
 
       # flex pod1 test job - using voltha branch
       - 'build_pod_test':
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
           branch: 'master'
           test-repo: 'voltha-system-tests'
           Jenkinsfile: 'Jenkinsfile-voltha-test'
@@ -41,9 +40,9 @@
           release: 'master'
           branch: 'master'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
 
       # onlab pod1 test job - BAL3.1 tests using voltha branch
       - 'build_pod_test':
@@ -60,9 +59,8 @@
           config-pod: 'flex-ocp-cord'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
           profile: 'Default'
@@ -74,7 +72,6 @@
           config-pod: 'flex-ocp-cord'
           release: 'master'
           branch: 'master'
-          released: false
           power-switch: True
           test-repo: 'voltha-system-tests'
           profile: 'Default'
@@ -85,12 +82,11 @@
           config-pod: 'flex-ocp-cord'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
           time: '3'
 
       # flex pod1 test job - test job uses 1TCONT/4GEMs tech profile - using voltha branch
@@ -99,34 +95,32 @@
           config-pod: 'flex-ocp-cord'
           release: 'master'
           branch: 'master'
-          released: false
           power-switch: True
           test-repo: 'voltha-system-tests'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
 
       # flex OCP pod with olt/onu - Released versions Default tech profile and timer based job
       - 'build_voltha_pod_release':
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
-          release: 'release'
-          branch: 'master'
+          release: '2.3'
+          branch: 'voltha-2.3'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
-          oltDebVersion: 'openolt_asfvolt16_bal3.2.deb'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
+          oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
-          released: true
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
           time: '4'
 
       # flex pod1 test job - released versions: uses tech profile on voltha branch
       - 'build_voltha_pod_test':
           build-node: 'qa-testvm-pod'
           config-pod: 'flex-ocp-cord'
-          release: 'release'
-          branch: 'master'
-          released: true
+          release: '2.3'
+          branch: 'voltha-2.3'
+          power-switch: True
           test-repo: 'voltha-system-tests'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
 
       # Menlo pod with olt/onu - Default tech profile and timer based job
       - 'build_voltha_pod_release':
@@ -134,9 +128,8 @@
           config-pod: 'onf-demo-pod'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
           profile: 'Default'
@@ -148,7 +141,6 @@
           config-pod: 'onf-demo-pod'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -156,12 +148,11 @@
       - 'build_voltha_pod_release':
           build-node: 'menlo-demo-pod'
           config-pod: 'onf-demo-pod'
-          release: 'release'
-          branch: 'master'
-          released: true
+          release: '2.3'
+          branch: 'voltha-2.3'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
-          oltDebVersion: 'openolt_asfvolt16_bal3.2.deb'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
+          oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
           profile: 'Default'
           time: '3'
@@ -170,9 +161,8 @@
       - 'build_voltha_pod_test':
           build-node: 'menlo-demo-pod'
           config-pod: 'onf-demo-pod'
-          release: 'release'
-          branch: 'master'
-          released: true
+          release: '2.3'
+          branch: 'voltha-2.3'
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -182,12 +172,11 @@
           config-pod: 'onf-demo-pod'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
           time: '4'
 
       # Menlo pod test job - master test job uses tech profile on voltha branch
@@ -196,11 +185,10 @@
           config-pod: 'onf-demo-pod'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
 
-      # Menlo pod with olt/onu - Uses GO Version - Default tech profile and timer based job
+      # Menlo pod with olt/onu - master branch,  Default tech profile and timer based job
       - 'build_voltha_pod_release':
           build-node: 'menlo-demo-pod'
           config-pod: 'onf-demo-pod'
@@ -208,9 +196,8 @@
           branch: 'master'
           name-extension: '_DT'
           work-flow: 'DT'
-          released: false
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
           profile: '1T8GEM'
@@ -223,7 +210,6 @@
           release: 'master'
           branch: 'master'
           name-extension: '_DT'
-          released: false
           test-repo: 'voltha-system-tests'
           profile: '1T8GEM'
           pipeline-script: 'voltha-dt-physical-functional-tests.groovy'
@@ -235,17 +221,17 @@
           release: 'master'
           branch: 'master'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
       - 'build_pod_test':
           build-node: 'menlo-demo-pod'
           config-pod: 'onf-demo-pod'
           branch: 'master'
           test-repo: 'voltha-system-tests'
           Jenkinsfile: 'Jenkinsfile-voltha-test'
-          profile: '1T4GEM-bal31'
+          profile: '1T4GEM'
 
       # Menlo DEMO-POD - Default TechProfile - manual build job
       - 'build_pod_manual':
@@ -254,7 +240,7 @@
           release: 'master'
           branch: 'master'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt_asfvolt16_bal3.2.deb'
           configurePod: true
           profile: 'Default'
@@ -274,13 +260,12 @@
           config-pod: 'infosys-pod'
           release: 'master'
           branch: 'master'
-          released: false
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt_asfvolt16.deb'
           configurePod: true
           profile: 'Default'
-          time: '1'
+          time: '7'
 
       # infosys test job - uses Default tech profile on voltha branch
       - 'build_voltha_pod_test':
@@ -288,7 +273,28 @@
           config-pod: 'infosys-pod'
           release: 'master'
           branch: 'master'
-          released: false
+          test-repo: 'voltha-system-tests'
+          profile: 'Default'
+
+     # Infosys pod with olt/onu - voltha-2.3 Default tech profile and timer based job
+      - 'build_voltha_pod_release':
+          build-node: 'infosys-test-pod'
+          config-pod: 'infosys-pod'
+          release: '2.3'
+          branch: 'voltha-2.3'
+          test-repo: 'voltha-system-tests'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
+          oltDebVersion: 'openolt_asfvolt16.deb'
+          configurePod: true
+          profile: 'Default'
+          time: '10'
+
+      # infosys test job - voltha-2.3 release job, uses Default tech profile on voltha branch
+      - 'build_voltha_pod_test':
+          build-node: 'infosys-test-pod'
+          config-pod: 'infosys-pod'
+          release: '2.3'
+          branch: 'voltha-2.3'
           test-repo: 'voltha-system-tests'
           profile: 'Default'
 
@@ -299,12 +305,10 @@
           config-pod: 'dt-berlin-pod'
           release: 'master'
           branch: 'master'
-          onos-version: '2.2'
           test-repo: 'voltha-system-tests'
-          Jenkinsfile: 'Jenkinsfile-voltha-bal31-build'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
           oltDebVersion: 'openolt-2.3.0.deb'
           configurePod: true
-          released: false
           profile: 'Default'
           with-kind: true
           time: '9'
@@ -316,7 +320,31 @@
           config-pod: 'dt-berlin-pod'
           release: 'master'
           branch: 'master'
-          released: false
+          test-repo: 'voltha-system-tests'
+          profile: 'Default'
+          power-switch: True
+
+     # Berlin pod with olt/onu - voltha-2.3 Default tech profile and timer based job
+      - 'build_voltha_pod_release':
+          build-node: 'dt-berlin-community-pod'
+          config-pod: 'dt-berlin-pod'
+          release: '2.3'
+          branch: 'voltha-2.3'
+          test-repo: 'voltha-system-tests'
+          Jenkinsfile: 'Jenkinsfile-voltha-build'
+          oltDebVersion: 'openolt-2.3.0.deb'
+          configurePod: true
+          profile: 'Default'
+          with-kind: true
+          time: '11'
+
+
+      # Berlin POD test job - master versions: uses tech profile on voltha branch
+      - 'build_voltha_pod_test':
+          build-node: 'dt-berlin-community-pod'
+          config-pod: 'dt-berlin-pod'
+          release: '2.3'
+          branch: 'voltha-2.3'
           test-repo: 'voltha-system-tests'
           profile: 'Default'
           power-switch: True
diff --git a/jjb/omec-ci.yaml b/jjb/omec-ci.yaml
index 1e3eaf1..f1afffd 100644
--- a/jjb/omec-ci.yaml
+++ b/jjb/omec-ci.yaml
@@ -151,6 +151,27 @@
           pipeline-file: 'omec-reuse-scan.groovy'
           build-node: 'omec-qa'
 
+# for ignite
+- project:
+    name: ignite
+    project: '{name}'
+
+    build-node: 'intel-102'
+
+    github-organization: 'omec-project'
+
+    github_pr_auth_id: '64fe2b1a-b33a-4f13-8442-ad8360434003'
+    github_pr_org_list:
+      - 'omec-project'
+
+    jobs:
+      - 'omec-fossa':
+          pipeline-file: 'omec-fossa-scan.groovy'
+          build-node: 'omec-qa'
+      - 'omec-reuse':
+          pipeline-file: 'omec-reuse-scan.groovy'
+          build-node: 'omec-qa'
+
 # Combined pipeline
 - job-template:
     id: 'omec-combined'
@@ -204,7 +225,6 @@
             branches:
               - 'master'
 
-
 # install jobs, run for each project
 - job-template:
     id: 'omec-install'
diff --git a/jjb/pipeline/omec-fossa-scan.groovy b/jjb/pipeline/omec-fossa-scan.groovy
index 613b03e..24c6cab 100644
--- a/jjb/pipeline/omec-fossa-scan.groovy
+++ b/jjb/pipeline/omec-fossa-scan.groovy
@@ -70,6 +70,9 @@
 
                         echo "Get FOSSA test results with 'fossa test'"
                         fossa test --no-ansi --verbose
+
+                        echo "Display list of licenses detected by FOSSA using 'fossa report licenses'"
+                        fossa report licenses
                         """
 
                 }
diff --git a/jjb/pipeline/omec-reuse-scan.groovy b/jjb/pipeline/omec-reuse-scan.groovy
index 6b471ab..ade6f6e 100644
--- a/jjb/pipeline/omec-reuse-scan.groovy
+++ b/jjb/pipeline/omec-reuse-scan.groovy
@@ -49,20 +49,26 @@
 
         stage("Run REUSE Linter"){
             steps {
-                sh  """
+                sh  '''
                     #!/usr/bin/env bash
 
-                    cd ${params.project}
+                    cd $project
                     git checkout FETCH_HEAD
                     git show
 
                     mkdir ../jenkins-license-scan
-                    cp --parents $(git diff-tree --no-commit-id --name-only -r HEAD) ../jenkins-license-scan
-                    cd ../jenkins-license-scan
+                    modifiedFiles=$(git diff-tree --no-commit-id --name-only -r HEAD)
+                    if [ -n "$modifiedFiles" ]
+                    then
+                        cp --parents "$modifiedFiles" ../jenkins-license-scan
+                        cd ../jenkins-license-scan
 
-                    reuse download --all
-                    reuse lint
-                    """
+                        reuse download --all
+                        reuse lint
+                    else
+                        echo "There were no files to check. Skipping REUSE scan."
+                    fi
+                    '''
             }
         }
     }
diff --git a/jjb/pipeline/voltha-bbsim-tests.groovy b/jjb/pipeline/voltha-bbsim-tests.groovy
index a64d6ef..ca289ab 100644
--- a/jjb/pipeline/voltha-bbsim-tests.groovy
+++ b/jjb/pipeline/voltha-bbsim-tests.groovy
@@ -49,7 +49,7 @@
           poll: false,
           scm: [$class: 'RepoScm', \
             manifestRepositoryUrl: "${params.manifestUrl}", \
-            manifestBranch: "${params.manifestBranch}", \
+            manifestBranch: "${params.branch}", \
             currentBranch: true, \
             destinationDir: 'voltha', \
             forceSync: true,
@@ -78,6 +78,14 @@
       steps {
         sh """
            git clone https://github.com/ciena/kind-voltha.git
+
+           if [ "${branch}" != "master" ]; then
+             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+             source "kind-voltha/releases/${branch}"
+           else
+             echo "on master, using default settings for kind-voltha"
+           fi
+
            cd kind-voltha/
            JUST_K8S=y ./voltha up
            bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/kind-voltha/bin"
@@ -107,6 +115,11 @@
              make-local voltha-openolt-adapter
              make-local voltha-openonu-adapter
              make-local ofagent-py
+           elif [ "${gerritProject}" = "voltctl" ]; then
+             # Set and handle GOPATH and PATH
+             export GOPATH=\${GOPATH:-$WORKSPACE/go}
+             export PATH=\$PATH:/usr/lib/go-1.12/bin:/usr/local/go/bin:\$GOPATH/bin
+             make -C $WORKSPACE/voltha/voltctl/ build
            elif ! [[ "${gerritProject}" =~ ^(voltha-helm-charts|voltha-system-tests)\$ ]]; then
              make-local ${gerritProject}
            fi
@@ -117,7 +130,14 @@
     stage('Push Images') {
       steps {
         sh '''
-           if ! [[ "${gerritProject}" =~ ^(voltha-helm-charts|voltha-system-tests)\$ ]]; then
+           if [ "${branch}" != "master" ]; then
+             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+             source "kind-voltha/releases/${branch}"
+           else
+             echo "on master, using default settings for kind-voltha"
+           fi
+
+           if ! [[ "${gerritProject}" =~ ^(voltha-helm-charts|voltha-system-tests|voltctl)\$ ]]; then
              export GOROOT=/usr/local/go
              export GOPATH=\$(pwd)
              docker images | grep citest
@@ -129,7 +149,14 @@
     stage('Deploy Voltha') {
       steps {
         sh '''
-           export EXTRA_HELM_FLAGS="--set log_agent.enabled=False ${extraHelmFlags} "
+           if [ "${branch}" != "master" ]; then
+             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+             source "kind-voltha/releases/${branch}"
+           else
+             echo "on master, using default settings for kind-voltha"
+           fi
+
+           export EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${extraHelmFlags} "
 
            IMAGES=""
            if [ "${gerritProject}" = "voltha-go" ]; then
@@ -174,6 +201,12 @@
              helm dep update \$VOLTHA_ADAPTER_OPEN_ONU_CHART
            fi
 
+           if [ "${gerritProject}" = "voltctl" ]; then
+             export VOLTCTL_VERSION=$(cat $WORKSPACE/voltha/voltctl/VERSION)
+             cp $WORKSPACE/voltha/voltctl/voltctl $WORKSPACE/kind-voltha/bin/voltctl
+             md5sum $WORKSPACE/kind-voltha/bin/voltctl
+           fi
+
            cd $WORKSPACE/kind-voltha/
            echo \$EXTRA_HELM_FLAGS
            kail -n voltha -n default > $WORKSPACE/onos-voltha-combined.log &
@@ -217,6 +250,7 @@
 
          sync
          pkill kail || true
+         md5sum $WORKSPACE/kind-voltha/bin/voltctl
 
          ## Pull out errors from log files
          extract_errors_go() {
@@ -240,7 +274,15 @@
 
          gzip $WORKSPACE/onos-voltha-combined.log
 
+
          ## shut down kind-voltha
+         if [ "${branch}" != "master" ]; then
+           echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+           source "kind-voltha/releases/${branch}"
+         else
+           echo "on master, using default settings for kind-voltha"
+         fi
+
          cd $WORKSPACE/kind-voltha
 	       WAIT_ON_DOWN=y ./voltha down
          '''
diff --git a/jjb/pipeline/voltha-dt-physical-functional-tests.groovy b/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
index 98f4edb..4ef0450 100644
--- a/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-dt-physical-functional-tests.groovy
@@ -36,7 +36,7 @@
     stage ('Initialize') {
       steps {
         step([$class: 'WsCleanup'])
-        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
         script {
            deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}-DT.yaml"
         }
@@ -45,7 +45,7 @@
           poll: false,
           scm: [$class: 'RepoScm',
             manifestRepositoryUrl: "${params.manifestUrl}",
-            manifestBranch: "${params.manifestBranch}",
+            manifestBranch: "${params.branch}",
             currentBranch: true,
             destinationDir: 'voltha',
             forceSync: true,
@@ -88,11 +88,7 @@
         ./log-combine.sh > /dev/null &
 
         mkdir -p $ROBOT_LOGS_DIR
-        if  ( ${released} ); then
-            export ROBOT_MISC_ARGS="--removekeywords wuks -i released -i sanityDt -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        else
-            export ROBOT_MISC_ARGS="--removekeywords wuks -i sanityDt -i functionalDt -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        fi
+        export ROBOT_MISC_ARGS="--removekeywords wuks -i sanityDt -i functionalDt -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
         make -C $WORKSPACE/voltha/voltha-system-tests voltha-dt-test || true
         """
       }
diff --git a/jjb/pipeline/voltha-go-multi-tests.groovy b/jjb/pipeline/voltha-go-multi-tests.groovy
index 4d0fde1..437b120 100644
--- a/jjb/pipeline/voltha-go-multi-tests.groovy
+++ b/jjb/pipeline/voltha-go-multi-tests.groovy
@@ -37,7 +37,6 @@
     DEPLOY_K8S="y"
     VOLTHA_LOG_LEVEL="DEBUG"
     CONFIG_SADIS="n"
-    EXTRA_HELM_FLAGS="--set log_agent.enabled=False ${params.extraHelmFlags}"
     ROBOT_MISC_ARGS="${params.extraRobotArgs} -d $WORKSPACE/RobotLogs"
   }
   stages {
@@ -49,7 +48,7 @@
           poll: false,
           scm: [$class: 'RepoScm',
             manifestRepositoryUrl: "${params.manifestUrl}",
-            manifestBranch: "${params.manifestBranch}",
+            manifestBranch: "${params.branch}",
             currentBranch: true,
             destinationDir: 'voltha',
             forceSync: true,
@@ -76,6 +75,16 @@
     stage('Deploy Voltha') {
       steps {
         sh """
+           export EXTRA_HELM_FLAGS=""
+           if [ "${branch}" != "master" ]; then
+             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+             source "$HOME/kind-voltha/releases/${branch}"
+           else
+             echo "on master, using default settings for kind-voltha"
+           fi
+
+           EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags} "
+
            cd $HOME/kind-voltha/
            WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
            ./voltha up
diff --git a/jjb/pipeline/voltha-go-tests.groovy b/jjb/pipeline/voltha-go-tests.groovy
index 38efb38..fc1d613 100644
--- a/jjb/pipeline/voltha-go-tests.groovy
+++ b/jjb/pipeline/voltha-go-tests.groovy
@@ -37,7 +37,6 @@
     DEPLOY_K8S="y"
     VOLTHA_LOG_LEVEL="DEBUG"
     CONFIG_SADIS="n"
-    EXTRA_HELM_FLAGS="--set log_agent.enabled=False ${params.extraHelmFlags}"
     ROBOT_MISC_ARGS="${params.extraRobotArgs} -d $WORKSPACE/RobotLogs"
   }
   stages {
@@ -49,7 +48,7 @@
           poll: false,
           scm: [$class: 'RepoScm',
             manifestRepositoryUrl: "${params.manifestUrl}",
-            manifestBranch: "${params.manifestBranch}",
+            manifestBranch: "${params.branch}",
             currentBranch: true,
             destinationDir: 'voltha',
             forceSync: true,
@@ -76,6 +75,16 @@
     stage('Deploy Voltha') {
       steps {
         sh """
+           export EXTRA_HELM_FLAGS=""
+           if [ "${branch}" != "master" ]; then
+             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+             source "$HOME/kind-voltha/releases/${branch}"
+           else
+             echo "on master, using default settings for kind-voltha"
+           fi
+
+           EXTRA_HELM_FLAGS+="--set log_agent.enabled=False ${params.extraHelmFlags} "
+
            cd $HOME/kind-voltha/
            WAIT_ON_DOWN=y DEPLOY_K8S=n ./voltha down || ./voltha down
            ./voltha up
diff --git a/jjb/pipeline/voltha-physical-build-and-tests.groovy b/jjb/pipeline/voltha-physical-build-and-tests.groovy
index ffb45b6..66e09e7 100644
--- a/jjb/pipeline/voltha-physical-build-and-tests.groovy
+++ b/jjb/pipeline/voltha-physical-build-and-tests.groovy
@@ -22,9 +22,10 @@
 localSadisConfigFile = null
 
 // The pipeline assumes these variables are always defined
-if ( ! params.withPatchset ) {
+if ( params.manualBranch != "" ) {
   GERRIT_EVENT_COMMENT_TEXT = ""
   GERRIT_PROJECT = ""
+  GERRIT_BRANCH = "${params.manualBranch}"
   GERRIT_CHANGE_NUMBER = ""
   GERRIT_PATCHSET_NUMBER = ""
 }
@@ -76,7 +77,7 @@
           poll: false,
           scm: [$class: 'RepoScm',
             manifestRepositoryUrl: "${params.manifestUrl}",
-            manifestBranch: "${params.manifestBranch}",
+            manifestBranch: "${params.branch}",
             currentBranch: true,
             destinationDir: 'voltha',
             forceSync: true,
@@ -90,7 +91,7 @@
 
     stage('Get Patch') {
       when {
-        expression { params.withPatchset }
+        expression { params.manualBranch == "" }
       }
       steps {
         sh returnStdout: false, script: """
@@ -121,6 +122,14 @@
       steps {
         sh returnStdout: false, script: """
         git clone https://github.com/ciena/kind-voltha.git
+
+        if [ "${branch}" != "master" ]; then
+          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+          source "kind-voltha/releases/${branch}"
+        else
+          echo "on master, using default settings for kind-voltha"
+        fi
+
         cd kind-voltha/
         JUST_K8S=y ./voltha up
         """
@@ -129,10 +138,18 @@
 
     stage('Build and Push Images') {
       when {
-        expression { params.withPatchset }
+        expression { params.manualBranch == "" }
       }
       steps {
         sh returnStdout: false, script: """
+
+        if [ "${branch}" != "master" ]; then
+          echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+          source "kind-voltha/releases/${branch}"
+        else
+          echo "on master, using default settings for kind-voltha"
+        fi
+
         if ! [[ "${gerritProject}" =~ ^(voltha-system-tests)\$ ]]; then
           make -C $WORKSPACE/voltha/${gerritProject} DOCKER_REPOSITORY=voltha/ DOCKER_TAG=citest docker-build
           docker images | grep citest
@@ -157,7 +174,14 @@
       steps {
         script {
           sh returnStdout: false, script: """
-          export EXTRA_HELM_FLAGS='--set log_agent.enabled=False -f ${localKindVolthaValuesFile} '
+          if [ "${branch}" != "master" ]; then
+            echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+            source "kind-voltha/releases/${branch}"
+          else
+            echo "on master, using default settings for kind-voltha"
+          fi
+
+          export EXTRA_HELM_FLAGS+='--set log_agent.enabled=False -f ${localKindVolthaValuesFile} '
 
           IMAGES=""
           if [ "${gerritProject}" = "voltha-go" ]; then
@@ -283,7 +307,6 @@
       steps {
         sh returnStdout: false, script: """
         cd voltha
-        git clone -b ${branch} ${cordRepoUrl}/cord-tester
         mkdir -p $WORKSPACE/RobotLogs
 
         # If the Gerrit comment contains a line with "functional tests" then run the full
@@ -301,7 +324,7 @@
 
     stage('After-Test Delay') {
       when {
-        expression { params.withPatchset }
+        expression { params.manualBranch == "" }
       }
       steps {
         sh returnStdout: false, script: """
diff --git a/jjb/pipeline/voltha-physical-functional-tests.groovy b/jjb/pipeline/voltha-physical-functional-tests.groovy
index 3cf088b..038d89c 100644
--- a/jjb/pipeline/voltha-physical-functional-tests.groovy
+++ b/jjb/pipeline/voltha-physical-functional-tests.groovy
@@ -36,7 +36,7 @@
     stage ('Initialize') {
       steps {
         step([$class: 'WsCleanup'])
-        sh returnStdout: false, script: "git clone -b ${branch} ${cordRepoUrl}/${configBaseDir}"
+        sh returnStdout: false, script: "git clone -b master ${cordRepoUrl}/${configBaseDir}"
         script {
           deployment_config = readYaml file: "${configBaseDir}/${configDeploymentDir}/${configFileName}.yaml"
         }
@@ -45,7 +45,7 @@
           poll: false,
           scm: [$class: 'RepoScm',
             manifestRepositoryUrl: "${params.manifestUrl}",
-            manifestBranch: "${params.manifestBranch}",
+            manifestBranch: "${params.branch}",
             currentBranch: true,
             destinationDir: 'voltha',
             forceSync: true,
@@ -56,7 +56,7 @@
           )
         sh returnStdout: false, script: """
         cd voltha
-        git clone -b ${branch} ${cordRepoUrl}/cord-tester
+        git clone -b master ${cordRepoUrl}/cord-tester
         mkdir -p $WORKSPACE/bin
         bash <( curl -sfL https://raw.githubusercontent.com/boz/kail/master/godownloader.sh) -b "$WORKSPACE/bin"
         cd $WORKSPACE
@@ -88,11 +88,7 @@
         ./log-combine.sh > /dev/null &
 
         mkdir -p $ROBOT_LOGS_DIR
-        if  ( ${released} ); then
-            export ROBOT_MISC_ARGS="--removekeywords wuks -i released -i sanity -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        else
-            export ROBOT_MISC_ARGS="--removekeywords wuks -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        fi
+        export ROBOT_MISC_ARGS="--removekeywords wuks -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
         make -C $WORKSPACE/voltha/voltha-system-tests voltha-test || true
         """
       }
@@ -107,9 +103,7 @@
       steps {
         sh """
         mkdir -p $ROBOT_LOGS_DIR
-        if  ( ${released} ); then
-            export ROBOT_MISC_ARGS="--removekeywords wuks -i released -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        elif ( ${powerSwitch} ); then
+        if ( ${powerSwitch} ); then
              export ROBOT_MISC_ARGS="--removekeywords wuks -L TRACE -i functional -i PowerSwitch -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
         else
              export ROBOT_MISC_ARGS="--removekeywords wuks -L TRACE -i functional -e PowerSwitch -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
@@ -128,11 +122,7 @@
       steps {
         sh """
         mkdir -p $ROBOT_LOGS_DIR
-        if  ( ${released} ); then
-            export ROBOT_MISC_ARGS="--removekeywords wuks -i released -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        else
-            export ROBOT_MISC_ARGS="--removekeywords wuks -L TRACE -i functional -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
-        fi
+        export ROBOT_MISC_ARGS="--removekeywords wuks -L TRACE -i functional -e bbsim -e notready -d $ROBOT_LOGS_DIR -v POD_NAME:${configFileName} -v KUBERNETES_CONFIGS_DIR:$WORKSPACE/${configBaseDir}/${configKubernetesDir} -v container_log_dir:$WORKSPACE"
         make -C $WORKSPACE/voltha/voltha-system-tests voltha-test || true
         """
       }
diff --git a/jjb/pipeline/voltha-scale-measurements.groovy b/jjb/pipeline/voltha-scale-measurements.groovy
index 038c5b2..7df33b1 100644
--- a/jjb/pipeline/voltha-scale-measurements.groovy
+++ b/jjb/pipeline/voltha-scale-measurements.groovy
@@ -22,7 +22,7 @@
       steps {
         sh '''
           rm -rf voltha-devices-count.txt voltha-devices-time.txt onos-ports-count.txt onos-ports-time.txt onos-ports-list.txt voltha-devices-list.json onos-ports-time-num.txt voltha-devices-time-num.txt
-          for hchart in \$(helm list -q | grep -E -v 'docker-registry|cord-kafka|etcd-operator');
+          for hchart in \$(helm list -q | grep -E -v 'docker-registry|kafkacat|etcd-operator');
           do
               echo "Purging chart: \${hchart}"
               helm delete --purge "\${hchart}"
@@ -47,6 +47,7 @@
       steps {
         sh '''
           helm repo update
+          helm install -n cord-kafka incubator/kafka -f /home/cord/voltha-scale/voltha-values.yaml --version 0.13.3 --set replicas=3 --set persistence.enabled=false --set zookeeper.replicaCount=3 --set zookeeper.persistence.enabled=false
           helm install -n nem-monitoring cord/nem-monitoring --set kpi_exporter.enabled=false,dashboards.xos=false,dashboards.onos=false,dashboards.aaa=false,dashboards.voltha=false
 
           IFS=: read -r onosRepo onosTag <<< ${onosImg}
diff --git a/jjb/pipeline/voltha-system-test-bbsim.groovy b/jjb/pipeline/voltha-system-test-bbsim.groovy
index e639d4a..2d89c03 100644
--- a/jjb/pipeline/voltha-system-test-bbsim.groovy
+++ b/jjb/pipeline/voltha-system-test-bbsim.groovy
@@ -38,7 +38,6 @@
     DEPLOY_K8S="y"
     VOLTHA_LOG_LEVEL="DEBUG"
     CONFIG_SADIS="y"
-    EXTRA_HELM_FLAGS="${params.extraHelmFlags} --set voltha-etcd-cluster.clusterSize=3"
     ROBOT_MISC_ARGS="-d $WORKSPACE/RobotLogs"
   }
 
@@ -66,6 +65,17 @@
     stage('Deploy Voltha') {
       steps {
         sh """
+           export EXTRA_HELM_FLAGS=""
+           if [ "${branch}" != "master" ]; then
+             echo "on branch: ${branch}, sourcing kind-voltha/releases/${branch}"
+             source "$WORKSPACE/kind-voltha/releases/${branch}"
+           else
+             echo "on master, using default settings for kind-voltha"
+           fi
+
+           EXTRA_HELM_FLAGS+="${params.extraHelmFlags} --set voltha-etcd-cluster.clusterSize=3 "
+           echo \$EXTRA_HELM_FLAGS
+
            pushd kind-voltha/
            ./voltha up
            popd
@@ -77,7 +87,7 @@
       steps {
         sh '''
            rm -rf $WORKSPACE/RobotLogs; mkdir -p $WORKSPACE/RobotLogs
-           git clone https://gerrit.opencord.org/voltha-system-tests
+           git clone -b ${branch} https://gerrit.opencord.org/voltha-system-tests
            make ROBOT_DEBUG_LOG_OPT="-l sanity_log.html -r sanity_report.html -o sanity_output.xml" -C $WORKSPACE/voltha-system-tests ${makeTarget}
            '''
       }
diff --git a/jjb/pipeline/xos-service-upgrade.groovy b/jjb/pipeline/xos-service-upgrade.groovy
index 12fb69b..10d2a14 100644
--- a/jjb/pipeline/xos-service-upgrade.groovy
+++ b/jjb/pipeline/xos-service-upgrade.groovy
@@ -16,7 +16,7 @@
 // Checks functionality of the helm-chart, without overriding the version/tag used
 
 def serviceName = "${gerritProject}"
-def xosCoreVersionMismatch = false
+def doTest = true
 
 pipeline {
 
@@ -87,71 +87,71 @@
           if (serviceName == "olt-service") {
             serviceName = "volt"
           }
-          else if (serviceName == "onos-service") {
-            serviceName = "onos"
-          }
           else if (serviceName == "kubernetes-service") {
             serviceName = "kubernetes"
           }
+          def result = sh returnStdout: true, script: """
+             #!/usr/bin/env bash
+             set -eu -o pipefail
+
+             # Obtain git tag of the service corresponding to the the docker image
+             # used in the latest released version of the helm chart (i.e., HEAD
+             # of cord/helm-charts master branch, which should be already checked
+             # out by repo).
+             pushd cord/helm-charts
+             export RELEASED_GIT_TAG=\$(echo -e "import yaml\\nwith open('xos-services/${serviceName}/Chart.yaml', 'r') as f: print yaml.safe_load(f)['appVersion']" | python)
+             popd
+
+             # Obtain the xos-core version requirement from the config.yaml of the
+             # released service.
+             pushd cord
+             PROJECT_PATH=\$(xmllint --xpath "string(//project[@name=\\\"${gerritProject}\\\"]/@path)" .repo/manifests/default.xml)
+             pushd \${PROJECT_PATH}
+             git fetch --all --tags
+             git checkout tags/\${RELEASED_GIT_TAG} -b foobar
+             export RELEASED_CORE_VER_REQ=\$(echo -e "import yaml\\nwith open('xos/synchronizer/config.yaml', 'r') as f: print yaml.safe_load(f)['core_version']" | python)
+             popd
+             popd
+
+             # Do the same for the patchset we want to verify.
+             pushd cord
+             repo download "\$PROJECT_PATH" "${gerritChangeNumber}/${gerritPatchsetNumber}"
+             pushd \${PROJECT_PATH}
+             export PATCHSET_CORE_VER_REQ=\$(echo -e "import yaml\\nwith open('xos/synchronizer/config.yaml', 'r') as f: print yaml.safe_load(f)['core_version']" | python)
+             popd
+             popd
+
+             # We need to produce at least one log file so the archiveArtifacts
+             # step later won't complain.
+             echo "RELEASED_CORE_VER_REQ: \${RELEASED_CORE_VER_REQ}" >> $WORKSPACE/version_requirements.log
+             echo "PATCHSET_CORE_VER_REQ: \${PATCHSET_CORE_VER_REQ}" >> $WORKSPACE/version_requirements.log
+
+             if [ "\${PATCHSET_CORE_VER_REQ}" == "\${RELEASED_CORE_VER_REQ}" ]; then
+               echo 0
+             else
+               # versionMismatch is true
+               echo 1
+             fi
+             """
+          def versionMismatch = result.readLines().last().toBoolean()
+          if (versionMismatch) {
+            echo "Detected xos-core version requirements mismatch. Will skip the rest of the pipeline and return SUCCESS"
+          }
+          doTest = !versionMismatch
         }
-        result = sh returnStdout: true, script: """
-           #!/usr/bin/env bash
-           set -eu -o pipefail
-
-           # Obtain git tag of the service corresponding to the the docker image
-           # used in the latest released version of the helm chart (i.e., HEAD
-           # of cord/helm-charts master branch, which should be already checked
-           # out by repo).
-           pushd cord/helm-charts
-           export RELEASED_GIT_TAG=\$(echo -e "import yaml\\nwith open('xos-services/${serviceName}/Chart.yaml', 'r') as f: print yaml.safe_load(f)['appVersion']" | python)
-           popd
-
-           # Obtain the xos-core version requirement from the config.yaml of the
-           # released service.
-           pushd cord
-           PROJECT_PATH=\$(xmllint --xpath "string(//project[@name=\\\"${gerritProject}\\\"]/@path)" .repo/manifest.xml)
-           pushd \${PROJECT_PATH}
-           git fetch --all --tags
-           git checkout tags/\${RELEASED_GIT_TAG} -b foobar
-           export RELEASED_CORE_VER_REQ=\$(echo -e "import yaml\\nwith open('xos/synchronizer/config.yaml', 'r') as f: yaml.safe_load(f)['core_version']" | python)
-           popd
-           popd
-
-           # Do the same for the patchset we want to verify.
-           pushd cord
-           repo download "\$PROJECT_PATH" "${gerritChangeNumber}/${gerritPatchsetNumber}"
-           pushd \${PROJECT_PATH}
-           export PATCHSET_CORE_VER_REQ=\$(echo -e "import yaml\\nwith open('xos/synchronizer/config.yaml', 'r') as f: yaml.safe_load(f)['core_version']" | python)
-           popd
-           popd
-
-           echo "RELEASED_CORE_VER_REQ: \${RELEASED_CORE_VER_REQ}"
-           echo "PATCHSET_CORE_VER_REQ: \${PATCHSET_CORE_VER_REQ}"
-
-           if [ "\${PATCHSET_CORE_VER_REQ}" == "\${RELEASED_CORE_VER_REQ}" ]; then
-             echo 0
-           else
-             # xosCoreVersionMismatch is true
-             echo 1
-           fi
-           """
-        xosCoreVersionMismatch = result.toBoolean()
       }
     }
 
-    if( xosCoreVersionMismatch ) {
-      echo "Detected xos-core version requirements mismatch. Will skip the rest of the pipeline and return SUCCESS"
-      currentBuild.result = 'SUCCESS'
-      return
-    }
-
     // The patchset should be already checked out, but for consistency with
     // other pipeline jobs, we re-do the same here.
     stage('patch') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh '''
            pushd cord
-           PROJECT_PATH=\$(xmllint --xpath "string(//project[@name=\\\"${gerritProject}\\\"]/@path)" .repo/manifest.xml)
+           PROJECT_PATH=\$(xmllint --xpath "string(//project[@name=\\\"${gerritProject}\\\"]/@path)" .repo/manifests/default.xml)
            repo download "\$PROJECT_PATH" "${gerritChangeNumber}/${gerritPatchsetNumber}"
            popd
            '''
@@ -159,14 +159,14 @@
     }
 
     stage('Install XOS w/Service') {
+      when {
+        expression { doTest  }
+      }
       steps {
         script {
           if (serviceName == "olt-service") {
             serviceName = "volt"
           }
-          else if (serviceName == "onos-service") {
-            serviceName = "onos"
-          }
           else if (serviceName == "kubernetes-service") {
             serviceName = "kubernetes"
           }
@@ -189,6 +189,9 @@
       }
     }
     stage('Verify') {
+      when {
+        expression { doTest  }
+      }
       steps {
         echo "serviceName: ${serviceName}"
         sh """
@@ -209,6 +212,9 @@
       }
     }
     stage('Generate Model API Tests') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh """
            CORE_CONTAINER=\$(docker ps | grep k8s_xos-core | awk '{print \$1}')
@@ -231,6 +237,9 @@
     }
 
     stage('Test Pre-Upgrade') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh """
            #!/usr/bin/env bash
@@ -266,6 +275,9 @@
     }
 
     stage('Build/Install New Service') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh """
            #!/usr/bin/env bash
@@ -289,6 +301,9 @@
     }
 
     stage('Verify Service Upgrade') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh """
            #!/usr/bin/env bash
@@ -305,6 +320,9 @@
     }
 
     stage('Test Post-Upgrade') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh """
            #!/usr/bin/env bash
@@ -328,6 +346,9 @@
 
     /* Disable the downgrade step because the core doesn't support reverse migrations
     stage('Downgrade Service') {
+      when {
+        expression { doTest  }
+      }
       steps {
         sh """
            #!/usr/bin/env bash
@@ -385,10 +406,14 @@
 
          # copy robot logs
          if [ -d RobotLogs ]; then rm -r RobotLogs; fi; mkdir RobotLogs
-         cp -r $WORKSPACE/cord/test/cord-tester/src/test/cord-api/Tests/Log/*ml ./RobotLogs
+         cp -r $WORKSPACE/cord/test/cord-tester/src/test/cord-api/Tests/Log/*ml ./RobotLogs || true
+         # Workaorund for when doTest is false and there's no Robot output to
+         # process. Without this file, RobotPublisher below will fail marking
+         # the build as FAILED.
+         if [ ! -f RobotLogs/output.xml ]; then echo '<xml></xml>' > RobotLogs/output.xml; fi;
          kubectl get pods --all-namespaces
          kubectl describe pods
-         http -a admin@opencord.org:letmein GET http://127.0.0.1:30001/xosapi/v1/dynamicload/load_status
+         http -a admin@opencord.org:letmein GET http://127.0.0.1:30001/xosapi/v1/dynamicload/load_status || true
          echo "# removing helm deployments"
          kubectl get pods
          helm list
diff --git a/jjb/verify/aaa.yaml b/jjb/verify/aaa.yaml
index 438dd3e..d834f06 100644
--- a/jjb/verify/aaa.yaml
+++ b/jjb/verify/aaa.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'aaa-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!aaa-1\.10).*)$'
 
       - 'aaa-jobs-legacy':
           branch-regexp: '^(aaa-1.10)$'
diff --git a/jjb/verify/bbsim.yaml b/jjb/verify/bbsim.yaml
index f4e2e13..5b06d42 100644
--- a/jjb/verify/bbsim.yaml
+++ b/jjb/verify/bbsim.yaml
@@ -35,5 +35,5 @@
       - 'github-release':
            dependency-jobs: 'version-tag'
            github-organization: 'opencord'
-           release-targets: 'dep release'
+           release-targets: 'release'
            artifact-glob: 'release/*'
diff --git a/jjb/verify/dhcpl2relay.yaml b/jjb/verify/dhcpl2relay.yaml
index ef1d849..c24ee84 100644
--- a/jjb/verify/dhcpl2relay.yaml
+++ b/jjb/verify/dhcpl2relay.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'dhcpl2relay-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!dhcpl2relay-1\.6).*)$'
 
       - 'dhcpl2relay-jobs-legacy':
           branch-regexp: '^(dhcpl2relay-1.6)$'
@@ -34,4 +34,3 @@
     jobs:
       - 'maven-test'
       - 'maven-publish'
-
diff --git a/jjb/verify/igmp.yaml b/jjb/verify/igmp.yaml
index 143d8c4..759b1ef 100644
--- a/jjb/verify/igmp.yaml
+++ b/jjb/verify/igmp.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'igmp-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!igmp-1\.4).*)$'
 
       - 'igmp-jobs-legacy':
           branch-regexp: '^(igmp-1.4)$'
@@ -34,4 +34,3 @@
     jobs:
       - 'maven-test'
       - 'maven-publish'
-
diff --git a/jjb/verify/igmpproxy.yaml b/jjb/verify/igmpproxy.yaml
index 3ad0794..7e16884 100644
--- a/jjb/verify/igmpproxy.yaml
+++ b/jjb/verify/igmpproxy.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'igmpproxy-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!igmpproxy-1\.2).*)$'
           junit-allow-empty-results: true
 
       - 'igmpproxy-jobs-legacy':
@@ -36,4 +36,3 @@
     jobs:
       - 'maven-test'
       - 'maven-publish'
-
diff --git a/jjb/verify/kafka-onos.yaml b/jjb/verify/kafka-onos.yaml
index d9fffe5..9f32a00 100644
--- a/jjb/verify/kafka-onos.yaml
+++ b/jjb/verify/kafka-onos.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'kafka-onos-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!kafka-onos-1\..).*)$'
           junit-allow-empty-results: true
 
       - 'kafka-onos-jobs-legacy':
diff --git a/jjb/verify/mcast.yaml b/jjb/verify/mcast.yaml
index a79f955..5c5a07d 100644
--- a/jjb/verify/mcast.yaml
+++ b/jjb/verify/mcast.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'mcast-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!mcast-1\.4).*)$'
           junit-allow-empty-results: true
 
       - 'mcast-jobs-legacy':
@@ -36,4 +36,3 @@
     jobs:
       - 'maven-test'
       - 'maven-publish'
-
diff --git a/jjb/verify/olt.yaml b/jjb/verify/olt.yaml
index a654a96..f2fb650 100644
--- a/jjb/verify/olt.yaml
+++ b/jjb/verify/olt.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'olt-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!olt-3\.0).*)$'
 
       - 'olt-jobs-legacy':
           branch-regexp: '^(olt-3.0)$'
@@ -34,4 +34,3 @@
     jobs:
       - 'maven-test'
       - 'maven-publish'
-
diff --git a/jjb/verify/sadis.yaml b/jjb/verify/sadis.yaml
index fe700d0..536909a 100644
--- a/jjb/verify/sadis.yaml
+++ b/jjb/verify/sadis.yaml
@@ -10,7 +10,7 @@
           branch-regexp: '^(.*)$'
 
       - 'sadis-jobs':
-          branch-regexp: '^(master)$'
+          branch-regexp: '^((?!sadis-3\.1).*)$'
 
       - 'sadis-jobs-legacy':
           branch-regexp: '^(sadis-3.1)$'
@@ -34,4 +34,3 @@
     jobs:
       - 'maven-test'
       - 'maven-publish'
-
diff --git a/jjb/verify/voltctl.yaml b/jjb/verify/voltctl.yaml
index 9b586ab..74c98e2 100644
--- a/jjb/verify/voltctl.yaml
+++ b/jjb/verify/voltctl.yaml
@@ -24,6 +24,8 @@
           unit-test-targets: 'lint sca test'
           unit-test-keep-going: 'true'
           dependency-jobs: 'verify_voltctl_tag-collision'
+      - 'voltha-patch-test':
+          pipeline-script: 'voltha-bbsim-tests.groovy'
 
 - job-group:
     name: 'post-submit-voltctl-jobs'
diff --git a/jjb/verify/voltha-helm-charts.yaml b/jjb/verify/voltha-helm-charts.yaml
index c7389bb..12aad0a 100644
--- a/jjb/verify/voltha-helm-charts.yaml
+++ b/jjb/verify/voltha-helm-charts.yaml
@@ -21,4 +21,3 @@
           dependency-jobs: 'verify_voltha-helm-charts_helm-lint'
           build-timeout: 20
           pipeline-script: 'voltha-bbsim-tests.groovy'
-          extra-helm-flags: '--set defaults.image_tag=null,images.onos.tag=4.0.0,images.onos.repository=voltha/voltha-onos'
diff --git a/jjb/verify/voltha-onos.yaml b/jjb/verify/voltha-onos.yaml
index 7d426ca..c28e5b4 100644
--- a/jjb/verify/voltha-onos.yaml
+++ b/jjb/verify/voltha-onos.yaml
@@ -17,9 +17,11 @@
       - 'verify-licensed'
       - 'tag-collision-reject':
           dependency-jobs: 'verify_voltha-onos_licensed'
-      - 'make-unit-test':
-          unit-test-targets: 'build'
-          junit-allow-empty-results: true
+      # No need to build the container as part of the unit-tests as it's
+      # built in 'voltha-patch-test'
+      # - 'make-unit-test':
+      #     unit-test-targets: 'build'
+      #     junit-allow-empty-results: true
       - 'voltha-patch-test':
           pipeline-script: 'voltha-bbsim-tests.groovy'
 
diff --git a/jjb/voltha-e2e.yaml b/jjb/voltha-e2e.yaml
index 3aeb284..ad8b020 100644
--- a/jjb/voltha-e2e.yaml
+++ b/jjb/voltha-e2e.yaml
@@ -5,22 +5,30 @@
     name: voltha-e2e
 
     project-name: '{name}'
+    manualBranch: ''
 
     jobs:
       - 'voltha-periodic-test':
           name: 'periodic-voltha-sanity-test'
           build-node: 'qct-pod4-node2'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: sanity-multi-kind
           onus: 2
           pons: 2
-          time-trigger: "H H/3 * * *"
+          time-trigger: "H H/6 * * *"
+
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-sanity-test-2.3'
+          build-node: 'qct-pod4-node2'
+          code-branch: 'voltha-2.3'
+          make-target: sanity-multi-kind
+          onus: 2
+          pons: 2
+          time-trigger: "H H/6 * * *"
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-functional-test'
           build-node: 'qct-pod4-node2'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: functional-single-kind
           onus: 1
@@ -28,9 +36,17 @@
           time-trigger: "H H/12 * * *"
 
       - 'voltha-periodic-test':
+          name: 'periodic-voltha-functional-test-2.3'
+          build-node: 'qct-pod4-node2'
+          code-branch: 'voltha-2.3'
+          make-target: functional-single-kind
+          onus: 1
+          pons: 1
+          time-trigger: "H H/12 * * *"
+
+      - 'voltha-periodic-test':
           name: 'periodic-voltha-errorscenarios-test'
           build-node: 'qct-pod4-node2'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: bbsim-errorscenarios
           onus: 1
@@ -41,7 +57,6 @@
           name: 'periodic-voltha-system-test'
           pipeline-script: 'voltha-system-test-bbsim.groovy'
           build-node: 'ubuntu16.04-basebuild-4c-8g'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: sanity-multi-kind
           onus: 2
@@ -49,56 +64,98 @@
           time-trigger: "H H/12 * * *"
 
       - 'voltha-periodic-test':
+          name: 'periodic-voltha-system-test-2.3'
+          pipeline-script: 'voltha-system-test-bbsim.groovy'
+          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          code-branch: 'voltha-2.3'
+          make-target: sanity-multi-kind
+          onus: 2
+          pons: 2
+          time-trigger: "H H/12 * * *"
+
+
+      - 'voltha-periodic-test':
           name: 'periodic-voltha-sanity-test-multi-runs'
           pipeline-script: 'voltha-go-multi-tests.groovy'
           build-node: 'qct-pod4-node2'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: sanity-kind
           onus: 1
           pons: 1
           test-runs: 5
-          time-trigger: "H H/3 * * *"
+          time-trigger: "H H/6 * * *"
+
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-sanity-test-multi-runs-2.3'
+          pipeline-script: 'voltha-go-multi-tests.groovy'
+          build-node: 'qct-pod4-node2'
+          code-branch: 'voltha-2.3'
+          make-target: sanity-kind
+          onus: 1
+          pons: 1
+          test-runs: 5
+          time-trigger: "H H/6 * * *"
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-scale-test'
           build-node: 'qct-pod4-node2'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: scale-multi-kind
           onus: 2
           pons: 8
-          time-trigger: "H H/3 * * *"
+          time-trigger: "H H/6 * * *"
+
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-scale-test-2.3'
+          build-node: 'qct-pod4-node2'
+          code-branch: 'voltha-2.3'
+          make-target: scale-multi-kind
+          onus: 2
+          pons: 8
+          time-trigger: "H H/6 * * *"
 
       - 'voltha-periodic-test':
           name: 'periodic-voltha-alarm-test'
           build-node: 'qct-pod4-node2'
-          default-image-tag: 'master'
           code-branch: 'master'
           make-target: bbsim-alarms-kind
           onus: 1
           pons: 1
           time-trigger: "H H/3 * * *"
 
+      - 'voltha-periodic-test':
+          name: 'periodic-voltha-alarm-test-2.3'
+          build-node: 'qct-pod4-node2'
+          code-branch: 'voltha-2.3'
+          make-target: bbsim-alarms-kind
+          onus: 1
+          pons: 1
+          time-trigger: "H H/3 * * *"
+
+      - 'voltha-periodic-test':
+          name: 'nightly-voltha-DTflow-sanity-test'
+          build-node: 'ubuntu16.04-basebuild-4c-8g'
+          code-branch: 'master'
+          make-target: sanity-kind-dt
+          onus: 1
+          pons: 1
+          time-trigger: "@daily"
+
       # Per-patchset Pod builds on Tucson pod
       - 'verify_physical_voltha_patchset_auto':
           name: 'verify_physical_voltha_patchset_auto'
           build-node: 'tucson-pod'
           config-pod: 'tucson-pod'
-          branch: 'master'
           oltDebVersion: 'openolt_asfvolt16.deb'
           profile: 'Default'
-          withPatchset: true
 
       # Per-patchset Pod builds on Tucson pod
       - 'verify_physical_voltha_patchset_manual':
           name: 'verify_physical_voltha_patchset_manual'
           build-node: 'tucson-pod'
           config-pod: 'tucson-pod'
-          branch: 'master'
           oltDebVersion: 'openolt_asfvolt16.deb'
           profile: 'Default'
-          withPatchset: true
 
       # Manual build job for Tucson pod
       # Allow local testing without disrupting above job
@@ -106,10 +163,9 @@
           name: 'build_tucson-pod_manual'
           build-node: 'tucson-pod'
           config-pod: 'tucson-pod'
-          branch: 'master'
+          manualBranch: 'master'
           oltDebVersion: 'openolt_asfvolt16.deb'
           profile: 'Default'
-          withPatchset: false
 
 - job-template:
     id: 'voltha-periodic-test'
@@ -142,7 +198,7 @@
 
       - string:
           name: extraHelmFlags
-          default: '--set defaults.image_tag={default-image-tag},onu={onus},pon={pons}'
+          default: '--set onu={onus},pon={pons}'
           description: 'Helm flags to pass to ./voltha up'
 
       - string:
@@ -153,12 +209,12 @@
       - string:
           name: manifestUrl
           default: '{gerrit-server-url}/{voltha-test-manifest-repo}'
-          description: 'Repo manifest URL for code checkout (so we can display changes in Jenkins)'
+          description: 'Repo manifest URL for code checkout'
 
       - string:
-          name: manifestBranch
+          name: branch
           default: '{code-branch}'
-          description: 'Repo manifest branch for code checkout (so we can display changes in Jenkins)'
+          description: 'Repo manifest branch for code checkout'
 
       - string:
           name: gerritProject
@@ -199,8 +255,6 @@
 - job-template:
     id: 'voltha-patch-test'
     name: 'verify_{project}_sanity-test{name-extension}'
-    extra-helm-flags: ''
-    skip-vote: false
 
     description: |
       <!-- Managed by Jenkins Job Builder -->
@@ -229,9 +283,9 @@
           description: 'URL to the repo manifest'
 
       - string:
-          name: manifestBranch
-          default: 'master'
-          description: 'Name of the repo branch to use'
+          name: branch
+          default: '$GERRIT_BRANCH'
+          description: 'Name of the branch to use'
 
       - string:
           name: gerritProject
@@ -250,7 +304,7 @@
 
       - string:
           name: extraHelmFlags
-          default: '{extra-helm-flags}'
+          default: ''
           description: 'Helm flags to pass to ./voltha up'
 
     project-type: pipeline
@@ -280,11 +334,6 @@
               file-paths:
                 - compare-type: REG_EXP
                   pattern: '{all-files-regexp}'
-          skip-vote:
-            successful: '{skip-vote}'
-            failed: '{skip-vote}'
-            unstable: '{skip-vote}'
-            notbuilt: '{skip-vote}'
 
 # POD Per Patchset Pipeline Jobs
 
@@ -317,9 +366,9 @@
           description: 'URL to the repo manifest'
 
       - string:
-          name: manifestBranch
-          default: master
-          description: 'Name of the repo branch to use'
+          name: branch
+          default: '$GERRIT_BRANCH'
+          description: 'Name of the branch to use'
 
       - string:
           name: gerritProject
@@ -376,10 +425,6 @@
           description: 'OLT Software version to install'
 
       - string:
-          name: branch
-          default: '{branch}'
-
-      - string:
           name: profile
           default: '{profile}'
           description: 'Technology Profile pushed to the ETCD'
@@ -394,10 +439,10 @@
           default: true
           description: "Re-install OLT software"
 
-      - bool:
-          name: withPatchset
-          default: true
-          description: "Build with Gerrit patchset"
+      - string:
+          name: manualBranch
+          default: '{manualBranch}'
+          description: "If a non-empty string, build manually as a specific branch, not with a specific patchset"
 
       - string:
           name: extraRobotArgs
@@ -458,8 +503,8 @@
           description: 'URL to the repo manifest'
 
       - string:
-          name: manifestBranch
-          default: master
+          name: branch
+          default: '$GERRIT_BRANCH'
           description: 'Name of the repo branch to use'
 
       - string:
@@ -517,10 +562,6 @@
           description: 'OLT Software version to install'
 
       - string:
-          name: branch
-          default: '{branch}'
-
-      - string:
           name: profile
           default: '{profile}'
           description: 'Technology Profile pushed to the ETCD'
@@ -535,10 +576,10 @@
           default: true
           description: "Re-install OLT software"
 
-      - bool:
-          name: withPatchset
-          default: true
-          description: "Build with Gerrit patchset"
+      - string:
+          name: manualBranch
+          default: '{manualBranch}'
+          description: "If a non-empty string, build manually on a specific branch, not with a specific patchset"
 
       - string:
           name: extraRobotArgs
@@ -565,10 +606,10 @@
                 comment-contains-value: '^hardware test with delay$'
           projects:
             - project-compare-type: REG_EXP
-              project-pattern: '^(voltha-go|voltha-openolt-adapter|voltha-openonu-adapter|voltha-api-server|voltha-system-tests|ofagent-py|voltha-onos)$'
+              project-pattern: '^(voltha-go|voltha-openolt-adapter|voltha-openonu-adapter|voltha-api-server|voltha-system-tests|ofagent-py|ofagent-go|voltha-onos)$'
               branches:
-                - branch-compare-type: PLAIN
-                  branch-pattern: 'master'
+                - branch-compare-type: REG_EXP
+                  branch-pattern: '^(master|voltha-2.3)$'
 
 
 - job-template:
@@ -600,9 +641,9 @@
           description: 'URL to the repo manifest'
 
       - string:
-          name: manifestBranch
-          default: master
-          description: 'Name of the repo branch to use (change to $GERRIT_BRANCH if testing a patchset)'
+          name: branch
+          default: "$GERRIT_BRANCH"
+          description: 'Name of the repo manifest branch to use'
 
       - string:
           name: gerritProject
@@ -659,10 +700,6 @@
           description: 'OLT Software version to install'
 
       - string:
-          name: branch
-          default: '{branch}'
-
-      - string:
           name: profile
           default: '{profile}'
           description: 'Technology Profile pushed to the ETCD'
@@ -677,10 +714,10 @@
           default: false
           description: "Re-install OLT software"
 
-      - bool:
-          name: withPatchset
-          default: false
-          description: "Build with Gerrit patchset"
+      - string:
+          name: manualBranch
+          default: '{manualBranch}'
+          description: "If a non-empty string, build manually on a specific branch, not with a specific patchset"
 
       - string:
           name: extraRobotArgs