def buildPackageWithCPKG( String packageProfile = "debian", String packageArch = "", String packageBranch = "", String baseImage = "", String destDir = "./packages", Boolean forceRebuild = false ) { def builds = [] // Retrieve commit tags def commitTags = sh(script: 'git describe --exact-match --abbrev=0', returnStdout: true).split(' ') if (commitTags.length == 0) { error 'No build build tags on last commit' } // For each tags for (tag in commitTags) { // Split tag to retrieve context informations def tagParts = tag.split('/') def packageEnv = tagParts[1] def packageDistrib = tagParts[2] def packageVersion = tagParts[3] // Create .tamarinrc file def tamarinrc = """ project_version=${packageVersion} no_version_suffix=${ packageEnv == 'stable' || packageEnv == 'staging' ? 'yes' : 'no' } """.stripIndent() writeFile file: '.tamarinrc', text: tamarinrc sh "rm -rf ${destDir}/*" stage("Build ${packageEnv} package (version ${packageVersion}) for ${packageDistrib}") { def result = [:] result.put('tag', tag) result.put('env', packageEnv) result.put('version', packageVersion) result.put('distrib', packageDistrib) def packages = buildPackage(packageProfile, packageArch, baseImage, destDir, forceRebuild) result.put('packages', packages) builds << result } } return builds } def buildPackage( String packageProfile = "debian", String packageArch = "", String baseImage = "", String destDir = "./packages", Boolean forceRebuild = false ) { def tamarinImage def packages = [] stage("Create Tamarin environment") { tamarinImage = buildDockerImage() } stage("Run Tamarin") { def dockerArgs = """ -v /var/run/docker.sock:/var/run/docker.sock ${forceRebuild ? '-e TAMARIN_FORCE_REBUILD=1' : ''} ${packageArch ? '-e TAMARIN_PACKAGE_ARCH='+packageArch : ''} ${baseImage ? '-e TAMARIN_BASE_IMAGE='+baseImage : ''} ${packageProfile ? '-e TAMARIN_PROFILE='+packageProfile : ''} -e TAMARIN_DEST_DIR=${destDir} """.stripIndent() tamarinImage.inside(dockerArgs) { sh 'run-tamarin' } packages = sh(script: "find '${destDir}' -name '*.deb' -type f", returnStdout: true) .split('\n') .collect { return it.trim() } .findAll { it != '' } } return packages } def prepareEnvironment( String packageProfile = "debian", String baseImage = "" ) { def tamarinImage stage("Create Tamarin environment") { tamarinImage = buildDockerImage() } stage("Prepare Tamarin") { def dockerArgs = """ -v /var/run/docker.sock:/var/run/docker.sock ${baseImage ? '-e TAMARIN_BASE_IMAGE='+baseImage : ''} ${packageProfile ? '-e TAMARIN_PROFILE='+packageProfile : ''} -e TAMARIN_PREPARE_ONLY=true -e TAMARIN_FORCE_REBUILD=true """.stripIndent() tamarinImage.inside(dockerArgs) { sh 'run-tamarin' } } } def buildDockerImage() { dir ('.tamarin') { def dockerfile = libraryResource 'com/cadoles/tamarin/Dockerfile' writeFile file:'Dockerfile', text:dockerfile def runTamarinScript = libraryResource 'com/cadoles/tamarin/run-tamarin.sh' writeFile file:'run-tamarin.sh', text:runTamarinScript def safeJobName = URLDecoder.decode(env.JOB_NAME).toLowerCase().replace('/', '-').replace(' ', '-') def imageTag = "${safeJobName}-${env.BUILD_ID}" return docker.build("tamarin:${imageTag}", ".") } }