From 86a37872ae5e82200b55f06f4d578f69412a07f9 Mon Sep 17 00:00:00 2001 From: Paul Caskey Date: Wed, 21 Nov 2018 19:23:41 -0600 Subject: [PATCH] Create Jenkinsfile --- Jenkinsfile | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..0428b1d --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,117 @@ +// 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 +}