From 712e77c3f664cf06a4db9182391878150b62dc26 Mon Sep 17 00:00:00 2001
From: Martin Hierholzer <martin.hierholzer@desy.de>
Date: Wed, 20 Feb 2019 10:44:11 +0100
Subject: [PATCH] use sudo -E everywhere, allow changing PATH variables, remove
 debugging stuff from matlab

---
 vars/helper.groovy | 52 ++++++++++++++++++++++------------------------
 1 file changed, 25 insertions(+), 27 deletions(-)

diff --git a/vars/helper.groovy b/vars/helper.groovy
index 6a45a45..2496f1d 100644
--- a/vars/helper.groovy
+++ b/vars/helper.groovy
@@ -47,6 +47,12 @@ def doAnalysis(String label, String buildType) {
 
 def doPrepare(boolean checkoutScm, String gitUrl='') {
   
+  // configure sudoers file so we can change the PATH variable
+  sh '''
+    mv /etc/sudoers /etc/sudoers-backup
+    grep -v secure_path /etc/sudoers-backup > /etc/sudoers
+  '''
+
   // make sure all files in workspace can be written by msk_jenkins
   sh '''
     chown -R msk_jenkins .
@@ -69,15 +75,15 @@ def doPrepare(boolean checkoutScm, String gitUrl='') {
       } else {
           git gitUrl
       }
-      sh 'sudo -H -u msk_jenkins git submodule update --init --recursive'
+      sh 'sudo -H -E -u msk_jenkins git submodule update --init --recursive'
     }
     else {
       checkout scm
     }
     sh '''
-      sudo -H -u msk_jenkins git clean -f -d -x
-      sudo -H -u msk_jenkins mkdir /scratch/source
-      sudo -H -u msk_jenkins cp -r * /scratch/source
+      sudo -H -E -u msk_jenkins git clean -f -d -x
+      sudo -H -E -u msk_jenkins mkdir /scratch/source
+      sudo -H -E -u msk_jenkins cp -r * /scratch/source
     '''
   }
 
@@ -125,7 +131,7 @@ def doBuilddirArtefact(String label, String buildType) {
     // Then obtain artefacts of dependencies (from /scratch/artefact.list)
     sh """
       for a in artefacts/build-*-${label}-${buildType}.tgz ; do
-        sudo -H -u msk_jenkins tar zxvf \"\${a}\" -C /
+        sudo -H -E -u msk_jenkins tar zxvf \"\${a}\" -C /
       done
 
       touch /scratch/artefact.list
@@ -157,8 +163,8 @@ def doBuild(String label, String buildType) {
     // start the build
     sh """
       chown -R msk_jenkins /scratch
-      sudo -H -u msk_jenkins mkdir -p /scratch/build-${JOB_NAME}
-      sudo -H -u msk_jenkins mkdir -p /scratch/install
+      sudo -H -E -u msk_jenkins mkdir -p /scratch/build-${JOB_NAME}
+      sudo -H -E -u msk_jenkins mkdir -p /scratch/install
       cd /scratch/build-${JOB_NAME}
       # We might run only part of the project from a sub-directory. If it is empty the trailing / does not confuse cmake
       if [ -z "\${RUN_FROM_SUBDIR}" ]; then
@@ -169,14 +175,6 @@ def doBuild(String label, String buildType) {
       for VAR in ${env.JOB_VARIABLES}; do
         export `eval echo \${VAR}`
       done
-      sudo -H -E -u msk_jenkins bash -c export
-      mkdir /scratch/matlab_prefs
-      rm -rf /home/msk_jenkins/.matlab
-      ln -sfn /scratch/matlab_prefs /home/msk_jenkins/.matlab
-      export PATH=/opt/matlab_R2016b/bin:$PATH
-      mv /etc/sudoers /etc/sudoers-backup
-      grep -v secure_path /etc/sudoers-backup > /etc/sudoers
-      sudo -H -E -u msk_jenkins matlab -nosplash -nojvm -nodesktop -nodisplay -r "version, exit"
       sudo -H -E -u msk_jenkins cmake /scratch/source/\${SUBDIR} -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${buildType} -DSUPPRESS_AUTO_DOC_BUILD=true \${CMAKE_EXTRA_ARGS}
       sudo -H -E -u msk_jenkins make ${env.MAKEOPTS}
     """
@@ -184,7 +182,7 @@ def doBuild(String label, String buildType) {
   script {
     // generate and archive artefact from build directory (used for the analysis job)
     sh """
-      sudo -H -u msk_jenkins tar zcf build-${JOB_NAME}-${label}-${buildType}.tgz /scratch
+      sudo -H -E -u msk_jenkins tar zcf build-${JOB_NAME}-${label}-${buildType}.tgz /scratch
     """
     archiveArtifacts artifacts: "build-${JOB_NAME}-${label}-${buildType}.tgz", onlyIfSuccessful: false
   }
@@ -206,9 +204,9 @@ def doTest(String label, String buildType) {
        export `eval echo \${VAR}`
     done
     export
-    sudo -H -u msk_jenkins ctest --no-compress-output \${CTESTOPTS} -T Test -V || true
-    sudo -H -u msk_jenkins sed -i Testing/*/Test.xml -e 's_\\(^[[:space:]]*<Name>\\)\\(.*\\)\\(</Name>\\)\$_\\1${label}.${buildType}.\\2\\3_'
-    sudo -H -u msk_jenkins cp -r /scratch/build-${JOB_NAME}/Testing "${WORKSPACE}"
+    sudo -H -E -u msk_jenkins ctest --no-compress-output \${CTESTOPTS} -T Test -V || true
+    sudo -H -E -u msk_jenkins sed -i Testing/*/Test.xml -e 's_\\(^[[:space:]]*<Name>\\)\\(.*\\)\\(</Name>\\)\$_\\1${label}.${buildType}.\\2\\3_'
+    sudo -H -E -u msk_jenkins cp -r /scratch/build-${JOB_NAME}/Testing "${WORKSPACE}"
   """
 
   // Publish test result directly (works properly even with multiple publications from parallel branches)  
@@ -225,11 +223,11 @@ def doCoverage(String label, String buildType) {
   sh """
     chown msk_jenkins -R /scratch
     cd /scratch/build-${parentJob}
-    sudo -H -u msk_jenkins make coverage || true
-    sudo -H -u msk_jenkins /common/lcov_cobertura-1.6/lcov_cobertura/lcov_cobertura.py coverage.info || true
+    sudo -H -E -u msk_jenkins make coverage || true
+    sudo -H -E -u msk_jenkins /common/lcov_cobertura-1.6/lcov_cobertura/lcov_cobertura.py coverage.info || true
     
-    sudo -H -u msk_jenkins cp -r coverage_html ${WORKSPACE} || true
-    sudo -H -u msk_jenkins cp -r coverage.xml ${WORKSPACE} || true
+    sudo -H -E -u msk_jenkins cp -r coverage_html ${WORKSPACE} || true
+    sudo -H -E -u msk_jenkins cp -r coverage.xml ${WORKSPACE} || true
   """
   
   // stash cobertura coverage report result for later publication
@@ -282,7 +280,7 @@ def doValgrind(String label, String buildType) {
       for test in \${EXECLIST} ; do
         testname=`basename \${test}`
         if [ -z "`echo " \${valgrindExcludes} " | grep " \${testname} "`" ]; then
-          sudo -H -u msk_jenkins valgrind --num-callers=99 --gen-suppressions=all --suppressions=/scratch/valgrind.supp   \
+          sudo -H -E -u msk_jenkins valgrind --num-callers=99 --gen-suppressions=all --suppressions=/scratch/valgrind.supp   \
                                        --tool=memcheck --leak-check=full --undef-value-errors=yes --xml=yes            \
                                        --xml-file=/scratch/build-${parentJob}/${label}.\${testname}.memcheck.valgrind  \
                                        \${test}
@@ -292,7 +290,7 @@ def doValgrind(String label, String buildType) {
 
     done
   
-    sudo -H -u msk_jenkins cp /scratch/build-${parentJob}/*.valgrind "${WORKSPACE}"
+    sudo -H -E -u msk_jenkins cp /scratch/build-${parentJob}/*.valgrind "${WORKSPACE}"
   """
   // stash valgrind result files for later publication
   stash includes: '*.valgrind', name: "valgrind-${label}-${buildType}"
@@ -306,14 +304,14 @@ def doInstall(String label, String buildType) {
   // Generate tar ball of install directory - this will be the artefact used by our dependents
   sh """
     cd /scratch/build-${JOB_NAME}
-    sudo -H -u msk_jenkins make install DESTDIR=../install
+    sudo -H -E -u msk_jenkins make install DESTDIR=../install
   
     cd /scratch/install
     mkdir -p scratch
     if [ -e /scratch/artefact.list ]; then
       cp /scratch/artefact.list scratch/dependencies.${JOB_NAME}.list
     fi
-    sudo -H -u msk_jenkins tar zcf ${WORKSPACE}/install-${JOB_NAME}-${label}-${buildType}.tgz .
+    sudo -H -E -u msk_jenkins tar zcf ${WORKSPACE}/install-${JOB_NAME}-${label}-${buildType}.tgz .
   """
   
   // Archive the artefact tar ball (even if other branches of this build failed - TODO: do we really want to do that?)
-- 
GitLab