Add COMAC-in-a-box PR Jenkins test for OMEC repos

Change-Id: I133df8e18a314cea53b9b040423a005c1d847bb3
diff --git a/jjb/comac-in-a-box-github.yaml b/jjb/comac-in-a-box-github.yaml
new file mode 100644
index 0000000..60eeec0
--- /dev/null
+++ b/jjb/comac-in-a-box-github.yaml
@@ -0,0 +1,63 @@
+# COMAC in a box test for the omec projects on github
+
+- job-template:
+    id: 'omec-comac-in-a-box'
+    name: 'omec_{project}_comac-in-a-box'
+    project-type: pipeline
+
+    pipeline-script: 'comac-in-a-box-github.groovy'
+
+    description: |
+      Automated build on AMI executor using {pipeline-script}. <br /><br />
+      Created from job-template {id} from ci-management/jjb/comac-in-a-box-github.yaml <br />
+      Created by Jeremy Ronquillo, jeremyr@opennetworking.org <br />
+      Copyright (c) 2020 Open Networking Foundation (ONF)
+
+    properties:
+      - cord-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+      - github:
+          url: 'https://github.com/{github-organization}/{project}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    parameters:
+      - string:
+          name: buildNode
+          default: '{build-node}'
+          description: 'Name of the Jenkins executor node to run the job on'
+
+      - string:
+          name: project
+          default: '{project}'
+          description: 'Name of the project'
+
+      - string:
+          name: branch
+          default: '$ghprbTargetBranch'
+          description: 'Replace value to test manually.'
+
+      - string:
+          name: ghprbPullId
+          default: '$ghprbPullId'
+          description: 'GitHub Pull-Request builder value. Delete default value to test manually.'
+
+      - string:
+          name: ghprbActualCommit
+          default: '$ghprbActualCommit'
+          description: 'GitHub Pull-Request builder value. Delete default value to test manually.'
+
+    triggers:
+      - cord-infra-github-pr-trigger:
+          github_pr_org_list: '{obj:github_pr_org_list}'
+          github_pr_auth_id: '{github_pr_auth_id}'
+          status_context: 'CORD Jenkins - COMAC-in-a-box Verification'
+
+    concurrent: false
+
+    project-type: pipeline
+    dsl: !include-raw-escape: pipeline/{pipeline-script}
diff --git a/jjb/omec-ci.yaml b/jjb/omec-ci.yaml
index 4b2cdca..4445543 100644
--- a/jjb/omec-ci.yaml
+++ b/jjb/omec-ci.yaml
@@ -55,6 +55,8 @@
           build-timeout: 30
           docker-repo: 'omecproject'
           build-node: 'ubuntu16.04-basebuild-4c-8g'
+      - 'omec-comac-in-a-box':
+          build-node: 'comac_in_a_box'
 
 # for c3po
 - project:
@@ -91,6 +93,8 @@
           build-timeout: 30
           docker-repo: 'omecproject'
           build-node: 'ubuntu16.04-basebuild-8c-15g'
+      - 'omec-comac-in-a-box':
+          build-node: 'comac_in_a_box'
 
 # for openmme
 - project:
@@ -123,6 +127,8 @@
           build-timeout: 30
           docker-repo: 'omecproject'
           build-node: 'ubuntu16.04-basebuild-1c-2g'
+      - 'omec-comac-in-a-box':
+          build-node: 'comac_in_a_box'
 
 # for nucleus
 - project:
@@ -151,6 +157,8 @@
       - 'omec-reuse':
           pipeline-file: 'omec-reuse-scan.groovy'
           build-node: 'omec-qa'
+      - 'omec-comac-in-a-box':
+          build-node: 'comac_in_a_box'
 
 # for freediameter
 - project:
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
+          }
+        }
+      }
+    }
+  }
+}