import groovy.io.FileType @NonCPS def getTargets(){ targetList = [] dirList = new File(pwd()+'/manifest_repo/.repo/manifests/') dirList.eachFile { file -> if (file.directory && file.name!='.git' && file.name!='common'){targetList.add file.name}} return targetList } def targetBuild(trg){ { target=trg-> node{ //sh 'mkdir ${trg}' dir (trg){ unstash 'eltf_scripts' checkout([$class: 'RepoScm', currentBranch: true, manifestBranch: '$BRANCH_NAME', manifestFile: trg+'default.xml', //The hardcoded repository should be replaced by a generic name, eg. $GIT_PATH+el_manifests-$PROFILE manifestRepositoryUrl: 'http://git.enea.se/cgit/various/el_manifests-standard.git', quiet: true, showAllChanges: true, trace: true]) checkout([$class: 'GitSCM', branches: [[name: '$BRANCH_NAME']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'poky/'], [$class: 'AuthorInChangelog']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'a797f854-983e-473e-b221-6d8ebafda16a', url: 'git@git.enea.se:linux/meta-enea-test.git']]]) } } } } /* Defining the first stage of the pipeline. This stage prepares the workspace and the build environment, clones ELTF scripts and stashes them in order to be used on all distrubuted nodes. This stage is also determining needed information like the targets to be built/tested. */ stage 'Environment Setup' node { // Delete workspace content before running any step deleteDir() // Freeze manifest files before running builds print "To add a job to freeze the manifest repositories" // Clone eltf/scripts.git repository checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory',relativeTargetDir: 'eltf_scripts']], submoduleCfg: [], userRemoteConfigs: [[url: 'git@git.enea.se:eltf/scripts.git']]]) // Stash the ELTF scripts in order to be used on other nodes stash includes: 'eltf_scripts/*', name: 'eltf_scripts', useDefaultExcludes: false // Clone manifest repository in order to determine target list checkout([$class: 'RepoScm', currentBranch: true, destinationDir: 'manifest_repo', manifestBranch: 'master', manifestRepositoryUrl: 'http://git.enea.se/cgit/various/el_manifests-standard.git', showAllChanges: true, trace: true]) // Parse directory structure in order to determine the target list targetList = getTargets() for (item in targetList) {print item} print 'Finished stage Environment Setup' } stage 'Build' // Create the build map which defines the build threads def buildMap = [:] for (item in targetList){ def id = item+'_build' buildMap[id] = targetBuild(item) } parallel buildMap node { print 'Finished stage Build' } stage 'Test' node { print 'Finished stage Test' } stage 'Document' node { print 'Finished stage Document' } stage 'Build Documentation' node { print 'Finished stage Build Documentation' } stage 'Build Release Candidate' node { print 'Finished stage Build RC' } stage 'Publish Release Candidate' node { print 'Finished stage Publish RC' } stage 'Publish official Release' node { print 'Finished stage Publish Release' }