updating mcord-build-test job to redeploy prior to build

Change-Id: I4dc9ef16462283e0e343e3dbb986da07cb266d84
diff --git a/jjb/pipeline/mcord-build-test.groovy b/jjb/pipeline/mcord-build-test.groovy
new file mode 100644
index 0000000..635aa6a
--- /dev/null
+++ b/jjb/pipeline/mcord-build-test.groovy
@@ -0,0 +1,134 @@
+/*re-deploy node then use mcord-in-a-box.sh to deploy MCORD and then E2E TEST*/
+
+pipeline {
+
+  /* no label, executor is determined by JJB */
+  agent {
+    label "${params.executorNode}"
+  }
+
+  stages {
+
+    stage ("Parse deployment configuration file") {
+      steps {
+            sh returnStdout: true, script: 'rm -rf ${configRepoBaseDir}'
+            sh returnStdout: true, script: 'git clone -b ${branch} ${configRepoUrl}'
+            script { deployment_config = readYaml file: "${configRepoBaseDir}${configRepoFile}" }
+          }
+    }
+
+    stage ('Re-Deploy Node') {
+      steps {
+          sh "maas login maas http://${deployment_config.maas.ip}/MAAS/api/2.0 ${deployment_config.maas.api_key}"
+          sh "maas maas machine release ${deployment_config.maas.head_system_id}"
+
+          timeout(time:15) {
+            waitUntil {
+              script {
+                  try {
+                    sh "maas maas machine read ${deployment_config.maas.head_system_id} | grep Ready"
+                    return true
+                    } catch (exception) {
+                        return false
+                    }
+                 }
+              }
+            }
+
+            sh "maas maas machines allocate"
+            sh "maas maas machine deploy ${deployment_config.maas.head_system_id}"
+
+         timeout(time:15) {
+            waitUntil {
+              script {
+                  try {
+                    sh "maas maas machine read ${deployment_config.maas.head_system_id} | grep Deployed"
+                    return true
+                    } catch (exception) {
+                        return false
+                    }
+                 }
+              }
+            }
+          }
+      }
+    stage ('Get Node IP') {
+      steps {
+          sh "maas login maas http://${deployment_config.maas.ip}/MAAS/api/2.0 ${deployment_config.maas.api_key}"
+          timeout(time:15) {
+            waitUntil {
+              script {
+                  try {
+                    node_ip = sh (script: "maas maas machine read ${deployment_config.maas.head_system_id} | grep ip_address | head -n1 | grep -oE '\\b([0-9]{1,3}\\.){3}[0-9]{1,3}\\b'", returnStdout: true).toString().trim()
+                    return true
+                    } catch (exception) {
+                        return false
+                    }
+                 }
+            }
+          sh "echo ${node_ip}"
+          }
+      }
+      }
+
+    stage ('Checkout Automation-Tools Repo') {
+      steps {
+        script {
+          sh (script: "ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} 'mkdir ~/cord; cd ~/cord/; git clone https://gerrit.opencord.org/automation-tools'", returnStdout: true)
+          }
+      }
+    }
+
+    stage ('Install MCORD') {
+      options {
+        timeout(time: 3, unit: 'HOURS')
+        }
+      steps {
+        script {
+          sh "sleep 120"
+          sh "ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} 'cd ~/cord/; ./automation-tools/mcord/mcord-in-a-box.sh 1>&2'"
+          }
+      }
+    }
+
+    stage ('Configure K8 Compute Node DNS') {
+      steps {
+        sh """
+            COMPUTEHOSTNAME=\$(ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} 'cat /etc/hostname')
+            IPADDRESS=\$(ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} "ip route get 8.8.8.8 | head -1 | cut -d' ' -f8")
+            cat <<EOF > /tmp/\$COMPUTEHOSTNAME-dns.yaml
+            kind: Service
+            apiVersion: v1
+            metadata:
+              name: \$COMPUTEHOSTNAME
+              namespace: default
+            spec:
+              type: ExternalName
+              externalName: \$IPADDRESS
+EOF
+            cat /tmp/\$COMPUTEHOSTNAME-dns.yaml | ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} "cat > /tmp/\$COMPUTEHOSTNAME-dns.yaml"
+            ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} "kubectl create -f /tmp/\$COMPUTEHOSTNAME-dns.yaml 1>&2"
+            """
+            }
+        }
+
+    stage ('Test MCORD') {
+      steps {
+        script {
+          sh "ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} 'cd ~/cord/; git clone https://gerrit.opencord.org/mcord; cd mcord/test; ansible-playbook -i localhost, -c local mcord-cavium-test-playbook.yml 1>&2'"
+          }
+       }
+    }
+
+   }
+
+  post {
+        always {
+          script {
+          sh (script: "ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} 'helm ls; kubectl get pods --all-namespaces 1>&2'", returnStdout: true)
+          sh (script: "ssh -oStrictHostKeyChecking=no -i ~/.ssh/cord ubuntu@${node_ip} 'export OS_CLOUD=openstack_helm; openstack image list; openstack network list; openstack server list --all-projects 1>&2'", returnStdout: true)
+          }
+          step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "${notificationEmail}", sendToIndividuals: false])
+     }
+    }
+}