diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container index 5bcad8cf5f8714281f1a692bdf0c0af3961d1cb6..821d695d9d9afd5b97bc620856fef7ee8376aa6f 100644 --- a/ci-scripts/Jenkinsfile-GitLab-Container +++ b/ci-scripts/Jenkinsfile-GitLab-Container @@ -133,13 +133,15 @@ pipeline { post { always { script { - testBullet0 = finalizeSlaveJob('RAN-Ubuntu18-Image-Builder') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + ubuntuBuildStatus = finalizeSlaveJob('RAN-Ubuntu18-Image-Builder') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet0 + failingStages += ubuntuBuildStatus } } } @@ -153,13 +155,15 @@ pipeline { post { always { script { - testBullet1 = finalizeSlaveJob('RAN-RHEL8-Cluster-Image-Builder') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + rhelBuildStatus = finalizeSlaveJob('RAN-RHEL8-Cluster-Image-Builder') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet1 + failingStages += rhelBuildStatus } } } @@ -173,13 +177,15 @@ pipeline { post { always { script { - testBullet2 = finalizeSlaveJob('RAN-cppcheck') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + cppcheckStatus = finalizeSlaveJob('RAN-cppcheck') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet2 + failingStages += cppcheckStatus } } } @@ -193,13 +199,15 @@ pipeline { post { always { script { - testBullet = finalizeSlaveJob('RAN-ARM-Cross-Compile-Builder') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + armBuildStatus = finalizeSlaveJob('RAN-ARM-Cross-Compile-Builder') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet + failingStages += armBuildStatus } } } @@ -219,13 +227,15 @@ pipeline { post { always { script { - testBullet3 = finalizeSlaveJob('RAN-PhySim-Cluster') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + physimStatus = finalizeSlaveJob('RAN-PhySim-Cluster') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet3 + failingStages += physimStatus } } } @@ -240,13 +250,15 @@ pipeline { post { always { script { - testBullet4 = finalizeSlaveJob('RAN-RF-Sim-Test-4G') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + rfSim4GStatus = finalizeSlaveJob('RAN-RF-Sim-Test-4G') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet4 + failingStages += rfSim4GStatus } } } @@ -261,13 +273,15 @@ pipeline { post { always { script { - testBullet5 = finalizeSlaveJob('RAN-RF-Sim-Test-5G') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + rfSim5GStatus = finalizeSlaveJob('RAN-RF-Sim-Test-5G') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet5 + failingStages += rfSim5GStatus } } } @@ -282,13 +296,15 @@ pipeline { post { always { script { - testBullet6 = finalizeSlaveJob('RAN-L2-Sim-Test-4G') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + l2Sim4GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-4G') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet6 + failingStages += l2Sim4GStatus } } } @@ -303,13 +319,15 @@ pipeline { post { always { script { - testBullet7 = finalizeSlaveJob('RAN-L2-Sim-Test-5G') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + l2Sim5GStatus = finalizeSlaveJob('RAN-L2-Sim-Test-5G') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet7 + failingStages += l2Sim5GStatus } } } @@ -324,13 +342,15 @@ pipeline { post { always { script { - testBullet8 = finalizeSlaveJob('RAN-LTE-FDD-LTEBOX-Container') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + lteTDDB200Status = finalizeSlaveJob('RAN-LTE-FDD-LTEBOX-Container') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet8 + failingStages += lteTDDB200Status } } } @@ -346,13 +366,15 @@ pipeline { post { always { script { - testBullet9 = finalizeSlaveJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + lteFDDB200OAIUEStatus = finalizeSlaveJob('RAN-LTE-FDD-OAIUE-OAICN4G-Container') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet9 + failingStages += lteFDDB200OAIUEStatus } } } @@ -367,13 +389,15 @@ pipeline { post { always { script { - testBullet10 = finalizeSlaveJob('RAN-LTE-TDD-LTEBOX-Container') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + lteFDDB200Status = finalizeSlaveJob('RAN-LTE-TDD-LTEBOX-Container') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet10 + failingStages += lteFDDB200Status } } } @@ -388,13 +412,15 @@ pipeline { post { always { script { - testBullet11 = finalizeSlaveJob('RAN-NSA-B200-Module-LTEBOX-Container') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + nsaTDDB200Status = finalizeSlaveJob('RAN-NSA-B200-Module-LTEBOX-Container') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet11 + failingStages += nsaTDDB200Status } } } @@ -409,13 +435,15 @@ pipeline { post { always { script { - testBullet12 = finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + saTDDB200Status = finalizeSlaveJob('RAN-SA-B200-Module-SABOX-Container') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet12 + failingStages += saTDDB200Status } } } @@ -430,13 +458,15 @@ pipeline { post { always { script { - testBullet13 = finalizeSlaveJob('RAN-gNB-N300-Timing-Phytest-LDPC') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + phytestLDPCoffloadStatus = finalizeSlaveJob('RAN-gNB-N300-Timing-Phytest-LDPC') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet13 + failingStages += phytestLDPCoffloadStatus } } } @@ -451,13 +481,15 @@ pipeline { post { always { script { - testBullet14 = finalizeSlaveJob('RAN-LTE-TDD-2x2-Container') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + lteTDD2x2N3xxStatus = finalizeSlaveJob('RAN-LTE-TDD-2x2-Container') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet14 + failingStages += lteTDD2x2N3xxStatus } } } @@ -472,13 +504,15 @@ pipeline { post { always { script { - testBullet15 = finalizeSlaveJob('RAN-SA-AW2S-CN5G') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + saAW2SStatus = finalizeSlaveJob('RAN-SA-AW2S-CN5G') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet15 + failingStages += saAW2SStatus } } } @@ -493,13 +527,15 @@ pipeline { post { always { script { - testBullet16 = finalizeSlaveJob('RAN-Interop-F1') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + f1InteropStatus = finalizeSlaveJob('RAN-Interop-F1') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet16 + failingStages += f1InteropStatus } } } @@ -514,13 +550,15 @@ pipeline { post { always { script { - testBullet17 = finalizeSlaveJob('OAI-CN5G-COTS-UE-Test') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + cn5gCOTSUESanityCheck = finalizeSlaveJob('OAI-CN5G-COTS-UE-Test') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet17 + failingStages += cn5gCOTSUESanityCheck } } } @@ -535,13 +573,15 @@ pipeline { post { always { script { - testBullet18 = finalizeSlaveJob('RAN-SA-OAIUE-CN5G') + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + saOAIUEStatus = finalizeSlaveJob('RAN-SA-OAIUE-CN5G') } } failure { script { currentBuild.result = 'FAILURE' - failingStages += testBullet18 + failingStages += saOAIUEStatus } } } @@ -688,30 +728,30 @@ def triggerSlaveJobNoGitLab (jobName) { } def finalizeSlaveJob(jobName) { - lock (lockForMessage) { - // In case of any non-success, we are retrieving the HTML report of the last completed - // slave job. The only drop-back is that we may retrieve the HTML report of a previous build - if (jobName == 'OAI-CN5G-COTS-UE-Test') { - fileName = "test_results_oai_cn5g_cots_ue.html" - } else { - fileName = "test_results-${jobName}.html" - } - artifactUrl = BUILD_URL - if (!fileExists(fileName)) { - copyArtifacts(projectName: jobName, - filter: 'test_results*.html', - selector: lastCompleted()) - if (fileExists(fileName)) { - sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' ${fileName}" - archiveArtifacts artifacts: fileName - // BUILD_URL is like http://server:port/jenkins/job/foo/15/ - // no need to add a prefixed '/' - artifactUrl += 'artifact/' + fileName + lock (lockForMessage) { + // In case of any non-success, we are retrieving the HTML report of the last completed + // slave job. The only drop-back is that we may retrieve the HTML report of a previous build + if (jobName == 'OAI-CN5G-COTS-UE-Test') { + fileName = "test_results_oai_cn5g_cots_ue.html" + } else { + fileName = "test_results-${jobName}.html" + } + artifactUrl = BUILD_URL + if (!fileExists(fileName)) { + copyArtifacts(projectName: jobName, + filter: 'test_results*.html', + selector: lastCompleted()) + if (fileExists(fileName)) { + sh "sed -i -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' ${fileName}" + archiveArtifacts artifacts: fileName + // BUILD_URL is like http://server:port/jenkins/job/foo/15/ + // no need to add a prefixed '/' + artifactUrl += 'artifact/' + fileName + } } + artifactUrl = "\n * [${jobName}](${artifactUrl})" + return artifactUrl } - artifactUrl = "\n * [${jobName}](${artifactUrl})" - return artifactUrl - } } // Abstraction function to send social media messages: