diff --git a/jjb/pipeline/comac-in-a-box-github.groovy b/jjb/pipeline/comac-in-a-box-github.groovy
new file mode 100644
index 0000000..f2791ec
--- /dev/null
+++ b/jjb/pipeline/comac-in-a-box-github.groovy
@@ -0,0 +1,157 @@
+// Copyright 2020-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.
+
+// comac-in-a-box-github build+test
+// steps taken from https://guide.opencord.org/profiles/comac/install/ciab.html
+
+docker_tag = ""
+abbreviated_commit_hash = ""
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.buildNode}"
+  }
+
+  options {
+    timeout(time: 1, unit: 'HOURS')
+  }
+
+  environment {
+
+    omec_cp = "$HOME/cord/helm-charts/omec/omec-control-plane/values.yaml"
+    omec_dp = "$HOME/cord/helm-charts/omec/omec-data-plane/values.yaml"
+  }
+
+  stages {
+    stage ("Environment Setup"){
+      steps {
+        sh label: 'Clean Logs', script: """
+          rm -rf logs/
+          """
+        sh label: 'Run COMAC-in-a-box reset-test', script: """
+          echo $HOME
+          cd $HOME/automation-tools/comac-in-a-box/
+          sudo make reset-test
+          """
+        sh label: 'Cleanup Docker Images', script: '''
+          sudo docker rmi -f $(sudo docker images --format '{{.Repository}} {{.ID}}' | grep 'none' | awk '{print $2}') || true
+          sudo docker rmi -f $(sudo docker images --format '{{.Repository}}:{{.Tag}}' | grep 'openmme') || true
+          sudo docker rmi -f $(sudo docker images --format '{{.Repository}}:{{.Tag}}' | grep 'ngic') || true
+          sudo docker rmi -f $(sudo docker images --format '{{.Repository}}:{{.Tag}}' | grep 'c3po') || true
+          '''
+        sh label: 'helm-charts Repo Fresh Clone', script: """
+          cd $HOME/cord/
+          sudo rm -rf helm-charts/
+          git clone https://gerrit.opencord.org/helm-charts
+          """
+      }
+    }
+
+    stage ("Build Local Docker Image"){
+      steps {
+        script {
+          if (params.ghprbPullId == ""){
+            docker_tag = "jenkins_debug"
+          } else {
+            pull_request_num = "PR_${params.ghprbPullId}"
+            abbreviated_commit_hash = params.ghprbActualCommit.substring(0, 7)
+            docker_tag = "${params.branch}-${pull_request_num}-${abbreviated_commit_hash}"
+          }
+        }
+        sh label: 'Clone repo', script: """
+          rm -rf ${params.project}
+          if [ "${params.project}" = "c3po" ]
+          then
+            git clone https://github.com/omec-project/${params.project} --recursive
+          else
+            git clone https://github.com/omec-project/${params.project}
+          fi
+          cd ${params.project}
+          if [ ! -z "${params.ghprbPullId}" ]
+          then
+            echo "Checking out GitHub Pull Request: ${params.ghprbPullId}"
+            git fetch origin pull/${params.ghprbPullId}/head && git checkout FETCH_HEAD
+          else
+            echo "GERRIT_REFSPEC not provided. Checking out target branch."
+            git checkout ${params.branch}
+          fi
+          sudo make DOCKER_TAG=${docker_tag} docker-build
+        """
+
+      }
+    }
+
+    stage ("Change Helm-Charts Docker Tags"){
+      steps {
+        sh label: 'Change Helm-Charts Docker Tags', script: """
+          if [ "${params.project}" = "c3po" ]
+          then
+            sed -i "s;hssdb: docker.*;hssdb: \\"c3po-hssdb:${docker_tag}\\";" ${omec_cp}
+            sed -i "s;hss: .*;hss: \\"c3po-hss:${docker_tag}\\";" ${omec_cp}
+            echo "Changed hssdb and hss tag: ${docker_tag}"
+          elif [ "${params.project}" = "openmme" ]
+          then
+            sed -i "s;mme: .*;mme: \\"openmme:${docker_tag}\\";" ${omec_cp}
+            echo "Changed mme tag: ${docker_tag}"
+          elif [ "${params.project}" = "Nucleus" ]
+          then
+            sed -i "s;mme: .*;mme: \\"openmme:${docker_tag}\\";" ${omec_cp} # nucleus shares the same docker name as openmme.
+            echo "Changed mme tag: ${docker_tag}"
+          elif [ "${params.project}" = "ngic-rtc" ]
+          then
+            sed -i "s;spgwc: .*;spgwc: \\"ngic-cp:${docker_tag}\\";" ${omec_cp}
+            sed -i "s;spgwu: .*;spgwu: \\"ngic-dp:${docker_tag}-debug\\";" ${omec_dp}
+            echo "Changed spgwc and spgwu tag: ${docker_tag}"
+          else
+            echo "The project ${params.project} is not supported. Aborting job."
+            exit 1
+          fi
+
+          echo "omec_cp:"
+          cat "${omec_cp}"
+
+          echo "omec_dp:"
+          cat "${omec_dp}"
+        """
+      }
+    }
+
+    stage ("Run COMAC-in-a-box"){
+      steps {
+        script{
+          try{
+            sh label: 'Run Makefile', script: """
+              cd $HOME/automation-tools/comac-in-a-box/
+              sudo make reset-test
+              sudo make test
+              """
+          } finally {
+            sh label: 'Archive Logs', script: '''
+              mkdir logs
+              mkdir logs/pods
+              kubectl get pods -n omec > logs/kubectl_get_pods_omec.log
+              for pod in $(kubectl get pods -n omec | awk '{print $1}' | tail -n +2)
+              do
+                kubectl logs -n omec $pod --all-containers > logs/pods/$pod.log || true
+              done
+            '''
+            archiveArtifacts artifacts: "logs/**/*.log", allowEmptyArchive: true
+          }
+        }
+      }
+    }
+  }
+}
