-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathJenkinsfile.restore
63 lines (49 loc) · 2.21 KB
/
Jenkinsfile.restore
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
import groovy.json.JsonSlurper
@Library('conservify') _
properties([
buildDiscarder(logRotator(numToKeepStr: '1')),
disableConcurrentBuilds(),
])
timestamps {
node ("jenkins-aws-ubuntu") {
try {
def workEnv = "dev"
def ws = conservifyTerraformWorkspace(env: workEnv)
def name = params.DbName ?: "db"
def url = name == "tsdb" ? ws.timescaledb_url.value : ws.database_url.value
def adminUrl = name == "tsdb" ? ws.timescaledb_admin_url.value : ws.database_admin_url.value
def temporaryTsDbUrl = "postgres://${ws.timescaledb_username.value}:${ws.timescaledb_password.value}@${ws.timescaledb_address.value}/fk-restore"
def temporaryDbUrl = "postgres://${ws.database_username.value}:${ws.database_password.value}@${ws.database_address.value}/fk-restore"
def temporaryUrl = name == "tsdb" ? temporaryTsDbUrl : temporaryDbUrl
def now = new Date()
def stamp = now.format("yyyyMMdd-HHmmss", TimeZone.getTimeZone('UTC'))
stage ('restoring') {
withCredentials([usernamePassword(credentialsId: 'jenkins-artifact-download', usernameVariable: 'JENKINS_USER', passwordVariable: 'JENKINS_PASSWORD')]) {
sh "rm -f *.sql*"
copyArtifacts(projectName: 'fkprd-db-clone', flatten: true, parameters: "DbName=" + name)
writeFile(file: "create.sql", text: """
CREATE DATABASE "fk-restore";
ALTER DATABASE "fk-restore" SET search_path TO "\$user", fieldkit, public;
""")
sh "docker run --rm -i postgres psql '${adminUrl}' < create.sql"
sh "echo 'SET session_replication_role TO replica;' > restore.sql"
sh "xz -dc *.sql.xz >> restore.sql"
sh "echo 'DELETE FROM fieldkit.gue_jobs;' >> restore.sql"
sh "echo 'SET session_replication_role TO default;' >> restore.sql"
sh "docker run --rm -i postgres psql '${temporaryUrl}' < restore.sql"
writeFile(file: "swap.sql", text: """
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'fk';
ALTER DATABASE fk RENAME TO "fk-${stamp}";
ALTER DATABASE "fk-restore" RENAME TO "fk";
""")
sh "docker run --rm -i postgres psql '${adminUrl}' < swap.sql"
notifySuccess()
}
}
}
catch (Exception e) {
notifyFailure(e)
throw e
}
}
}