Skip to content
Permalink
Newer
Older
100644 117 lines (95 sloc) 3.82 KB
November 20, 2018 16:32
1
// Licensed to the University Corporation for Advanced Internet Development,
2
// Inc. (UCAID) under one or more contributor license agreements. See the
3
// NOTICE file distributed with this work for additional information regarding
4
// copyright ownership. The UCAID licenses this file to You under the Apache
5
// License, Version 2.0 (the "License"); you may not use this file except in
6
// compliance with the License. You may obtain a copy of the License at
7
//
8
// http://www.apache.org/licenses/LICENSE-2.0
9
//
10
// Unless required by applicable law or agreed to in writing, software
11
//distributed under the License is distributed on an "AS IS" BASIS,
12
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
// See the License for the specific language governing permissions and
14
// limitations under the License.
15
//
16
node('windows') {
17
18
stage 'Checkout'
19
20
checkout scm
21
November 21, 2018 17:12
22
stage 'Acquire util files'
November 20, 2018 16:32
23
November 21, 2018 17:12
24
powershell(returnStatus: true, script: 'New-Item -ItemType directory -Path ./tmp')
November 21, 2018 17:23
25
powershell(returnStatus: true, script: 'Remove-Item ./bin -Force -Recurse')
November 20, 2018 16:32
26
dir('tmp'){
27
git([ url: "https://github.internet2.edu/docker/util.git",
28
credentialsId: "jenkins-github-access-token" ])
November 21, 2018 19:38
29
powershell(returnStatus: true, script: 'Move-Item -Path ./bin/ -Destination ../bin/')
November 20, 2018 16:32
30
}
November 21, 2018 17:12
31
powershell(returnStatus: true, script: 'Remove-Item ./tmp -Force -Recurse')
32
November 20, 2018 16:32
33
34
stage 'Setting build context'
35
36
def maintainer = maintainer()
37
def imagename = imagename()
38
def tag
39
40
// Tag images created on master branch with 'latest'
41
if(env.BRANCH_NAME == "master"){
42
tag = "latest"
43
}else{
44
tag = env.BRANCH_NAME
45
}
46
47
if(!imagename){
48
echo "You must define an imagename in common.cmd"
49
currentBuild.result = 'FAILURE'
50
}
51
if(maintainer){
52
echo "Building ${imagename}:${tag} for ${maintainer}"
53
}
54
55
stage 'Build'
56
November 21, 2018 19:10
57
try{
58
powershell(returnStatus: true, script: '& ./bin/windows/rebuild.ps1 > ./debug')
59
} catch(error) {
60
def error_details = readFile('./debug');
61
def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
62
powershell(returnStatus: true, script: 'Remove-Item -Force ./debug')
November 21, 2018 19:13
63
currentBuild.result = 'FAILURE'
November 21, 2018 19:10
64
handleError(message)
65
}
66
/*def status = powershell(returnStatus: true, script: '& ./bin/windows/rebuild.ps1 > ./debug')
November 21, 2018 14:44
67
if (status == 0) {
68
echo "build success"
69
} else {
70
def error_details = readFile('./debug');
71
def message = "BUILD ERROR: There was a problem building ${imagename}:${tag}. \n\n ${error_details}"
72
handleError(message)
73
powershell(returnStatus: true, script: 'Remove-Item -Force ./debug')
November 21, 2018 19:10
74
}*/
November 20, 2018 16:32
75
November 21, 2018 21:15
76
stage 'Test'
77
78
try{
79
powershell(returnStatus: true, script: '& ./tests/runtests.ps1 > ./debug')
80
} catch(error) {
81
def error_details = readFile('./debug');
82
def message = "BUILD ERROR: There was a problem testing ${imagename}:${tag}. \n\n ${error_details}"
83
powershell(returnStatus: true, script: 'Remove-Item -Force ./debug')
84
currentBuild.result = 'FAILURE'
85
handleError(message)
86
}
November 20, 2018 16:32
87
88
89
stage 'Push'
90
91
docker.withRegistry('https://registry.hub.docker.com/', "dockerhub-$maintainer") {
92
def baseImg = docker.build("$maintainer/$imagename")
93
baseImg.push("$tag")
94
}
95
96
stage 'Notify'
97
November 26, 2018 22:52
98
slackSend color: 'good', message: "$maintainer/$imagename:$tag pushed to DockerHub"
November 20, 2018 16:32
99
100
}
101
102
def maintainer() {
103
def matcher = readFile('common.cmd') =~ 'maintainer="(.+)"'
104
matcher ? matcher[0][1] : 'tier'
105
}
106
107
def imagename() {
108
def matcher = readFile('common.cmd') =~ 'imagename="(.+)"'
109
matcher ? matcher[0][1] : null
110
}
111
112
def handleError(String message){
113
echo "${message}"
114
currentBuild.setResult("FAILED")
115
slackSend color: 'danger', message: "${message} (<${env.BUILD_URL}|Open>)"
November 21, 2018 19:38
116
bat exit 1
November 20, 2018 16:32
117
}