/
pipeline.groovy
110 lines (109 loc) · 4.38 KB
/
pipeline.groovy
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
import groovy.json.JsonSlurperClassic
@NonCPS
def parseJsonToMap(String json) {
final slurper = new JsonSlurperClassic()
return new HashMap<>(slurper.parseText(json))
}
pipeline {
agent any
stages {
stage('Prepare') {
steps {
checkout scm
withCredentials([string(credentialsId: 'ARTIFACTORY_TOKEN', variable: 'ARTIFACTORY')]) {
sh 'curl -H "X-JFrog-Art-Api:$ARTIFACTORY" -X POST https://$ARTI3/api/search/aql -T "${WORKSPACE}/all/src/main/resources/jenkins/Project-RC-Build/search.aql" > "${WORKSPACE}/all/src/main/resources/jenkins/Project-RC-Build/out.json"'
}
script {
workspace = pwd()
String json = readFile("${workspace}/all/src/main/resources/jenkins/Project-RC-Build/out.json").trim()
String content = ''
def map = parseJsonToMap(json)
map.results.each{ k, v ->
myVersion = "${k.name}".split("-")[1].replaceAll(".war","")
println myVersion
content <<= myVersion+"\n"
}
writeFile file: "${workspace}/all/src/main/resources/jenkins/Project-RC-Build/versions.txt", text: content.toString().trim()
}
}
}
stage('Input') {
steps {
script {
String f = readFile("${workspace}/all/src/main/resources/jenkins/Project-RC-Build/versions.txt")
env.version = input message: 'User input required', ok: 'Release!',
parameters: [choice(name: 'version', choices: "$f", description: 'Which version should be promoted??')]
println env.version
}
}
}
stage('k8s down') {
when {
branch 'production'
}
steps {
sh 'kubectl delete ReplicationController meow || true'
sh 'kubectl delete service meow || true'
sh 'kubectl get services || true'
}
}
stage('Certify WAR') {
steps {
echo 'Certifying WAR ...'
}
}
stage('Promote WAR') {
steps {
withCredentials([string(credentialsId: 'ARTIFACTORY_TOKEN', variable: 'ARTIFACTORY')]) {
sh 'jfrog rt cp --url=https://$ARTI3 --apikey=$ARTIFACTORY --flat=true libs-release-local/com/huettermann/web/$version/ ' + 'libs-releases-staging-local/com/huettermann/web/$version/'
}
}
}
stage('Certify Docker Image') {
steps {
echo 'Certifying Docker Image ...'
}
}
stage('Promote Docker Image') {
steps {
withCredentials([string(credentialsId: 'ARTIFACTORY_TOKEN', variable: 'ARTIFACTORY')]) {
sh '''curl -H "X-JFrog-Art-Api:$ARTIFACTORY" -X POST https://$ARTI3/api/docker/docker-local/v2/promote ''' +
'''-H "Content-Type:application/json" ''' +
'''-d \'{"targetRepo" : "docker-prod-local", "dockerRepository" : "michaelhuettermann/alpine-tomcat7", "tag": "\'$version\'", "copy": true }\'
'''
}
}
}
stage('k8s up') {
when {
branch 'production'
}
steps {
sh "sed -i '' 's/VERSION/$version/g' ${WORKSPACE}/all/src/main/resources/jenkins/Project-RC-Build/meow.yaml"
sh "sed -i '' 's#REGISTRY#$ARTI3REGISTRY#g' ${WORKSPACE}/all/src/main/resources/jenkins/Project-RC-Build/meow.yaml"
sh 'kubectl apply -f ${WORKSPACE}/all/src/main/resources/jenkins/Project-RC-Build/meow.yaml'
sh 'kubectl get services'
sh 'curl $(minikube service meow --url)/all/message?param=world'
sh 'curl $(minikube service meow --url)/all/'
}
}
}
post {
always {
echo 'Finished!'
deleteDir()
}
success {
echo 'Succeeeded.'
}
unstable {
echo 'Unstable.'
}
failure {
echo 'Failed.'
}
changed {
echo 'Things in life change.'
}
}
}