diff --git a/TestON/JenkinsFile/HAJenkinsFile b/TestON/JenkinsFile/HAJenkinsFile
new file mode 100644
index 0000000..1a30377
--- /dev/null
+++ b/TestON/JenkinsFile/HAJenkinsFile
@@ -0,0 +1,182 @@
+#!groovy
+// This is a Jenkinsfile for a scripted pipeline for the HA tests
+
+def prop = null
+node("TestStation-VMs"){
+    prop = readProperties(file:'/var/jenkins/TestONOS.property')
+}
+// TODO: Exception handling around steps
+HA = [
+"HAsanity" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Sanity", wiki_file:"HAsanityWiki.txt"],
+"HAswapNodes" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Swap Nodes", wiki_file:"HAswapNodesWiki.txt"],
+"HAscaling" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Scaling", wiki_file:"HAscalingWiki.txt"],
+"HAclusterRestart" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Cluster Restart", wiki_file:"HAclusterRestartWiki.txt"],
+"HAstopNodes" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Stop Nodes", wiki_file:"HAstopNodes.txt"],
+"HAfullNetPartition" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Full Network Partition", wiki_file:"HAfullNetPartitionWiki.txt"],
+"HAsingleInstanceRestart" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Single Instance Restart", wiki_file:"HAsingleInstanceRestartWiki.txt"],
+"HAkillNodes" : [wiki_link:prop["WikiPrefix"]+"-"+"HA Kill Nodes", wiki_file:"HAkillNodesWiki.txt"] ]
+
+table_name = "executed_test_tests"
+result_name = "executed_test_results"
+graph_generator_file = "~/OnosSystemTest/TestON/JenkinsFile/testCaseGraphGenerator.R"
+graph_saved_directory = "/var/jenkins/workspace/Pipeline_postjob_VM/"
+
+echo("Testcases:")
+def testsToRun = null
+testsToRun = prop["Tests"].tokenize("\n;, ")
+for ( String test : testsToRun ) {
+    println test
+}
+
+def tests = [:]
+for( String test : HA.keySet() ){
+    toBeRun = testsToRun.contains( test )
+    def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
+    tests[stepName] = HATest(test, toBeRun, prop)
+}
+
+// run the tests
+for ( test in tests.keySet() ){
+    tests[test].call()
+}
+
+
+// The testName should be the key from the FUNC
+def HATest( testName, toBeRun, prop ) {
+    return {
+        catchError{
+            stage(testName) {
+                if ( toBeRun ){
+                    workSpace = "/var/jenkins/workspace/"+testName
+                    def fileContents = ""
+                    node("TestStation-VMs"){
+                        withEnv(['ONOSBranch='+prop["ONOSBranch"],
+                                 'ONOSJVMHeap='+prop["ONOSJVMHeap"],
+                                 'TestONBranch='+prop["TestONBranch"],
+                                 'ONOSTag='+prop["ONOSTag"],
+                                 'WikiPrefix='+prop["WikiPrefix"],
+                                 'WORKSPACE='+workSpace]){
+                            sh '''#!/bin/bash -l
+                            set -i # interactive
+                            set +e
+                            shopt -s expand_aliases # expand alias in non-interactive mode
+                            export PYTHONUNBUFFERED=1
+
+                            ifconfig
+
+                            echo "ONOS Branch is: ${ONOSBranch}"
+                            echo "TestON Branch is: ${TestONBranch}"
+                            echo "Test date: "
+                            date
+
+                            cd ~
+                            export PATH=$PATH:onos/tools/test/bin
+
+                            timeout 240 stc shutdown | head -100
+                            timeout 240 stc teardown | head -100
+                            timeout 240 stc shutdown | head -100
+
+                            cd ~/OnosSystemTest/TestON/bin
+                            git log |head
+                            ./cleanup.sh -f
+                            ''' + "./cli.py run " + testName+ '''
+                            ./cleanup.sh -f
+                            cd'''
+
+                            // For the Wiki page
+                            sh '''#!/bin/bash -i
+                            set +e
+                            echo "ONOS Branch is: ${ONOSBranch}"
+                            echo "TestON Branch is: ${TestONBranch}"
+
+                            echo "Job name is: "''' + testName + '''
+                            echo "Workspace is: ${WORKSPACE}/"
+
+                            echo "Wiki page to post is: ${WikiPrefix}-"
+
+                            # remove any leftover files from previous tests
+                            sudo rm ${WORKSPACE}/*Wiki.txt
+                            sudo rm ${WORKSPACE}/*Summary.txt
+                            sudo rm ${WORKSPACE}/*Result.txt
+                            sudo rm ${WORKSPACE}/*.csv
+
+                            #copy files to workspace
+                            cd `ls -t ~/OnosSystemTest/TestON/logs/*/ | head -1 | sed 's/://'`
+                            sudo cp *.txt ${WORKSPACE}/
+                            sudo cp *.csv ${WORKSPACE}/
+                            cd ${WORKSPACE}/
+                            for i in *.csv
+                                do mv "$i" "$WikiPrefix"-"$i"
+                            done
+                            ls -al
+                            cd '''
+
+                            if( prop["manualRun"] == "false" ){
+                                // Post Results
+                                withCredentials([
+                                    string(credentialsId: 'db_pass', variable: 'pass'),
+                                    string(credentialsId: 'db_user', variable: 'user'),
+                                    string(credentialsId: 'db_host', variable: 'host'),
+                                    string(credentialsId: 'db_port', variable: 'port')]) {
+                                        def database_command = pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c \"INSERT INTO " + table_name + " VALUES('\$DATE','" + result_name + "','" + testName + "',\$BUILD_NUMBER, '\$ONOSBranch', \$line);\""
+
+                                        sh '''#!/bin/bash
+                                        set +e
+                                        export DATE=\$(date +%F_%T)
+                                        cd ~
+                                        pwd
+                                        sed 1d ''' + workSpace + "/" + prop["WikiPrefix"] + "-" + testName + '''.csv | while read line
+                                        do
+                                        echo \$line
+                                        echo ''' + database_command + '''
+
+                                        done
+                                        Rscript ''' + graph_generator_file + " " + host + " " + port + " " + user + " " + pass + " " + testName + " " + prop["ONOSBranch"] + " 20 " + graph_saved_directory
+
+                                }
+                            }
+                            // Fetch Logs
+                            sh '''#!/bin/bash
+                            set +e
+                            cd ~/OnosSystemTest/TestON/logs
+                            echo "Job Name is: " + ''' + testName + '''
+                            TestONlogDir=$(ls -t | grep ${TEST_NAME}_  |head -1)
+                            echo "########################################################################################"
+                            echo "#####  copying ONOS logs from all nodes to TestON/logs directory: ${TestONlogDir}"
+                            echo "########################################################################################"
+                            cd $TestONlogDir
+                            if [ $? -eq 1 ]
+                            then
+                                echo "Job name does not match any test suite name to move log!"
+                            else
+                                pwd
+                                for i in $OC{1..7}; do onos-fetch-logs $i || echo log does not exist; done
+                            fi
+                            cd'''
+                            fileContents = readFile workSpace+"/"+HA[testName]['wiki_file']
+                        }
+                    }
+
+                    if( prop["manualRun"] == "false" ){
+                        def post = build job: "Pipeline_postjob_VM", propagate: false,
+                            parameters: [
+                                string(name: 'Wiki_Contents', value: fileContents),
+                                string(name: 'Wiki_Link', value: HA[testName]['wiki_link'])
+                            ]
+                    }
+                    node("TestStation-VMs"){
+                        sh '''#!/bin/bash
+
+                        if [ -e ''' + workSpace + "/" + testName + "Result.txt ] && grep -q \"1\" " + workSpace + "/" + testName + "Result.txt" + '''
+                        then
+                            echo ''' + testName + " : All passed." + '''
+                        else
+                            echo ''' + testName + " : not all passed." + '''
+                            DoingThisToSetTheResultFalse
+                        fi'''
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
