helper.groovy 31.82 KiB
/***********************************************************************************************************************
steps is used from buildTestDeploy
***********************************************************************************************************************/
ArrayList<String> BUILD_PLAN = []
String BRANCH_UNDER_TEST = ""
def DEPENDENCY_BUILD_NUMBERS = [:]
/**********************************************************************************************************************/
def setParameters() {
properties([
parameters([
string(name: 'BRANCH_UNDER_TEST', description: 'LEAVE AT DEFAULT! Jenkins project name for the branch to be tested', defaultValue: JOB_NAME),
string(name: 'BUILD_PLAN', description: 'LEAVE AT DEFAULT! JSON object with list of downstream projects to build', defaultValue: '[]'),
string(name: 'DEPENDENCY_BUILD_NUMBERS', description: 'LEAVE AT DEFAULT! JSON object with map of dependency build numbers to use', defaultValue: '{}'),
])
])
BRANCH_UNDER_TEST = params.BRANCH_UNDER_TEST
BUILD_PLAN = readJSON(text: params.BUILD_PLAN) // new groovy.json.JsonSlurper().parseText(params.BUILD_PLAN)
DEPENDENCY_BUILD_NUMBERS = readJSON(text: params.DEPENDENCY_BUILD_NUMBERS) // new groovy.json.JsonSlurper().parseText(params.DEPENDENCY_BUILD_NUMBERS)
}
/**********************************************************************************************************************/
// helper function, convert dependency name as listed in the .jenkinsfile into a Jenkins project name
def dependencyToJenkinsProject(String dependency, boolean forceBranches = false) {
if(dependency.contains('@')) {
// get rid of build number if specified
dependency = dependency.split('@')[0]
}
def dependencyProjectName = dependency
def (dependencyFolder, dependencyProject) = dependencyProjectName.split('/',2)
dependencyProject = dependencyProject.replace('/','%2F')
dependency = "${dependencyFolder}/${dependencyProject}"
def jobType = env.JOB_TYPE
jobType = jobType?.minus("-testing")
jobType = jobType?.minus("-analysis")
branch = "master"
def dependencyUnderTest = jekinsProjectToDependency(BRANCH_UNDER_TEST)
// Note: BUILD_PLAN.indexOf(dependency) does not deliver same result as BUILD_PLAN.findIndexOf{ it == dependency }!
if(env.JOB_TYPE.startsWith('branches')) {
if( forceBranches || (BUILD_PLAN.findIndexOf{ it == dependency } >= 0 && BRANCH_UNDER_TEST != JOB_NAME) ||
dependencyUnderTest == dependency ) {
def (butFolder, butType, butProject, butBranch) = BRANCH_UNDER_TEST.split('/')
if(butFolder == dependencyFolder && butType == jobType && butProject == dependencyProject) {
branch = butBranch
echo("Dependency ${dependency} matches branch under test.")
}
}
else {
jobType = "fasttrack"
}
}
dependencyProjectName = "${dependencyFolder}/${jobType}/${dependencyProject}/${branch}"
return dependencyProjectName
}
/**********************************************************************************************************************/
// helper function, convert Jenkins project name into name dependency (as listed e.g. in the .jenkinsfile)