<p>George Joseph <strong>merged</strong> this change.</p><p><a href="https://gerrit.asterisk.org/9424">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  George Joseph: Looks good to me, approved; Approved for Submit

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">CI: Add Asterisk Gates<br><br>Change-Id: I7e2467f9120812551238d8005deb97f965279205<br>---<br>M tests/CI/buildAsterisk.sh<br>M tests/CI/gateTestGroups.json<br>M tests/CI/gates.jenkinsfile<br>M tests/CI/installAsterisk.sh<br>M tests/CI/runTestsuite.sh<br>M tests/CI/runUnittests.sh<br>D tests/CI/setupEnvironment.sh<br>A tests/CI/setupJenkinsEnvironment.sh<br>M tests/CI/unittests.jenkinsfile<br>9 files changed, 184 insertions(+), 122 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/CI/buildAsterisk.sh b/tests/CI/buildAsterisk.sh</span><br><span>index 1e424fa..85f347c 100755</span><br><span>--- a/tests/CI/buildAsterisk.sh</span><br><span>+++ b/tests/CI/buildAsterisk.sh</span><br><span>@@ -1,4 +1,4 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/bin/bash</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env bash</span><br><span> </span><br><span> CIDIR=$(dirname $(readlink -fn $0))</span><br><span> source $CIDIR/ci.functions</span><br><span>@@ -25,20 +25,46 @@</span><br><span>      done</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-sudo mkdir -p /srv/cache/externals /srv/cache/sounds || :</span><br><span style="color: hsl(0, 100%, 40%);">-sudo chown -R jenkins:users /srv/cache</span><br><span style="color: hsl(0, 100%, 40%);">-[ ! -d tests/CI/output ] && mkdir tests/CI/output</span><br><span style="color: hsl(0, 100%, 40%);">-sudo chown -R jenkins:users tests/CI/output</span><br><span style="color: hsl(120, 100%, 40%);">+[ x"$OUTPUT_DIR" != x ] && mkdir -p "$OUTPUT_DIR" 2&> /dev/null</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ x"$CACHE_DIR" != x ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+    mkdir -p "$CACHE_DIR/sounds $CACHE_DIR/externals" 2&> /dev/null</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ ${CCACHE_DISABLE:-0} -ne 1 ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+      if [ x"$CACHE_DIR" != x ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+            mkdir -p $CACHE_DIR/ccache</span><br><span style="color: hsl(120, 100%, 40%);">+            export CCACHE_UMASK=002</span><br><span style="color: hsl(120, 100%, 40%);">+               export CCACHE_DIR=$CACHE_DIR/ccache</span><br><span style="color: hsl(120, 100%, 40%);">+   fi</span><br><span style="color: hsl(120, 100%, 40%);">+    case ":${PATH:-}:" in</span><br><span style="color: hsl(120, 100%, 40%);">+               *:/usr/lib*/ccache:*)</span><br><span style="color: hsl(120, 100%, 40%);">+                 echo "Enabling ccache at $CCACHE_DIR"</span><br><span style="color: hsl(120, 100%, 40%);">+                ;;</span><br><span style="color: hsl(120, 100%, 40%);">+           *)</span><br><span style="color: hsl(120, 100%, 40%);">+                    if [ -d /usr/lib64/ccache ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+                            echo "Enabling ccache at /usr/lib64/ccache with $CCACHE_DIR"</span><br><span style="color: hsl(120, 100%, 40%);">+                                export PATH="/usr/lib64/ccache${PATH:+:$PATH}"</span><br><span style="color: hsl(120, 100%, 40%);">+                      elif [ -d /usr/lib/ccache ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+                            echo "Enabling ccache at /usr/lib/ccache with $CCACHE_DIR"</span><br><span style="color: hsl(120, 100%, 40%);">+                          export PATH="/usr/lib/ccache${PATH:+:$PATH}"</span><br><span style="color: hsl(120, 100%, 40%);">+                        fi</span><br><span style="color: hsl(120, 100%, 40%);">+            ;;</span><br><span style="color: hsl(120, 100%, 40%);">+    esac</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+runner ccache -s</span><br><span style="color: hsl(120, 100%, 40%);">+runner ulimit -a</span><br><span> </span><br><span> MAKE=`which make`</span><br><span style="color: hsl(0, 100%, 40%);">-printenv | sort</span><br><span style="color: hsl(120, 100%, 40%);">+[ -d /usr/lib64 ] && _libdir=/usr/lib64</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-common_config_args="--sysconfdir=/etc --with-pjproject-bundled"</span><br><span style="color: hsl(0, 100%, 40%);">-common_config_args+=" --with-sounds-cache=/srv/cache/sounds --with-externals-cache=/srv/cache/externals"</span><br><span style="color: hsl(120, 100%, 40%);">+common_config_args="--prefix=/usr ${_libdir:+--libdir=${_libdir}} --sysconfdir=/etc --with-pjproject-bundled"</span><br><span style="color: hsl(120, 100%, 40%);">+common_config_args+=" ${CACHE_DIR:+--with-sounds-cache=${CACHE_DIR}/sounds --with-externals-cache=${CACHE_DIR}/externals}"</span><br><span> common_config_args+=" --enable-dev-mode"</span><br><span> export WGET_EXTRA_ARGS="--quiet"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-runner ./configure ${common_config_args} >tests/CI/output/configure.txt</span><br><span style="color: hsl(120, 100%, 40%);">+runner ./configure ${common_config_args} > ${OUTPUT_DIR:+${OUTPUT_DIR}/}configure.txt</span><br><span> </span><br><span> runner ${MAKE} menuselect.makeopts</span><br><span> </span><br><span>diff --git a/tests/CI/gateTestGroups.json b/tests/CI/gateTestGroups.json</span><br><span>index 8c0774a..f8ce047 100644</span><br><span>--- a/tests/CI/gateTestGroups.json</span><br><span>+++ b/tests/CI/gateTestGroups.json</span><br><span>@@ -1,46 +1,46 @@</span><br><span> [</span><br><span>        {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "ari1",</span><br><span style="color: hsl(120, 100%, 40%);">+           "name": "ari_a-d  ",</span><br><span>             "dir": "tests/CI/output/ari1",</span><br><span>           "testcmd": "--test-regex=tests/rest_api/[Ca-d]"</span><br><span>  },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "ari2",</span><br><span style="color: hsl(120, 100%, 40%);">+           "name": "ari_e-z  ",</span><br><span>             "dir": "tests/CI/output/ari2",</span><br><span>           "testcmd": "--test-regex=tests/rest_api/[e-z]"</span><br><span>   },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "pjsip1",</span><br><span style="color: hsl(120, 100%, 40%);">+         "name": "pjsip_a-f",</span><br><span>             "dir": "tests/CI/output/pjsip1",</span><br><span>                 "testcmd": "--test-regex=tests/channels/pjsip/[a-f]"</span><br><span>     },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "pjsip2",</span><br><span style="color: hsl(120, 100%, 40%);">+         "name": "pjsip_g-r",</span><br><span>             "dir": "tests/CI/output/pjsip2",</span><br><span>                 "testcmd": "--test-regex=tests/channels/pjsip/[g-r]"</span><br><span>     },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "pjsip3",</span><br><span style="color: hsl(120, 100%, 40%);">+         "name": "pjsip_s-z",</span><br><span>             "dir": "tests/CI/output/pjsip3",</span><br><span>                 "testcmd": "--test-regex=tests/channels/pjsip/[s-z]"</span><br><span>     },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "sip1",</span><br><span style="color: hsl(120, 100%, 40%);">+           "name": "sip_a-r  ",</span><br><span>             "dir": "tests/CI/output/sip1",</span><br><span>           "testcmd": "--test-regex=tests/channels/SIP/[Sa-r]"</span><br><span>      },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "sip2",</span><br><span style="color: hsl(120, 100%, 40%);">+           "name": "sip_s-z  ",</span><br><span>             "dir": "tests/CI/output/sip2",</span><br><span>           "testcmd": "--test-regex=tests/channels/SIP/[s-z]"</span><br><span>       },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "iax2_local",</span><br><span style="color: hsl(120, 100%, 40%);">+             "name": "iax2_locl",</span><br><span>             "dir": "tests/CI/output/iax2_local",</span><br><span>             "testcmd": " -t tests/channels/iax2 -t tests/channels/local"</span><br><span>     },</span><br><span>   {</span><br><span style="color: hsl(0, 100%, 40%);">-               "name": "extmwi",</span><br><span style="color: hsl(120, 100%, 40%);">+         "name": "pjsip_mwi",</span><br><span>             "dir": "tests/CI/output/extmwi",</span><br><span>                 "testcmd": "--test-regex=tests/channels/pjsip/.*mwi"</span><br><span>     }</span><br><span>diff --git a/tests/CI/gates.jenkinsfile b/tests/CI/gates.jenkinsfile</span><br><span>index 30b534a..183fac1 100644</span><br><span>--- a/tests/CI/gates.jenkinsfile</span><br><span>+++ b/tests/CI/gates.jenkinsfile</span><br><span>@@ -42,14 +42,12 @@</span><br><span>                                 onUnstable: false</span><br><span>                    ]</span><br><span>    }</span><br><span style="color: hsl(0, 100%, 40%);">-       options {</span><br><span style="color: hsl(0, 100%, 40%);">-         skipDefaultCheckout true</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span>    </span><br><span>     agent {</span><br><span>              /* All of the stages need to be performed on a docker host */</span><br><span>                label "swdev-docker"</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  stages {</span><br><span>             stage ("->") {</span><br><span>                  /*</span><br><span>@@ -65,8 +63,16 @@</span><br><span>                              script {</span><br><span>                                     stage ("Checkout") {</span><br><span>                                               sh "sudo chown -R jenkins:users ."  </span><br><span style="color: hsl(120, 100%, 40%);">+                                                env.GERRIT_PROJECT_URL = env.GERRIT_CHANGE_URL.replaceAll(/\/[0-9]+$/, "/${env.GERRIT_PROJECT}")</span><br><span style="color: hsl(120, 100%, 40%);">+                                            sh "printenv | sort"</span><br><span>                                       </span><br><span>                                             /*</span><br><span style="color: hsl(120, 100%, 40%);">+                                             * Jenkins has already automatically checked out the base branch</span><br><span style="color: hsl(120, 100%, 40%);">+                                               * for this change but we now need to check out the change itself</span><br><span style="color: hsl(120, 100%, 40%);">+                                              * and rebase it on the current base branch.  If the rebase fails,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             * that's an indication to the user that they'll need to sort their</span><br><span style="color: hsl(120, 100%, 40%);">+                                            * change out.</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 *</span><br><span>                                            * The Gerrit Trigger provides all the URLs and refspecs to</span><br><span>                                           * check out the change.</span><br><span>                                              */</span><br><span>@@ -81,7 +87,6 @@</span><br><span>                                                              [$class: 'CloneOption',</span><br><span>                                                                      noTags: true,</span><br><span>                                                                        depth: 10,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      honorRefspec: true,</span><br><span>                                                                  shallow: true</span><br><span>                                                                ],</span><br><span>                                                           [$class: 'BuildChooserSetting',</span><br><span>@@ -89,24 +94,32 @@</span><br><span>                                                                ]</span><br><span>                                                    ],</span><br><span>                                                   userRemoteConfigs: [</span><br><span style="color: hsl(0, 100%, 40%);">-                                                            [name: env.GERRIT_NAME, refspec: env.GERRIT_REFSPEC, url: env.GIT_URL ]</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               [name: env.GERRIT_NAME, refspec: env.GERRIT_REFSPEC, url: env.GERRIT_PROJECT_URL ]</span><br><span>                                                   ]</span><br><span>                                            ]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                           sh "sudo tests/CI/setupJenkinsEnvironment.sh"</span><br><span>                                      }</span><br><span> </span><br><span>                                        def images = env.DOCKER_IMAGES.split(' ')</span><br><span>                                    def r = currentBuild.startTimeInMillis % images.length</span><br><span>                                       def ri = images[(int)r]</span><br><span>                                      def randomImage = env.DOCKER_REGISTRY + "/" + ri</span><br><span style="color: hsl(0, 100%, 40%);">-                                      def dockerOptions = "-v /srv/jenkins:/srv/jenkins:rw -v /srv/cache:/srv/cache:rw --entrypoint=''"</span><br><span style="color: hsl(120, 100%, 40%);">+                                   def dockerOptions = "--ulimit core=0 --ulimit nofile=10240 " +</span><br><span style="color: hsl(120, 100%, 40%);">+                                              " -v /srv/jenkins:/srv/jenkins:rw -v /srv/cache:/srv/cache:rw " +</span><br><span style="color: hsl(120, 100%, 40%);">+                                           " --entrypoint=''"</span><br><span style="color: hsl(120, 100%, 40%);">+                                  def outputdir = "tests/CI/output/Testsuite"</span><br><span style="color: hsl(120, 100%, 40%);">+                                 def img = docker.image(randomImage)</span><br><span style="color: hsl(120, 100%, 40%);">+                                   img.pull()</span><br><span> </span><br><span>                                       stage ("Build") {</span><br><span style="color: hsl(0, 100%, 40%);">-                                             docker.image(randomImage).inside(dockerOptions + " --name ${BUILD_TAG}-build") {</span><br><span style="color: hsl(120, 100%, 40%);">+                                            img.inside(dockerOptions + " --name ${BUILD_TAG}-build") {</span><br><span>                                                         echo 'Building..'</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       sh './tests/CI/buildAsterisk.sh'</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      env.CCACHE_DIR = "/srv/cache/ccache"</span><br><span style="color: hsl(120, 100%, 40%);">+                                                        sh "./tests/CI/buildAsterisk.sh --output-dir=${outputdir} --cache-dir=/srv/cache"</span><br><span> </span><br><span>                                                      archiveArtifacts allowEmptyArchive: true, defaultExcludes: false, fingerprint: false,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                           artifacts: "tests/CI/output/*"</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              artifacts: "${outputdir}/*"</span><br><span>                                                }</span><br><span>                                    }</span><br><span> </span><br><span>@@ -114,22 +127,23 @@</span><br><span>                                        def parallelTasks = [ : ]</span><br><span> </span><br><span>                                        for (def testGroup in testGroups) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                             parallelTasks[testGroup.name] = {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       /*</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       * Because each task is a Groovy closure, we need to</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     * keep local references to some variables.</span><br><span style="color: hsl(0, 100%, 40%);">-                                                      */</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     def groupName = testGroup.name</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  def groupDir = testGroup.dir</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    def groupTestcmd = testGroup.testcmd</span><br><span style="color: hsl(0, 100%, 40%);">-                                                    def testsuiteUrl = env.GIT_URL.replaceAll(/${GERRIT_PROJECT}$/, "testsuite")</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  </span><br><span style="color: hsl(120, 100%, 40%);">+                                              /*</span><br><span style="color: hsl(120, 100%, 40%);">+                                             * Because each task is a Groovy closure, we need to</span><br><span style="color: hsl(120, 100%, 40%);">+                                           * keep local references to some variables.</span><br><span style="color: hsl(120, 100%, 40%);">+                                            */</span><br><span style="color: hsl(120, 100%, 40%);">+                                           def groupName = testGroup.name</span><br><span style="color: hsl(120, 100%, 40%);">+                                                def groupDir = testGroup.dir</span><br><span style="color: hsl(120, 100%, 40%);">+                                          def groupTestcmd = testGroup.testcmd</span><br><span style="color: hsl(120, 100%, 40%);">+                                          def testsuiteUrl = env.GERRIT_PROJECT_URL.replaceAll(/${GERRIT_PROJECT}$/, "testsuite")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                           parallelTasks[groupName] = {</span><br><span>                                                         stage (groupName) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                                                         docker.image(randomImage).inside("${dockerOptions} --name ${BUILD_TAG}-${groupName}") {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                             img.inside("${dockerOptions} --name ${BUILD_TAG}-${groupName}") {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                   sh "printenv | sort"</span><br><span> </span><br><span>                                                                   lock("${JOB_NAME}.${NODE_NAME}.installer") {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                          sh 'sudo ./tests/CI/installAsterisk.sh'</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                               sh 'sudo ./tests/CI/installAsterisk.sh  --user-group=jenkins:users'</span><br><span>                                                                  }</span><br><span> </span><br><span>                                                                        sh "sudo rm -rf ${groupDir} || : "</span><br><span>@@ -148,7 +162,7 @@</span><br><span>                                                                                   userRemoteConfigs: [[name: env.GERRIT_NAME, url: testsuiteUrl]]</span><br><span>                                                                              ]</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                                                                   sh "tests/CI/runTestsuite.sh --testsuite-dir='${groupDir}' --test-command='${groupTestcmd}'"</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                        sh "sudo tests/CI/runTestsuite.sh --testsuite-dir='${groupDir}' --test-command='${groupTestcmd}'"</span><br><span> </span><br><span>                                                                      archiveArtifacts allowEmptyArchive: true, defaultExcludes: false, fingerprint: true,</span><br><span>                                                                                 artifacts: "${groupDir}/asterisk-test-suite-report.xml, ${groupDir}/logs/**, ${groupDir}/core*.txt"</span><br><span>@@ -156,7 +170,10 @@</span><br><span>                                                                         junit testResults: "${groupDir}/asterisk-test-suite-report.xml",</span><br><span>                                                                           healthScaleFactor: 1.0,</span><br><span>                                                                              keepLongStdio: true</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 echo "Group result d: ${currentBuild.currentResult}"</span><br><span>                                                               }</span><br><span style="color: hsl(120, 100%, 40%);">+                                                             echo "Group result s: ${currentBuild.currentResult}"</span><br><span>                                                       }</span><br><span>                                            }</span><br><span>                                    }</span><br><span>@@ -166,32 +183,48 @@</span><br><span>            }</span><br><span>    }</span><br><span>    post {</span><br><span style="color: hsl(0, 100%, 40%);">-          always {</span><br><span style="color: hsl(0, 100%, 40%);">-                        sh "sudo make distclean || : "</span><br><span style="color: hsl(0, 100%, 40%);">-                        sh "sudo rm -rf tests/CI/output || : "</span><br><span style="color: hsl(120, 100%, 40%);">+              cleanup {</span><br><span style="color: hsl(120, 100%, 40%);">+                     sh "sudo make distclean 2&>/dev/null || : "</span><br><span style="color: hsl(120, 100%, 40%);">+                  sh "sudo rm -rf tests/CI/output  2&>/dev/null || : "</span><br><span>                }</span><br><span>            /*</span><br><span>            * The Gerrit Trigger will automatically post the "Verified" results back</span><br><span>           * to Gerrit but the verification publisher publishes extra stuff in the</span><br><span>              * "Code Review" section of the review.</span><br><span>             */</span><br><span style="color: hsl(120, 100%, 40%);">+           always {</span><br><span style="color: hsl(120, 100%, 40%);">+                      script {</span><br><span style="color: hsl(120, 100%, 40%);">+                              def cat</span><br><span style="color: hsl(120, 100%, 40%);">+                               def comment</span><br><span style="color: hsl(120, 100%, 40%);">+                           switch (currentBuild.currentResult) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 case ~/^SUCCESS$/:</span><br><span style="color: hsl(120, 100%, 40%);">+                                            cat = "Passed"</span><br><span style="color: hsl(120, 100%, 40%);">+                                              comment = ""</span><br><span style="color: hsl(120, 100%, 40%);">+                                                break</span><br><span style="color: hsl(120, 100%, 40%);">+                                 case ~/^FAILURE$/:</span><br><span style="color: hsl(120, 100%, 40%);">+                                            cat = "Failed"</span><br><span style="color: hsl(120, 100%, 40%);">+                                              comment = "Fatal Error"</span><br><span style="color: hsl(120, 100%, 40%);">+                                             break</span><br><span style="color: hsl(120, 100%, 40%);">+                                 case ~/^UNSTABLE$/:</span><br><span style="color: hsl(120, 100%, 40%);">+                                           cat = "Failed"</span><br><span style="color: hsl(120, 100%, 40%);">+                                              comment = "Tests Failed"</span><br><span style="color: hsl(120, 100%, 40%);">+                                            break</span><br><span style="color: hsl(120, 100%, 40%);">+                         }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                           gerritverificationpublisher verifyStatusCategory: cat,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        verifyStatusURL: '', verifyStatusComment: comment,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    verifyStatusName: '', verifyStatusReporter: 'Jenkins2',</span><br><span style="color: hsl(120, 100%, 40%);">+                                       verifyStatusRerun: 'regate'</span><br><span style="color: hsl(120, 100%, 40%);">+                   }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>            success {</span><br><span style="color: hsl(0, 100%, 40%);">-                       gerritverificationpublisher verifyStatusCategory: 'Passed',</span><br><span style="color: hsl(0, 100%, 40%);">-                             verifyStatusURL: '', verifyStatusComment: 'OK',</span><br><span style="color: hsl(0, 100%, 40%);">-                         verifyStatusName: 'Jenkins2', verifyStatusReporter: '',</span><br><span style="color: hsl(0, 100%, 40%);">-                         verifyStatusRerun: 'regate'</span><br><span style="color: hsl(120, 100%, 40%);">+                   echo "Reporting ${currentBuild.currentResult} Passed"</span><br><span>              }</span><br><span>            failure {</span><br><span style="color: hsl(0, 100%, 40%);">-                       gerritverificationpublisher verifyStatusCategory: 'Failed',</span><br><span style="color: hsl(0, 100%, 40%);">-                             verifyStatusURL: '', verifyStatusComment: 'You\'re really screwed',</span><br><span style="color: hsl(0, 100%, 40%);">-                         verifyStatusName: 'Jenkins2', verifyStatusReporter: '',</span><br><span style="color: hsl(0, 100%, 40%);">-                         verifyStatusRerun: 'regate'</span><br><span style="color: hsl(120, 100%, 40%);">+                   echo "Reporting ${currentBuild.currentResult}: Failed: Fatal Error"</span><br><span>                }</span><br><span>            unstable {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gerritverificationpublisher verifyStatusCategory: 'Failed',</span><br><span style="color: hsl(0, 100%, 40%);">-                             verifyStatusURL: '', verifyStatusComment: 'You\'re screwed',</span><br><span style="color: hsl(0, 100%, 40%);">-                                verifyStatusName: 'Jenkins2', verifyStatusReporter: '',</span><br><span style="color: hsl(0, 100%, 40%);">-                         verifyStatusRerun: 'regate'</span><br><span style="color: hsl(120, 100%, 40%);">+                   echo "Reporting ${currentBuild.currentResult}: Failed: Tests Failed"</span><br><span>               }</span><br><span>    }</span><br><span> }</span><br><span>diff --git a/tests/CI/installAsterisk.sh b/tests/CI/installAsterisk.sh</span><br><span>index b75730f..74f5651 100755</span><br><span>--- a/tests/CI/installAsterisk.sh</span><br><span>+++ b/tests/CI/installAsterisk.sh</span><br><span>@@ -1,23 +1,28 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/bin/bash</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env bash</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+CIDIR=$(dirname $(readlink -fn $0))</span><br><span style="color: hsl(120, 100%, 40%);">+source $CIDIR/ci.functions</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> MAKE=`which make`</span><br><span style="color: hsl(0, 100%, 40%);">-if [ x"${@}" != x ] ; then</span><br><span style="color: hsl(0, 100%, 40%);">-       mkdir -p "${@}"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ x"$DESTDIR" != x ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+ mkdir -p "$DESTDIR"</span><br><span> fi</span><br><span style="color: hsl(0, 100%, 40%);">-destdir=${@:+DESTDIR=${@}}</span><br><span style="color: hsl(120, 100%, 40%);">+destdir=${DESTDIR:+DESTDIR=$DESTDIR}</span><br><span> </span><br><span> ${MAKE} ${destdir} install || ${MAKE} ${destdir} NOISY_BUILD=yes install || exit 1</span><br><span> ${MAKE} ${destdir} samples</span><br><span style="color: hsl(0, 100%, 40%);">-if [ -n "${@}" ] ; then</span><br><span style="color: hsl(0, 100%, 40%);">-    sed -i -r -e "s@\[directories\]\(!\)@[directories]@g" $@/etc/asterisk/asterisk.conf</span><br><span style="color: hsl(0, 100%, 40%);">-   sed -i -r -e "s@ /(var|etc|usr)/@ ${@}/\1/@g" $@/etc/asterisk/asterisk.conf</span><br><span style="color: hsl(120, 100%, 40%);">+if [ x"$DESTDIR" != x ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+       sed -i -r -e "s@\[directories\]\(!\)@[directories]@g" $DESTDIR/etc/asterisk/asterisk.conf</span><br><span style="color: hsl(120, 100%, 40%);">+   sed -i -r -e "s@ /(var|etc|usr)/@ $DESTDIR/\1/@g" $DESTDIR/etc/asterisk/asterisk.conf</span><br><span> fi</span><br><span> </span><br><span> set +e</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:users ${@}/var/lib/asterisk</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:users ${@}/var/spool/asterisk</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:users ${@}/var/log/asterisk</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:users ${@}/var/run/asterisk</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:users ${@}/etc/asterisk</span><br><span style="color: hsl(0, 100%, 40%);">-[ ! -d ${@}/tmp/asterisk-jenkins ] && mkdir ${@}/tmp/asterisk-jenkins</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:users ${@}/tmp/asterisk-jenkins</span><br><span style="color: hsl(0, 100%, 40%);">-ldconfig</span><br><span>\ No newline at end of file</span><br><span style="color: hsl(120, 100%, 40%);">+if [ x"$USER_GROUP" != x ] ; then</span><br><span style="color: hsl(120, 100%, 40%);">+ chown -R $USER_GROUP $DESTDIR/var/lib/asterisk</span><br><span style="color: hsl(120, 100%, 40%);">+        chown -R $USER_GROUP $DESTDIR/var/spool/asterisk</span><br><span style="color: hsl(120, 100%, 40%);">+      chown -R $USER_GROUP $DESTDIR/var/log/asterisk</span><br><span style="color: hsl(120, 100%, 40%);">+        chown -R $USER_GROUP $DESTDIR/var/run/asterisk</span><br><span style="color: hsl(120, 100%, 40%);">+        chown -R $USER_GROUP $DESTDIR/etc/asterisk</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+ldconfig</span><br><span>diff --git a/tests/CI/runTestsuite.sh b/tests/CI/runTestsuite.sh</span><br><span>index a84a12c..5c7a479 100755</span><br><span>--- a/tests/CI/runTestsuite.sh</span><br><span>+++ b/tests/CI/runTestsuite.sh</span><br><span>@@ -5,18 +5,13 @@</span><br><span> </span><br><span> pushd $TESTSUITE_DIR</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-sudo ./cleanup-test-temnants.sh</span><br><span style="color: hsl(0, 100%, 40%);">-sudo chown -R jenkins:users .</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-runner sudo PYTHONPATH=./lib/python/ ./runtests.py --cleanup ${TEST_COMMAND} || :</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if [ -f asterisk-test-suite-report.xml ]  ; then</span><br><span style="color: hsl(0, 100%, 40%);">-  sudo chown jenkins:users asterisk-test-suite-report.xml</span><br><span style="color: hsl(0, 100%, 40%);">-fi</span><br><span style="color: hsl(120, 100%, 40%);">+./cleanup-test-remnants.sh</span><br><span style="color: hsl(120, 100%, 40%);">+export PYTHONPATH=./lib/python/</span><br><span style="color: hsl(120, 100%, 40%);">+runner ./runtests.py --cleanup ${TEST_COMMAND} | contrib/scripts/pretty_print --no-color --no-timer --term-width=120 --show-errors || :</span><br><span> </span><br><span> if [ -f core* ] ; then</span><br><span>        echo "*** Found a core file after running unit tests ***"</span><br><span style="color: hsl(0, 100%, 40%);">-     sudo /var/lib/asterisk/scripts/ast_coredumper --no-default-search core*</span><br><span style="color: hsl(120, 100%, 40%);">+       /var/lib/asterisk/scripts/ast_coredumper --no-default-search core*</span><br><span>   exit 1</span><br><span> fi</span><br><span> </span><br><span>diff --git a/tests/CI/runUnittests.sh b/tests/CI/runUnittests.sh</span><br><span>index a463e15..e8a8f2c 100755</span><br><span>--- a/tests/CI/runUnittests.sh</span><br><span>+++ b/tests/CI/runUnittests.sh</span><br><span>@@ -46,11 +46,11 @@</span><br><span> OUTPUTFILE=${OUTPUT_XML:-${OUTPUTDIR}/unittests-results.xml}</span><br><span> </span><br><span> [ ! -d ${OUTPUTDIR} ] && mkdir -p $OUTPUTDIR</span><br><span style="color: hsl(0, 100%, 40%);">-sudo chown -R jenkins:users $OUTPUTDIR</span><br><span style="color: hsl(120, 100%, 40%);">+[ x"$USER_GROUP" != x ] && sudo chown -R $USER_GROUP $OUTPUTDIR</span><br><span> </span><br><span> rm -rf $ASTETCDIR/extensions.{ael,lua} || :</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-runner sudo $ASTERISK -U jenkins -G users -gn -C $CONFFILE</span><br><span style="color: hsl(120, 100%, 40%);">+runner sudo $ASTERISK ${USER_GROUP:+-U ${USER_GROUP%%:*} -G ${USER_GROUP##*:}} -gn -C $CONFFILE</span><br><span> sleep 3</span><br><span> runner $ASTERISK -rx "core waitfullybooted" -C $CONFFILE</span><br><span> sleep 1</span><br><span>@@ -61,7 +61,7 @@</span><br><span> </span><br><span> runner rsync -vaH $DESTDIR/var/log/asterisk/. $OUTPUTDIR</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-sudo chown -R jenkins:users $OUTPUTDIR</span><br><span style="color: hsl(120, 100%, 40%);">+[ x"$USER_GROUP" != x ] && sudo chown -R $USER_GROUP $OUTPUTDIR</span><br><span> if [ -f core* ] ; then</span><br><span>    echo "*** Found a core file after running unit tests ***"</span><br><span>  $DESTDIR/var/lib/asterisk/scripts/ast_coredumper --no-default-search core*</span><br><span>diff --git a/tests/CI/setupEnvironment.sh b/tests/CI/setupEnvironment.sh</span><br><span>deleted file mode 100755</span><br><span>index eef47a6..0000000</span><br><span>--- a/tests/CI/setupEnvironment.sh</span><br><span>+++ /dev/null</span><br><span>@@ -1,13 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env bash</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-chmod 0750 /etc/sudoers.d</span><br><span style="color: hsl(0, 100%, 40%);">-chmod 0440 /etc/sudoers.d/jenkins</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-chown root:root -R /root</span><br><span style="color: hsl(0, 100%, 40%);">-chmod -R go-rwx /root/.ssh</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:jenkins /home/jenkins</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:jenkins /srv/cache</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:jenkins /srv/jenkins</span><br><span style="color: hsl(0, 100%, 40%);">-chown -R jenkins:jenkins /srv/git</span><br><span style="color: hsl(0, 100%, 40%);">-chmod -R go-rwx /home/jenkins/.ssh</span><br><span style="color: hsl(0, 100%, 40%);">-chmod -R go-rwx /home/jenkins/.ssh/authorized_keys</span><br><span>diff --git a/tests/CI/setupJenkinsEnvironment.sh b/tests/CI/setupJenkinsEnvironment.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..63da6c9</span><br><span>--- /dev/null</span><br><span>+++ b/tests/CI/setupJenkinsEnvironment.sh</span><br><span>@@ -0,0 +1,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env bash</span><br><span style="color: hsl(120, 100%, 40%);">+mkdir -p /srv/cache/externals /srv/cache/sounds /srv/cache/ccache || :</span><br><span style="color: hsl(120, 100%, 40%);">+chown -R jenkins:users /srv/cache</span><br><span style="color: hsl(120, 100%, 40%);">+chmod g+rw /srv/cache/ccache</span><br><span style="color: hsl(120, 100%, 40%);">+chmod g+s /srv/cache/ccache</span><br><span style="color: hsl(120, 100%, 40%);">+mkdir -p tests/CI/output || :</span><br><span style="color: hsl(120, 100%, 40%);">+chown -R jenkins:users tests/CI/output</span><br><span>diff --git a/tests/CI/unittests.jenkinsfile b/tests/CI/unittests.jenkinsfile</span><br><span>index 7486823..d9f28e7 100644</span><br><span>--- a/tests/CI/unittests.jenkinsfile</span><br><span>+++ b/tests/CI/unittests.jenkinsfile</span><br><span>@@ -20,8 +20,6 @@</span><br><span>                gerrit customUrl: '',</span><br><span>                        commentTextParameterMode: 'PLAIN',</span><br><span>                   commitMessageParameterMode: 'PLAIN',</span><br><span style="color: hsl(0, 100%, 40%);">-                    gerritBuildStartedVerifiedValue: 0,</span><br><span style="color: hsl(0, 100%, 40%);">-                     gerritBuildNotBuiltVerifiedValue: 0,</span><br><span>                         gerritBuildSuccessfulVerifiedValue: 1,</span><br><span>                       gerritBuildFailedVerifiedValue: -1,</span><br><span>                  gerritBuildUnstableVerifiedValue: -1,</span><br><span>@@ -53,7 +51,7 @@</span><br><span>    }</span><br><span> </span><br><span>        stages {</span><br><span style="color: hsl(0, 100%, 40%);">-                stage ("Unit Tests-->") {</span><br><span style="color: hsl(120, 100%, 40%);">+                stage ("->") {</span><br><span>                  /*</span><br><span>                    * Jenkins will try to automatically rebuild this job when</span><br><span>                    * the jenkinsfile changes but since this job is dependent on</span><br><span>@@ -65,7 +63,10 @@</span><br><span>                   steps {</span><br><span>                              script {</span><br><span>                                     stage ("Checkout") {</span><br><span style="color: hsl(0, 100%, 40%);">-                                          sh "sudo chown -R jenkins:users ."  </span><br><span style="color: hsl(120, 100%, 40%);">+                                                sh "sudo chown -R jenkins:users ."</span><br><span style="color: hsl(120, 100%, 40%);">+                                          env.GERRIT_PROJECT_URL = env.GERRIT_CHANGE_URL.replaceAll(/\/[0-9]+$/, "/${env.GERRIT_PROJECT}")</span><br><span style="color: hsl(120, 100%, 40%);">+                                            sh "printenv | sort"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                                             /*</span><br><span>                                            * Jenkins has already automatically checked out the base branch</span><br><span>                                              * for this change but we now need to check out the change itself</span><br><span>@@ -76,7 +77,6 @@</span><br><span>                                                 * The Gerrit Trigger provides all the URLs and refspecs to</span><br><span>                                           * check out the change.</span><br><span>                                              */</span><br><span style="color: hsl(0, 100%, 40%);">-                                             sh "sudo chown -R jenkins:users ."  </span><br><span>                                               checkout scm: [$class: 'GitSCM',</span><br><span>                                                     branches: [[name: env.GERRIT_BRANCH ]],</span><br><span>                                                      extensions: [</span><br><span>@@ -88,7 +88,6 @@</span><br><span>                                                            [$class: 'CloneOption',</span><br><span>                                                                      noTags: true,</span><br><span>                                                                        depth: 10,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                                      honorRefspec: true,</span><br><span>                                                                  shallow: true</span><br><span>                                                                ],</span><br><span>                                                           [$class: 'BuildChooserSetting',</span><br><span>@@ -96,37 +95,44 @@</span><br><span>                                                                ]</span><br><span>                                                    ],</span><br><span>                                                   userRemoteConfigs: [</span><br><span style="color: hsl(0, 100%, 40%);">-                                                            [name: env.GERRIT_NAME, refspec: env.GERRIT_REFSPEC, url: env.GIT_URL ]</span><br><span style="color: hsl(120, 100%, 40%);">+                                                               [name: env.GERRIT_NAME, refspec: env.GERRIT_REFSPEC, url: env.GERRIT_PROJECT_URL ]</span><br><span>                                                   ]</span><br><span>                                            ]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                           sh "sudo tests/CI/setupJenkinsEnvironment.sh"</span><br><span>                                      }</span><br><span> </span><br><span>                                        def images = env.DOCKER_IMAGES.split(' ')</span><br><span>                                    def r = currentBuild.startTimeInMillis % images.length</span><br><span>                                       def ri = images[(int)r]</span><br><span>                                      def randomImage = env.DOCKER_REGISTRY + "/" + ri;</span><br><span style="color: hsl(0, 100%, 40%);">-                                     def dockerOptions =</span><br><span style="color: hsl(0, 100%, 40%);">-                                             "-v /srv/jenkins:/srv/jenkins:rw -v /srv/cache:/srv/cache:rw" +</span><br><span style="color: hsl(0, 100%, 40%);">-                                                " --entrypoint='' --name ${BUILD_TAG}-build"</span><br><span style="color: hsl(120, 100%, 40%);">+                                       def dockerOptions = "--ulimit core=0 --ulimit nofile=10240 " +</span><br><span style="color: hsl(120, 100%, 40%);">+                                              " -v /srv/jenkins:/srv/jenkins:rw -v /srv/cache:/srv/cache:rw " +</span><br><span style="color: hsl(120, 100%, 40%);">+                                           " --entrypoint='' --name ${BUILD_TAG}-build"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                                      docker.image(randomImage).inside(dockerOptions) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     def outputdir = "tests/CI/output/UnitTests"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                     def img = docker.image(randomImage)</span><br><span style="color: hsl(120, 100%, 40%);">+                                   img.pull()</span><br><span style="color: hsl(120, 100%, 40%);">+                                    img.inside(dockerOptions) {</span><br><span> </span><br><span>                                              stage ('Build') {</span><br><span>                                                    echo 'Building..'</span><br><span style="color: hsl(0, 100%, 40%);">-                                                       sh './tests/CI/buildAsterisk.sh'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    sh "./tests/CI/buildAsterisk.sh --output-dir=${outputdir} --cache-dir=/srv/cache"</span><br><span> </span><br><span>                                                      archiveArtifacts allowEmptyArchive: true, defaultExcludes: false, fingerprint: false,</span><br><span style="color: hsl(0, 100%, 40%);">-                                                           artifacts: "tests/CI/output/*"</span><br><span style="color: hsl(120, 100%, 40%);">+                                                              artifacts: "${outputdir}/*"</span><br><span>                                                }</span><br><span> </span><br><span>                                                stage ('Test') {</span><br><span style="color: hsl(0, 100%, 40%);">-                                                        def outputdir = "tests/CI/output/UnitTests"</span><br><span>                                                        def outputfile = "${outputdir}/unittests-results.xml"</span><br><span>                                                      def testcmd = "test execute all"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                                                  sh 'sudo ./tests/CI/installAsterisk.sh'</span><br><span style="color: hsl(0, 100%, 40%);">-                                                 echo "tests/CI/runUnittests.sh --output-dir='${outputdir}' --output-xml='${outputfile}' --test-command='${testcmd}'"</span><br><span style="color: hsl(0, 100%, 40%);">-                                                  sh "tests/CI/runUnittests.sh --output-dir='${outputdir}' --output-xml='${outputfile}' --test-command='${testcmd}'"</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  sh 'sudo ./tests/CI/installAsterisk.sh --user-group=jenkins:users'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  sh "tests/CI/runUnittests.sh --user-group=jenkins:users --output-dir='${outputdir}' --output-xml='${outputfile}' --test-command='${testcmd}'"</span><br><span> </span><br><span>                                                  archiveArtifacts allowEmptyArchive: true, defaultExcludes: false, fingerprint: true,</span><br><span>                                                                 artifacts: "${outputdir}/**"</span><br><span>@@ -142,8 +148,8 @@</span><br><span>         }</span><br><span>    post {</span><br><span>               always {</span><br><span style="color: hsl(0, 100%, 40%);">-                        sh "sudo make distclean || : "</span><br><span style="color: hsl(0, 100%, 40%);">-                        sh "sudo rm -rf tests/CI/output || : "</span><br><span style="color: hsl(120, 100%, 40%);">+                      sh "sudo make distclean 2&>/dev/null || : "</span><br><span style="color: hsl(120, 100%, 40%);">+                  sh "sudo rm -rf tests/CI/output 2&>/dev/null || : "</span><br><span>                 }</span><br><span>            /*</span><br><span>            * The Gerrit Trigger will automatically post the "Verified" results back</span><br><span>@@ -151,21 +157,24 @@</span><br><span>           * "Code Review" section of the review.</span><br><span>            */</span><br><span>           success {</span><br><span style="color: hsl(0, 100%, 40%);">-                       gerritverificationpublisher verifyStatusValue: 1, verifyStatusCategory: 'Passed',</span><br><span style="color: hsl(120, 100%, 40%);">+                     echo "Reporting Passed"</span><br><span style="color: hsl(120, 100%, 40%);">+                     gerritverificationpublisher verifyStatusCategory: 'Passed',</span><br><span>                          verifyStatusURL: '', verifyStatusComment: '',</span><br><span style="color: hsl(0, 100%, 40%);">-                           verifyStatusName: '', verifyStatusReporter: '',</span><br><span style="color: hsl(120, 100%, 40%);">+                               verifyStatusName: '', verifyStatusReporter: 'Jenkins2',</span><br><span>                              verifyStatusRerun: 'recheck'</span><br><span>                 }</span><br><span>            failure {</span><br><span style="color: hsl(0, 100%, 40%);">-                       gerritverificationpublisher verifyStatusValue: -1, verifyStatusCategory: 'Failed',</span><br><span style="color: hsl(0, 100%, 40%);">-                              verifyStatusURL: '', verifyStatusComment: '',</span><br><span style="color: hsl(0, 100%, 40%);">-                           verifyStatusName: '', verifyStatusReporter: '',</span><br><span style="color: hsl(120, 100%, 40%);">+                       echo "Reporting Failed: Fatal Error"</span><br><span style="color: hsl(120, 100%, 40%);">+                        gerritverificationpublisher verifyStatusCategory: 'Failed',</span><br><span style="color: hsl(120, 100%, 40%);">+                           verifyStatusURL: '', verifyStatusComment: 'Fatal Error',</span><br><span style="color: hsl(120, 100%, 40%);">+                              verifyStatusName: '', verifyStatusReporter: 'Jenkins2',</span><br><span>                              verifyStatusRerun: 'recheck'</span><br><span>                 }</span><br><span>            unstable {</span><br><span style="color: hsl(0, 100%, 40%);">-                      gerritverificationpublisher verifyStatusValue: -1, verifyStatusCategory: 'Failed',</span><br><span style="color: hsl(0, 100%, 40%);">-                              verifyStatusURL: '', verifyStatusComment: '',</span><br><span style="color: hsl(0, 100%, 40%);">-                           verifyStatusName: '', verifyStatusReporter: '',</span><br><span style="color: hsl(120, 100%, 40%);">+                       echo "Reporting Failed: Tests Failed"</span><br><span style="color: hsl(120, 100%, 40%);">+                       gerritverificationpublisher verifyStatusCategory: 'Failed',</span><br><span style="color: hsl(120, 100%, 40%);">+                           verifyStatusURL: '', verifyStatusComment: 'Tests Failed',</span><br><span style="color: hsl(120, 100%, 40%);">+                             verifyStatusName: '', verifyStatusReporter: 'Jenkins2',</span><br><span>                              verifyStatusRerun: 'recheck'</span><br><span>                 }</span><br><span>    }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/9424">change 9424</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/9424"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: certified/13.21 </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I7e2467f9120812551238d8005deb97f965279205 </div>
<div style="display:none"> Gerrit-Change-Number: 9424 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>