CI: Remove redundant Jenkinsfiles
All the removed files can be replaced by Jenkinsfile introduced in !3738
This commit is contained in:
@@ -1,228 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Location of the executor node
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
// Name of the resource
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess = false
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
def directoryExistsGlob(fileNameWithGlob) {
|
|
||||||
/* if multiple directories match, will join their names and call fileExists() on that */
|
|
||||||
def dir = sh returnStdout: true, script: 'find . -name \'' + fileNameWithGlob + '\' -type d'
|
|
||||||
dir = dir.replaceAll("\n", "").trim()
|
|
||||||
echo "matching '" + fileNameWithGlob + "' found: '" + dir + "'"
|
|
||||||
if (dir == "")
|
|
||||||
return false
|
|
||||||
return fileExists(dir)
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------
|
|
||||||
// Pipeline start
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label pythonExecutor
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
timestamps()
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Verify Parameters') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
|
|
||||||
JOB_TIMESTAMP = sh returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"'
|
|
||||||
JOB_TIMESTAMP = JOB_TIMESTAMP.trim()
|
|
||||||
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
echo "no eNB_SourceCodePath given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest != null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "no eNB_mergeRequest given - not merging develop"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.OC_Credentials == null) {
|
|
||||||
echo "no OC_Credentials given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.OC_ProjectName == null) {
|
|
||||||
echo "no OC_ProjectName given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
echo "no pythonTestXmlFile given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Some parameters are missing"
|
|
||||||
sh "./ci-scripts/fail.sh"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ("Deploy and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Log Collection") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
if (directoryExistsGlob("build_log_*")) {
|
|
||||||
sh "zip -r -qq build_log_${env.BUILD_ID}.zip build_log_*/*"
|
|
||||||
sh "rm -rf build_log_*/"
|
|
||||||
archiveArtifacts artifacts: "build_log_${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if (directoryExistsGlob("test_log_*")) {
|
|
||||||
sh "zip -r -qq test_log_${env.BUILD_ID}.zip test_log_*/*"
|
|
||||||
sh "rm -rf test_log_*/"
|
|
||||||
archiveArtifacts artifacts: "test_log_${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if (fileExists("test_results.html")) {
|
|
||||||
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts artifacts: "test_results-${env.JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,223 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Location of the executor node
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
// Name of the resource
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess = false
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
// Flags
|
|
||||||
def scmEvent = false
|
|
||||||
def upstreamEvent = false
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------
|
|
||||||
// Pipeline start
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label pythonExecutor
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
timestamps()
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Verify Parameters') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
|
|
||||||
JOB_TIMESTAMP = sh returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"'
|
|
||||||
JOB_TIMESTAMP = JOB_TIMESTAMP.trim()
|
|
||||||
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest != null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.OC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.OC_ProjectName == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Some parameters are missing"
|
|
||||||
sh "./ci-scripts/fail.sh"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ("Deploy and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
// If not present picking a default XML file
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
// picking default
|
|
||||||
testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
|
|
||||||
echo "Test XML file(default): ${testXMLFile}"
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
|
|
||||||
} else {
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Log Collection") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
// Zipping all archived log files
|
|
||||||
sh "mkdir test_logs"
|
|
||||||
sh "mv *.log* test_logs || true"
|
|
||||||
// Zip all log files matching cmake_targets/{*.log*,log/*} into test_logs_XXXX.zip
|
|
||||||
if (fileExists('../cmake_targets/log')) {
|
|
||||||
sh "mv ../cmake_targets/log/* test_logs || true"
|
|
||||||
}
|
|
||||||
sh "zip -r -qq test_logs_${env.BUILD_ID}.zip *test_log*/"
|
|
||||||
sh "rm -rf *test_log*/"
|
|
||||||
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if (fileExists("test_results.html")) {
|
|
||||||
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts artifacts: "test_results-${env.JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,224 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Location of the executor node
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
// Name of the resource
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess = false
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
// Flags
|
|
||||||
def scmEvent = false
|
|
||||||
def upstreamEvent = false
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------
|
|
||||||
// Pipeline start
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label pythonExecutor
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
timestamps()
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ('Verify Parameters') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
|
|
||||||
JOB_TIMESTAMP = sh returnStdout: true, script: 'date --utc --rfc-3339=seconds | sed -e "s#+00:00##"'
|
|
||||||
JOB_TIMESTAMP = JOB_TIMESTAMP.trim()
|
|
||||||
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest != null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.OC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.OC_ProjectName == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Some parameters are missing"
|
|
||||||
sh "./ci-scripts/fail.sh"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage ("Deploy and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
// If not present picking a default XML file
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
// picking default
|
|
||||||
testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
|
|
||||||
echo "Test XML file(default): ${testXMLFile}"
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
|
|
||||||
} else {
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Log Collection") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
// Zipping all archived log files
|
|
||||||
sh "mkdir test_logs"
|
|
||||||
sh "mv *.log* test_logs || true"
|
|
||||||
// Zip all log files matching cmake_targets/{*.log*,log/*} into test_logs_XXXX.zip
|
|
||||||
if (fileExists('../cmake_targets/log')) {
|
|
||||||
sh "mv ../cmake_targets/log/* test_logs || true"
|
|
||||||
}
|
|
||||||
sh "zip -r -qq test_logs_${env.BUILD_ID}.zip *test_log*/"
|
|
||||||
sh "rm -rf *test_log*/"
|
|
||||||
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if (fileExists("test_results.html")) {
|
|
||||||
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts artifacts: "test_results-${env.JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,250 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
|
|
||||||
|
|
||||||
// Location of the python executor node shall be in the same subnet as the others servers
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Terminate Status
|
|
||||||
def termENB = 0
|
|
||||||
def termStatusArray = new Boolean[termENB + 1]
|
|
||||||
termStatusArray[termENB] = false
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess = false
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
def doEpcLogCollection = true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label pythonExecutor
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Verify Parameters") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest != null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
currentBuild.result = 'ABORTED'
|
|
||||||
error('Stopping early because some parameters are missing')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Build and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
// If not present picking a default XML file
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
// picking default
|
|
||||||
testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
|
|
||||||
echo "Test XML file(default): ${testXMLFile}"
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
|
|
||||||
} else {
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Terminate") {
|
|
||||||
parallel {
|
|
||||||
stage('Terminate eNB') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB"
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
success {
|
|
||||||
script {
|
|
||||||
termStatusArray[termENB] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection') {
|
|
||||||
parallel {
|
|
||||||
stage('Log Collection (eNB - Run)') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
|
|
||||||
|
|
||||||
script {
|
|
||||||
if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("ci-scripts/test_results.html")) {
|
|
||||||
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts "test_results-${JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
if (params.pipelineZipsConsoleLog != null) {
|
|
||||||
if (params.pipelineZipsConsoleLog) {
|
|
||||||
echo "Archiving Jenkins console log"
|
|
||||||
sh "wget --no-check-certificate --no-proxy ${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_ID}/consoleText -O consoleText.log || true"
|
|
||||||
sh "zip -m consoleText.log.${env.BUILD_ID}.zip consoleText.log || true"
|
|
||||||
if(fileExists("consoleText.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "consoleText.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Making sure that we really shutdown every thing before leaving
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
if (!termStatusArray[termENB]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,225 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
|
|
||||||
|
|
||||||
// Location of the python executor node shall be in the same subnet as the others servers
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess = false
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label pythonExecutor
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Verify Parameters") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest != null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Some parameters are missing"
|
|
||||||
sh "./ci-scripts/fail.sh"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Build and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
// If not present picking a default XML file
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
// picking default
|
|
||||||
testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
|
|
||||||
echo "Test XML file(default): ${testXMLFile}"
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
|
|
||||||
} else {
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Terminate") {
|
|
||||||
parallel {
|
|
||||||
stage('Terminate eNB') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection') {
|
|
||||||
parallel {
|
|
||||||
stage('Log Collection (eNB - Run)') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
|
|
||||||
|
|
||||||
script {
|
|
||||||
if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("ci-scripts/test_results.html")) {
|
|
||||||
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts "test_results-${JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
if (params.pipelineZipsConsoleLog != null) {
|
|
||||||
if (params.pipelineZipsConsoleLog) {
|
|
||||||
echo "Archiving Jenkins console log"
|
|
||||||
sh "wget --no-check-certificate --no-proxy ${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_ID}/consoleText -O consoleText.log || true"
|
|
||||||
sh "zip -m consoleText.log.${env.BUILD_ID}.zip consoleText.log || true"
|
|
||||||
if(fileExists("consoleText.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "consoleText.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,216 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
|
|
||||||
|
|
||||||
// Location of the python executor node shall be in the same subnet as the others servers
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
//Status fed to the database
|
|
||||||
def StatusForDb = ""
|
|
||||||
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {label pythonExecutor}
|
|
||||||
options {
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Verify Parameters") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest!= null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Some parameters are missing"
|
|
||||||
sh "./ci-scripts/fail.sh"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Build and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
// If not present picking a default XML file
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
// picking default
|
|
||||||
testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
|
|
||||||
echo "Test XML file(default): ${testXMLFile}"
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
|
|
||||||
} else {
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection') {
|
|
||||||
parallel {
|
|
||||||
stage('Log Collection (eNB - Run)') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
|
|
||||||
script {
|
|
||||||
if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
if(fileExists("ci-scripts/test_results.html")) {
|
|
||||||
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts "test_results-${JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
if (params.pipelineZipsConsoleLog != null) {
|
|
||||||
if (params.pipelineZipsConsoleLog) {
|
|
||||||
echo "Archiving Jenkins console log"
|
|
||||||
sh "wget --no-check-certificate --no-proxy ${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_ID}/consoleText -O consoleText.log || true"
|
|
||||||
sh "zip -m consoleText.log.${env.BUILD_ID}.zip consoleText.log || true"
|
|
||||||
if(fileExists("consoleText.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "consoleText.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,260 +0,0 @@
|
|||||||
#!/bin/groovy
|
|
||||||
/*
|
|
||||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
|
||||||
* this work for additional information regarding copyright ownership.
|
|
||||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
|
||||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
|
||||||
* except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.openairinterface.org/?page_id=698
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*-------------------------------------------------------------------------------
|
|
||||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
|
||||||
* contact@openairinterface.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Template Jenkins Declarative Pipeline script to run Test w/ RF HW
|
|
||||||
|
|
||||||
// Location of the python executor node shall be in the same subnet as the others servers
|
|
||||||
def pythonExecutor = params.pythonExecutor
|
|
||||||
|
|
||||||
// Location of the test XML file to be run
|
|
||||||
def testXMLFile = params.pythonTestXmlFile
|
|
||||||
def mainPythonAllXmlFiles = ""
|
|
||||||
def buildStageStatus = true
|
|
||||||
|
|
||||||
// Name of the test stage
|
|
||||||
def testStageName = params.pipelineTestStageName
|
|
||||||
|
|
||||||
def lockResources = []
|
|
||||||
if (params.LockResources != null && params.LockResources.trim().length() > 0)
|
|
||||||
params.LockResources.trim().split(",").each{lockResources += [resource: it.trim()]}
|
|
||||||
|
|
||||||
// Terminate Status
|
|
||||||
def termUE = 0
|
|
||||||
def termENB = 1
|
|
||||||
def termSPGW = 2
|
|
||||||
def termMME = 3
|
|
||||||
def termHSS = 4
|
|
||||||
def termStatusArray = new Boolean[termHSS + 1]
|
|
||||||
termStatusArray[termUE] = false
|
|
||||||
termStatusArray[termENB] = false
|
|
||||||
termStatusArray[termSPGW] = false
|
|
||||||
termStatusArray[termMME] = false
|
|
||||||
termStatusArray[termHSS] = false
|
|
||||||
|
|
||||||
// Global Parameters. Normally they should be populated when the master job
|
|
||||||
// triggers the slave job with parameters
|
|
||||||
def eNB_Repository
|
|
||||||
def eNB_Branch
|
|
||||||
def eNB_CommitID
|
|
||||||
def eNB_AllowMergeRequestProcess = false
|
|
||||||
def eNB_TargetBranch
|
|
||||||
|
|
||||||
def flexricOption = ""
|
|
||||||
|
|
||||||
pipeline {
|
|
||||||
agent {
|
|
||||||
label pythonExecutor
|
|
||||||
}
|
|
||||||
options {
|
|
||||||
ansiColor('xterm')
|
|
||||||
lock(extra: lockResources)
|
|
||||||
}
|
|
||||||
stages {
|
|
||||||
stage("Build Init") {
|
|
||||||
steps {
|
|
||||||
// update the build name and description
|
|
||||||
buildName "${params.eNB_MR}"
|
|
||||||
buildDescription "Branch : ${params.eNB_Branch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Verify Parameters") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
|
|
||||||
def allParametersPresent = true
|
|
||||||
|
|
||||||
// It is already to late to check it
|
|
||||||
if (params.pythonExecutor != null) {
|
|
||||||
echo "eNB CI executor node : ${pythonExecutor}"
|
|
||||||
}
|
|
||||||
// If not present picking a default Stage Name
|
|
||||||
if (params.pipelineTestStageName == null) {
|
|
||||||
// picking default
|
|
||||||
testStageName = 'Template Test Stage'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.LockResources == null) {
|
|
||||||
echo "no LockResources given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.eNB_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
// the following 4 parameters should be pushed by the master trigger
|
|
||||||
// if not present, take the job GIT variables (used for developing)
|
|
||||||
if (params.eNB_Repository == null) {
|
|
||||||
eNB_Repository = env.GIT_URL
|
|
||||||
} else {
|
|
||||||
eNB_Repository = params.eNB_Repository
|
|
||||||
}
|
|
||||||
echo "eNB_Repository : ${eNB_Repository}"
|
|
||||||
if (params.eNB_Branch == null) {
|
|
||||||
eNB_Branch = env.GIT_BRANCH
|
|
||||||
} else {
|
|
||||||
eNB_Branch = params.eNB_Branch
|
|
||||||
}
|
|
||||||
echo "eNB_Branch : ${eNB_Branch}"
|
|
||||||
if (params.eNB_CommitID == null) {
|
|
||||||
eNB_CommitID = env.GIT_COMMIT
|
|
||||||
} else {
|
|
||||||
eNB_CommitID = params.eNB_CommitID
|
|
||||||
}
|
|
||||||
echo "eNB_CommitID : ${eNB_CommitID}"
|
|
||||||
if (params.eNB_mergeRequest != null) {
|
|
||||||
eNB_AllowMergeRequestProcess = params.eNB_mergeRequest
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
if (params.eNB_TargetBranch != null) {
|
|
||||||
eNB_TargetBranch = params.eNB_TargetBranch
|
|
||||||
} else {
|
|
||||||
eNB_TargetBranch = 'develop'
|
|
||||||
}
|
|
||||||
echo "eNB_TargetBranch : ${eNB_TargetBranch}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.Flexric_Tag != null) {
|
|
||||||
echo "This pipeline is configured to run with a FlexRIC deployment."
|
|
||||||
echo "Appending FlexRicTag option to the list of options"
|
|
||||||
flexricOption = "--FlexRicTag=${params.Flexric_Tag}"
|
|
||||||
echo "Using new Flexric option: ${flexricOption}"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
|
||||||
echo "All parameters are present"
|
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest"
|
|
||||||
} else if (eNB_CommitID != 'develop') {
|
|
||||||
sh "git fetch"
|
|
||||||
sh "git checkout -f ${eNB_CommitID}"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
error "Some parameters are missing"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Build and Test") {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
dir ('ci-scripts') {
|
|
||||||
echo "\u2705 \u001B[32m${testStageName}\u001B[0m"
|
|
||||||
// If not present picking a default XML file
|
|
||||||
if (params.pythonTestXmlFile == null) {
|
|
||||||
// picking default
|
|
||||||
testXMLFile = 'xml_files/enb_usrpB210_band7_50PRB.xml'
|
|
||||||
echo "Test XML file(default): ${testXMLFile}"
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
|
|
||||||
} else {
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
|
|
||||||
echo "Test XML file : ${xmlFile}"
|
|
||||||
} else {
|
|
||||||
echo "Test XML file ${xmlFile}: no such file"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} ${mainPythonAllXmlFiles}"
|
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
|
||||||
for (xmlFile in myXmlTestSuite) {
|
|
||||||
if (fileExists(xmlFile)) {
|
|
||||||
try {
|
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}"
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
currentBuild.result = 'FAILURE'
|
|
||||||
buildStageStatus = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage ("Terminate") {
|
|
||||||
parallel {
|
|
||||||
stage('Terminate eNB') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate eNB\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB"
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
success {
|
|
||||||
script {
|
|
||||||
termStatusArray[termENB] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection') {
|
|
||||||
parallel {
|
|
||||||
stage('Log Collection (eNB - Run)') {
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}"
|
|
||||||
script {
|
|
||||||
if(fileExists("enb.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "enb.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("ci-scripts/test_results.html")) {
|
|
||||||
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
|
||||||
archiveArtifacts "test_results-${JOB_NAME}.html"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
post {
|
|
||||||
always {
|
|
||||||
script {
|
|
||||||
if (params.pipelineZipsConsoleLog != null) {
|
|
||||||
if (params.pipelineZipsConsoleLog) {
|
|
||||||
echo "Archiving Jenkins console log"
|
|
||||||
sh "wget --no-check-certificate --no-proxy ${env.JENKINS_URL}/job/${env.JOB_NAME}/${env.BUILD_ID}/consoleText -O consoleText.log || true"
|
|
||||||
sh "zip -m consoleText.log.${env.BUILD_ID}.zip consoleText.log || true"
|
|
||||||
if(fileExists("consoleText.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "consoleText.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Making sure that we really shutdown every thing before leaving
|
|
||||||
failure {
|
|
||||||
script {
|
|
||||||
if (!termStatusArray[termENB]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user