// Licensed to the University Corporation for Advanced Internet Development, // Inc. (UCAID) under one or more contributor license agreements. See the // NOTICE file distributed with this work for additional information regarding // copyright ownership. The UCAID licenses this file to You under the Apache // License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 // // 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. // node('windows') { stage 'Checkout' checkout scm stage 'Acquire util files' powershell(returnStatus: true, script: 'New-Item -ItemType directory -Path ./tmp') powershell(returnStatus: true, script: 'Remove-Item ./bin -Force -Recurse') dir('tmp'){ git([ url: "https://github.internet2.edu/docker/util.git", credentialsId: "jenkins-github-access-token" ]) powershell(returnStatus: true, script: 'Move-Item -Path ./bin/ -Destination ../bin/') } powershell(returnStatus: true, script: 'Remove-Item ./tmp -Force -Recurse') stage 'Setting build context' def maintainer = maintainer() def imagename = imagename() def tag // Tag images created on master branch with 'latest' if(env.BRANCH_NAME == "master"){ tag = "latest" }else{ tag = env.BRANCH_NAME } if(!imagename){ echo "You must define an imagename in common.cmd" currentBuild.result = 'FAILURE' } if(maintainer){ echo "Building ${imagename}:${tag} for ${maintainer}" } stage 'Build' try{ powershell(returnStatus: true, script: '& ./bin/windows/rebuild.ps1 > ./debug') } catch(error) { def error_details = readFile('./debug'); def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}" powershell(returnStatus: true, script: 'Remove-Item -Force ./debug') currentBuild.result = 'FAILURE' handleError(message) } /*def status = powershell(returnStatus: true, script: '& ./bin/windows/rebuild.ps1 > ./debug') if (status == 0) { echo "build success" } else { def error_details = readFile('./debug'); def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}" handleError(message) powershell(returnStatus: true, script: 'Remove-Item -Force ./debug') }*/ /* stage 'Test' try{ powershell(returnStatus: true, script: '& ./tests/runtests.ps1 > ./debug') } catch(error) { def error_details = readFile('./debug'); def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}" powershell(returnStatus: true, script: 'Remove-Item -Force ./debug') currentBuild.result = 'FAILURE' handleError(message) }*/ stage 'Push' docker.withRegistry('https://registry.hub.docker.com/', "dockerhub-$maintainer") { def baseImg = docker.build("$maintainer/$imagename") baseImg.push("$tag") } stage 'Notify' slackSend color: 'good', message: "$maintainer/$imagename:$tag pushed to DockerHub" } def maintainer() { def matcher = readFile('common.cmd') =~ 'maintainer="(.+)"' matcher ? matcher[0][1] : 'tier' } def imagename() { def matcher = readFile('common.cmd') =~ 'imagename="(.+)"' matcher ? matcher[0][1] : null } def handleError(String message){ echo "${message}" currentBuild.setResult("FAILED") slackSend color: 'danger', message: "${message}" bat exit 1 }