-
Notifications
You must be signed in to change notification settings - Fork 3
/
Jenkinsfile
122 lines (105 loc) · 2.89 KB
/
Jenkinsfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
pipeline {
environment {
ORG_GRADLE_PROJECT_appName = 'mod-serials-management'
GRADLEW_OPTS = '--console plain --no-daemon'
BUILD_DIR = "${env.WORKSPACE}/service"
MD = "${env.WORKSPACE}/service/build/resources/main/okapi/ModuleDescriptor.json"
doKubeDeploy = true
}
options {
timeout(30)
buildDiscarder(logRotator(numToKeepStr: '30'))
}
agent {
node {
label 'jenkins-agent-java17'
}
}
stages {
stage ('Setup') {
steps {
dir(env.BUILD_DIR) {
script {
def foliociLib = new org.folio.foliociCommands()
def gradleVersion = foliociLib.gradleProperty('appVersion')
env.name = env.ORG_GRADLE_PROJECT_appName
// if release
if ( foliociLib.isRelease() ) {
// make sure git tag and version match
if ( foliociLib.tagMatch(gradleVersion) ) {
env.isRelease = true
env.dockerRepo = 'folioorg'
env.version = gradleVersion
}
else {
error('Git release tag and Maven version mismatch')
}
}
else {
env.dockerRepo = 'folioci'
env.version = "${gradleVersion}.${env.BUILD_NUMBER}"
}
}
}
sendNotifications 'STARTED'
}
}
stage('Gradle Build') {
steps {
dir(env.BUILD_DIR) {
sh "./gradlew $env.GRADLEW_OPTS assemble"
}
}
}
stage('Build Docker') {
steps {
dir(env.BUILD_DIR) {
sh "./gradlew $env.GRADLEW_OPTS -PdockerRepo=${env.dockerRepo} buildImage"
}
// debug
sh "cat $env.MD"
}
}
stage('Publish Docker Image') {
when {
anyOf {
branch 'master'
expression { return env.isRelease }
}
}
steps {
script {
docker.withRegistry('https://index.docker.io/v1/', 'DockerHubIDJenkins') {
sh "docker tag ${env.dockerRepo}/${env.name}:${env.version} ${env.dockerRepo}/${env.name}:latest"
sh "docker push ${env.dockerRepo}/${env.name}:${env.version}"
sh "docker push ${env.dockerRepo}/${env.name}:latest"
}
}
}
}
stage('Publish Module Descriptor') {
when {
anyOf {
branch 'master'
expression { return env.isRelease }
}
}
steps {
script {
sh "mv $MD ${MD}.orig"
sh """
cat ${MD}.orig | jq '.launchDescriptor.dockerImage |= \"${env.dockerRepo}/${env.name}:${env.version}\" |
.launchDescriptor.dockerPull |= \"true\"' > $MD
"""
}
postModuleDescriptor(env.MD)
}
}
} // end stages
post {
always {
dockerCleanup()
sendNotifications currentBuild.result
}
}
}