From 73af92a4b156361294baf4490e2aa4e6d68c82a6 Mon Sep 17 00:00:00 2001 From: jlaura <jlaura@usgs.gov> Date: Mon, 22 Aug 2022 09:39:05 -0700 Subject: [PATCH] Adds: Jenkins file for new CI deploy. (#5037) --- Jenkinsfile | 260 ++++++++++++++++++++++++++++------------------------ 1 file changed, 138 insertions(+), 122 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index e99ec84369..ffa9a36177 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,132 +1,148 @@ // vim: ft=groovy -def NUM_CORES = 4 +def NUM_CORES = 8 def errors = [] -def labels = ['Ubuntu'] // labels for Jenkins node types we will build on -def nodes = [:] -for (lbl in labels) { - def label = lbl - def envFile = (label == "CentOS") ? "environment_gcc4.yml" : "environment.yml" - - nodes[label] = { - stage(label) { - isisNode(label) { - def isisEnv = [ - "ISISDATA=/isisData/isis_data", - "ISISTESTDATA=/isisData/isis_testData", - "ISIS3MGRSCRIPTS=/isisData/data/isis3mgr_scripts", - "MALLOC_CHECK_=1" - ] - - def cmakeFlags = [ - "-DJP2KFLAG=ON", - "-DKAKADU_INCLUDE_DIR=/isisData/kakadu", - "-Dpybindings=OFF", - "-DCMAKE_BUILD_TYPE=RELEASE" - ] - - def stageStatus = "Checking out ISIS on ${label}" - - // Checkout - checkout scm - - condaEnv("isis3") { - // Environment - loginShell """ - conda config --env --set channel_alias https://conda.prod-asc.chs.usgs.gov - conda config --env --set remote_read_timeout_secs 3600 - conda install -c conda-forge python=3 findutils - conda env update -f ${envFile} --prune - mkdir build install - """ - - def osFailed = false - isisEnv.add("ISISROOT=${pwd()}/build") - isisEnv.add("PATH=${pwd()}/install/bin:${env.PATH}") - cmakeFlags.add("-DCMAKE_INSTALL_PREFIX=${pwd()}/install") - - withEnv(isisEnv) { - dir(env.ISISROOT) { - // Build - stageStatus = "Building ISIS on ${label}" - try { - loginShell """ - cmake -GNinja ${cmakeFlags.join(' ')} ../isis - ninja -j${NUM_CORES} install - """ - } catch(e) { - // Die right here - error stageStatus - } - - // Unit tests - stageStatus = "Running unit tests on ${label}" - try { - loginShell "ctest -R _unit_ -j${NUM_CORES} --output-on-failure" - } catch(e) { - errors.add(stageStatus) - osFailed = true - } - - // App tests - stageStatus = "Running app tests on ${label}" - try { - loginShell "ctest -R _app_ -j${NUM_CORES} --output-on-failure --timeout 10000" - } catch(e) { - errors.add(stageStatus) - osFailed = true - } - - try { - loginShell "ctest -R _module_ -j${NUM_CORES} --output-on-failure --timeout 10000" - } catch(e) { - errors.add(stageStatus) - osFailed = true - } - - // Gtests - stageStatus = "Running gtests on ${label}" - try { - loginShell "ctest -R '.' -E '(_app_|_unit_|_module_)' -j${NUM_CORES} --output-on-failure --timeout 10000" - } catch(e) { - errors.add(stageStatus) - osFailed = true - } - // pytests - stageStatus = "Running pytests on ${label}" - try { - loginShell "cd $WORKSPACE/isis/pytests && pytest ." - } catch(e) { - errors.add(stageStatus) - osFailed = true - } - - if (osFailed) { - error "Failed on ${label}" - } - } - } +pipeline { + agent { + docker { + image '950438895271.dkr.ecr.us-west-2.amazonaws.com/asc-jenkins' + registryCredentialsId 'ecr:us-west-2:Jenkins-Manager-Role' + registryUrl 'https://950438895271.dkr.ecr.us-west-2.amazonaws.com' + args '--entrypoint= -v /astro_efs:/astro_efs' + } + } + environment { + ISISDATA = '/astro_efs/isis_data' + ISISTESTDATA = '/astro_efs/isis_testData' + MALLOC_CHECK_ = 1 + PATH = "${env.WORKSPACE}/install/bin:${env.PATH}" + ISISROOT = "${env.WORKSPACE}/build" + KAKADU_HEADERS = '/astro_efs/kakadu_7_9' + } + + stages { + stage('Environment Setup') { + steps { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + echo "ISISROOT: ${ISISROOT}" + echo "CURRENT PATH: ${PATH}" + + conda create -y -n isis + conda activate isis > /dev/null + conda install -c conda-forge python=3 findutils + mamba env update -f environment.yml --prune + conda activate isis + mamba install -c conda-forge cxx-compiler git + git submodule update --init --recursive + conda list + ''' + } + } + stage('Build') { + environment { + ISIS_INSTALL_DIR = "${env.WORKSPACE}/install" + } + steps { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + conda activate isis > /dev/null + mkdir -p build install + cd build + cmake -GNinja -DJP2KFLAG=ON \ + -DKAKADU_INCLUDE_DIR=${KAKADU_HEADERS} \ + -Dpybindings=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DCMAKE_INSTALL_PREFIX=${ISIS_INSTALL_DIR} \ + ../isis + ninja -j 8 install + ''' + } + } + stage('GTests') { + environment { + PATH = "${env.WORKSPACE}/install/bin:${env.PATH}" + } + steps { + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + conda activate isis > /dev/null + cd build + ctest -R '.' -E '(_app_|_unit_|_module_)' -j 8 --output-on-failure --timeout 10000 + ''' } } } - } -} - -// Run the builds in parallel -node { - try { - parallel nodes - - } catch(e) { - // Report result to GitHub - currentBuild.result = "FAILURE" - - def comment = "Failed during:\n" - errors.each { - comment += "- ${it}\n" + stage('Unit Tests') { + environment { + PATH = "${env.WORKSPACE}/install/bin:${env.PATH}" + } + steps { + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + conda activate isis > /dev/null + cd build + ctest -R _unit_ -j 8 --output-on-failure + ''' + } + } + } + stage('App Tests') { + environment { + PATH = "${env.WORKSPACE}/install/bin:${env.PATH}" + } + steps { + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + conda activate isis > /dev/null + cd build + ctest -R _app_ -j 8 --output-on-failure --timeout 10000 + ''' + } + } + } + stage('Module Tests') { + environment { + PATH = "${env.WORKSPACE}/install/bin:${env.PATH}" + } + steps { + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + conda activate isis > /dev/null + cd build + ctest -R _module_ -j 8 --output-on-failure --timeout 10000 + ''' + } + } + } + stage('Py Tests') { + environment { + PATH = "${env.WORKSPACE}/install/bin:${env.PATH}" + } + steps { + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh ''' + . /home/conda/mambaforge3/etc/profile.d/conda.sh > /dev/null + conda activate isis > /dev/null + cd build + cd $WORKSPACE/isis/pytests + pytest . + + ''' + } + } + } + stage('Deploy') { + steps { + sh ''' + echo "This is where deploy would happen." + ''' + } } - - setGithubStatus(comment) } } -- GitLab