-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathJenkinsfile.deploy
73 lines (62 loc) · 2.18 KB
/
Jenkinsfile.deploy
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
@Library('conservify') _
def getCopyArtifactsJob(stackName, branch) {
if (stackName == "portal-stack") {
return "cloud/" + branch
}
if (stackName == "charting-stack") {
return "cloud/" + branch
}
return "aws-build-stacks/" + branch
}
timestamps {
node ("main") {
try {
def isDev = params.WorkEnv.indexOf("dev") >= 0
def stackName = params.DeployStack ?: "portal-stack"
def branchName = params.DeployBranch ?: "main"
def statusUrl = isDev ? "https://api.fkdev.org/status" : "https://api.fieldkit.org/status"
def selector = params.WhichBuild ? specific(params.WhichBuild) : lastSuccessful()
slackSend channel: '#automation', color: 'good', message: "${env.JOB_NAME} - #${env.BUILD_NUMBER} Starting (stack = ${stackName}) (<${env.BUILD_URL}|Open>)"
stage ('prepare') {
def job = getCopyArtifactsJob(stackName, branchName)
copyArtifacts(projectName: job, flatten: true, selector: selector)
sh "ls -alh"
sh "ls -alh ${stackName}.tar"
}
stage ('deploy') {
def ws = conservifyTerraformWorkspace(env: params.WorkEnv)
sshagent (credentials: ['ssh-fkdev-deploy']) {
def known_hosts = "/var/jenkins_home/.ssh/known_hosts"
def prepare = ws.servers.value.collectEntries {
if (fileExists(known_hosts)) {
sh "ssh-keygen -f ${known_hosts} -R ${it.ip}"
}
[(it): {
println(it.sshAt)
sh "ssh -o StrictHostKeyChecking=no ${it.sshAt} whoami"
sh "ssh -o StrictHostKeyChecking=no ${it.sshAt} sudo rm -f ${stackName}.tar"
sh "scp -o StrictHostKeyChecking=no ${stackName}.tar ${it.sshAt}:"
}]
}
parallel(prepare)
def deploy = ws.servers.value.collectEntries {
[(it): {
println(it.sshAt)
sh "ssh -o StrictHostKeyChecking=no ${it.sshAt} sudo mv ${stackName}.tar /tmp/incoming-stacks"
}]
}
parallel(deploy)
}
if (stackName == "portal-stack") {
def value = watchDeployment(url: statusUrl, seconds: 180)
println(value)
println("done")
}
}
}
catch (Exception e) {
notifyFailure(e)
throw e
}
}
}