forked from fabric8io/fabric8-pipeline-library
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeployPlannerSnapshot.groovy
65 lines (55 loc) · 2.59 KB
/
deployPlannerSnapshot.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
#!/usr/bin/groovy
import java.util.regex.Pattern
def call(body) {
// evaluate the body block, and collect configuration into the object
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
def openShiftTemplate = config.openShiftTemplate
def originalImageName = config.originalImageName
def newImageName = config.newImageName
def deploymentName = config.githubRepo
def providerLabel = config.providerLabel ?: 'fabric8'
def project = config.githubProject
def flow = new io.fabric8.Fabric8Commands()
def utils = new io.fabric8.Utils()
def openShiftProject = config.openShiftProject + '-' + utils.getRepoName()
if (!flow.isAuthorCollaborator("", project)){
currentBuild.result = 'ABORTED'
error 'Change author is not a collaborator on the project, aborting build until we support the [test] comment'
}
def yaml = flow.getUrlAsString(openShiftTemplate)
def originalImage = "- image: ${originalImageName}:(.*)"
def newImage = "- image: ${newImageName}"
def compiledYaml = Pattern.compile(originalImage).matcher(yaml).replaceFirst(newImage)
if (!compiledYaml.contains(newImage)){
error "original image ${originalImage} not replaced with ${newImage} in yaml: \n ${compiledYaml}"
}
// cant use writeFile as we are facing following error
// Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods
sh "echo '${compiledYaml}' > snapshot.yml"
container('clients') {
try {
sh "oc get project ${openShiftProject} | grep Active"
} catch (err) {
echo "${err}"
sh "oc new-project ${openShiftProject}"
}
sh "oc process -n ${openShiftProject} -f ./snapshot.yml | oc apply -n ${openShiftProject} -f -"
sleep 10
// ok bad bad but there's a delay between DC's being applied and new pods being started. lets find a better way to do this looking at teh new DC perhaps?
waitUntil {
// wait until the pods are running has been deleted
try {
sh "oc get pod -l app=${deploymentName},provider=${providerLabel} -n ${openShiftProject} | grep Running"
echo "${deploymentName} pod is running"
return true
} catch (err) {
echo "waiting for ${deploymentName} to be ready..."
return false
}
}
return sh(script: "oc get route ${deploymentName} -o jsonpath=\"{.spec.host}\" -n ${openShiftProject}", returnStdout: true).toString().trim()
}
}