#!groovy // Use the last known good version of PSL: https://git.autodesk.com/Pipeline-Community/PSL @Library('PSL') _ // Use pipline library: https://git.autodesk.com/ICP-HST/hst-jenkins-pipeline-library @Library('hst-pipeline-lib@master') // Import required class import ors.utils.CommonArtifactory import ors.security.CommonAppsec import com.autodesk.hst.cmd.CommandUtility import com.autodesk.hst.build.SignatureUtility import com.autodesk.hst.build.VersionUtility import com.autodesk.hst.mail.MailUtility import com.autodesk.hst.iw.IWHelper properties([ buildDiscarder(logRotator(daysToKeepStr: '30', numToKeepStr: '50')) ]) // Define global variables ScmInfo = '' FailureStage = '' OASTScanResult = '' PostLocationList = [] EPSGDatasetVer = 'epsg-dataset-v11.005.7z' ProjectName = 'csmap' // Add timestamps to the console log timestamps { // Define parallel tasks, in case we need parallelly run task on different platform def tasks = [:] tasks['Windows'] = { node('IWD&&VS2022-1780') { timeout(time: 8, unit: 'HOURS') { ws("workspace\\$ProjectName") { def variables = prepareEnvVariables(env.WORKSPACE) withEnv(variables) { windowsBuild() } } } } } tasks['linux'] = { node('IWD&&RHEL&&PR&&Docker') { timeout(time: 8, unit: 'HOURS') { ws("workspace/$ProjectName") { def variables = prepareEnvVariables(env.WORKSPACE) withEnv(variables) { linuxBuild() } } } } } parallel tasks } // Define environment variables def prepareEnvVariables(workspace) { def envVariables = [] envVariables.add('AF_MIRROR=https://art-bobcat.autodesk.com') return envVariables } def windowsBuild() { try { enhancedPipeline.runStage('Checkout Source Code') { setFailureStageName() echo '==============================================' echo ' Checkout Source Code' echo '==============================================' checkoutCode() } enhancedPipeline.runStage('Prepare build environment') { setFailureStageName() echo '==============================================' echo ' Prepare build environment' echo '==============================================' // download and extra test data epsg-dataset-v11.005.7z downloadTestData() bat '7z x epsg-dataset.7z' } enhancedPipeline.runStage('Build Source') { setFailureStageName() echo '==============================================' echo ' Build Source' echo '==============================================' bat '.\\build\\build.bat' } } catch (err) { echo '================ BUILD FAILURE ===============' echo "$err" echo '==============================================' currentBuild.result = 'FAILURE' } finally { echo '================ FINALLY ==================' } } def linuxBuild() { try { enhancedPipeline.runStage('Checkout Source Code') { setFailureStageName() echo '==============================================' echo ' Checkout Source Code' echo '==============================================' checkoutCode() } def helper = new IWHelper(this) helper.runInDockerWithAL2023() { enhancedPipeline.runStage('Prepare build environment') { setFailureStageName() echo '==============================================' echo ' Prepare build environment' echo '==============================================' // download and extra test data epsg-dataset-v11.005.7z downloadTestData() sh 'sudo dnf install p7zip -y' sh '7za x epsg-dataset.7z' // set locale to en_US.UTF-8 sh 'sudo dnf install -y glibc-langpack-en' sh 'gcc -v' } enhancedPipeline.runStage('Build Source') { setFailureStageName() echo '==============================================' echo ' Build Source' echo '==============================================' sh 'bash ./build/build.sh' } } } catch (err) { echo '================ BUILD FAILURE ===============' echo "$err" echo '==============================================' currentBuild.result = 'FAILURE' } finally { echo '================ FINALLY ==================' } } // Set failure stage name, so that recipients can know which build stage failed in email notification def setFailureStageName() { FailureStage = env.STAGE_NAME } def downloadTestData() { def commonArtifactory = new CommonArtifactory(steps, env, Artifactory, 'svc_aad_p_iwauto-art-bobcat') def downloadSpec = """{ "files": [ { "pattern": "team-infraworks-generic/csmap/test/${EPSGDatasetVer}", "target": "epsg-dataset.7z", "flat" : "true" } ] }""" commonArtifactory.download('https://art-bobcat.autodesk.com/artifactory/', downloadSpec, true) } def checkoutCode() { def scmInfo = checkout([ $class: 'GitSCM', branches: scm.branches, extensions: scm.extensions + [ [$class: 'CheckoutOption', timeout: 60], [$class: 'AuthorInChangelog'], [$class: 'GitLFSPull'], [$class: 'CleanBeforeCheckout'], [$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true] ], userRemoteConfigs: scm.userRemoteConfigs]) return scmInfo }