-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJenkinsfile
158 lines (154 loc) · 6.97 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
@Library(['mysql', 'slack']) _
import org.gradiant.jenkins.slack.*
pipeline {
agent any
environment {
MYSQLHOST = 'localhost'
DRUPALADMINUSER = 'pdsadmin'
DRUPALADMINUSERPASS = 'horse-staple-battery'
DRUPALSITENAME = 'My PDS Site'
DRUPALSITEMAIL = '[email protected]'
SLACK_CHANNEL = 'cicd'
SLACK_DOMAIN = 'fastglass'
CHANGE_LIST = 'true'
TEST_SUMMARY = 'true'
}
parameters {
string(name: 'baseSiteDbName', defaultValue: '')
string(name: 'baseSiteDbUser', defaultValue: '')
string(name: 'baseSiteDbUserPass', defaultValue: '')
string(name: 's1SiteSubDir', defaultValue: 's1.pds.com')
string(name: 's1SiteDbName', defaultValue: '')
string(name: 's1SiteDbUser', defaultValue: '')
string(name: 's1SiteDbUserPass', defaultValue: '')
string(name: 's2SiteSubDir', defaultValue: 's2.pds.com')
string(name: 's2SiteDbName', defaultValue: '')
string(name: 's2SiteDbUser', defaultValue: '')
string(name: 's2SiteDbUserPass', defaultValue: '')
}
stages {
stage('Clone Repo') {
steps {
script {
new SlackNotifier().notifyStart()
}
retry(3) {
checkout scm
}
script {
def commitHash = checkout(scm).GIT_COMMIT
echo "Commit Hash is ${commitHash}"
}
}
}
stage('Install Base') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'mysql-root', passwordVariable: 'DATABASE_PASSWORD', usernameVariable: 'DATABASE_USERNAME')]) {
def dbrootuser = env.DATABASE_USERNAME
def dbrootpass = env.DATABASE_PASSWORD
def base_database_credentials_base = buildTestMySQLDatabase {
dbUser = dbrootuser
dbPass = dbrootpass
}
env.baseSiteDbName = base_database_credentials_base.dbName
env.baseSiteDbUser = base_database_credentials_base.testUsername
env.baseSiteDbUserPass = base_database_credentials_base.testUserPassword
} // withCredentials
echo "============================================ BASE SITE ======================================================"
echo 'Test Database Name: ' + env.baseSiteDbName
echo 'Test Username: ' + env.baseSiteDbUser
echo "Starting Drupal Install"
sh 'chmod u+x ./install.drush.sh'
sh 'bash ./install.drush.sh -g $MYSQLHOST -i ' + env.baseSiteDbUser + ' -j ' + env.baseSiteDbUserPass + ' -n ' + env.baseSiteDbName + ' -d $DRUPALADMINUSER -e $DRUPALADMINUSERPASS -t "$DRUPALSITENAME" -u "$DRUPALSITEMAIL"'
echo "============================================ /BASE SITE ======================================================"
}
}
} // Install base
stage('Install S1') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'mysql-root', passwordVariable: 'DATABASE_PASSWORD', usernameVariable: 'DATABASE_USERNAME')]) {
def dbrootuser = env.DATABASE_USERNAME
def dbrootpass = env.DATABASE_PASSWORD
def s1_database_credentials_base = buildTestMySQLDatabase {
dbUser = dbrootuser
dbPass = dbrootpass
}
env.s1SiteDbName = s1_database_credentials_base.dbName
env.s1SiteDbUser = s1_database_credentials_base.testUsername
env.s1SiteDbUserPass = s1_database_credentials_base.testUserPassword
} // withCredentials
echo "============================================ S1 SITE ======================================================"
echo 'Test Database Name: ' + env.s1SiteDbName
echo 'Test Username: ' + env.s1SiteDbUser
echo "Starting Drupal Install"
sh 'chmod u+x ./install.drush.sh'
sh 'bash ./install.drush.sub.sh -g $MYSQLHOST -i ' + env.s1SiteDbUser + ' -j ' + env.s1SiteDbUserPass + ' -n ' + env.s1SiteDbName + ' -d $DRUPALADMINUSER -e $DRUPALADMINUSERPASS -t "$DRUPALSITENAME" -u "$DRUPALSITEMAIL" -s ' + env.s1SiteSubDir
echo "============================================ /S1 SITE ======================================================"
}
}
} // Install S1
stage('Install S2') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'mysql-root', passwordVariable: 'DATABASE_PASSWORD', usernameVariable: 'DATABASE_USERNAME')]) {
def dbrootuser = env.DATABASE_USERNAME
def dbrootpass = env.DATABASE_PASSWORD
def s2_database_credentials_base = buildTestMySQLDatabase {
dbUser = dbrootuser
dbPass = dbrootpass
}
env.s2SiteDbName = s2_database_credentials_base.dbName
env.s2SiteDbUser = s2_database_credentials_base.testUsername
env.s2SiteDbUserPass = s2_database_credentials_base.testUserPassword
} // withCredentials
echo "============================================ S2 SITE ======================================================"
echo 'Test Database Name: ' + env.s2SiteDbName
echo 'Test Username: ' + env.s2SiteDbUser
echo "Starting Drupal Install"
sh 'chmod u+x ./install.drush.sh'
sh 'bash ./install.drush.sub.sh -g $MYSQLHOST -i ' + env.s2SiteDbUser + ' -j ' + env.s2SiteDbUserPass + ' -n ' + env.s2SiteDbName + ' -d $DRUPALADMINUSER -e $DRUPALADMINUSERPASS -t "$DRUPALSITENAME" -u "$DRUPALSITEMAIL" -s ' + env.s2SiteSubDir
echo "============================================ /S2 SITE ======================================================"
}
}
} // Install S2
stage('Unit Tests') {
steps {
script {
sh 'composer update phpunit/phpunit phpspec/prophecy symfony/yaml --with-dependencies --no-progress'
try {
sh './vendor/bin/phpunit --testsuite=unit -c web/core/'
}
catch (e) {
new SlackNotifier().notifyError(e)
}
}
}
}
}
post {
always {
script {
withCredentials([usernamePassword(credentialsId: 'mysql-root', passwordVariable: 'DATABASE_PASSWORD', usernameVariable: 'DATABASE_USERNAME')]) {
def dbrootuser = env.DATABASE_USERNAME
def dbrootpass = env.DATABASE_PASSWORD
echo "Tear down Base"
destroyTestMySQLDatabase (dbrootuser, dbrootpass, env.baseSiteDbName, env.baseSiteDbUser)
echo "Done Base"
echo "Tear down Subsite 1"
destroyTestMySQLDatabase (dbrootuser, dbrootpass, env.s1SiteDbName, env.s1SiteDbUser)
echo "Done S1"
echo "Tear down Subsite 2"
destroyTestMySQLDatabase (dbrootuser, dbrootpass, env.s2SiteDbName, env.s2SiteDbUser)
echo "Done S2"
} // withCredentials
new SlackNotifier().notifyResultFull()
// If permissions are not changes Jenkins will not be able to clean the workspace.
sh 'chmod -R 777 web/sites/default'
cleanWs()
} // script
cleanWs()
} // always
}
}