forked from chsEngineer13/exchange-1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile
160 lines (142 loc) · 5.68 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
158
159
160
node {
withCredentials(
[string(credentialsId: 'boundlessgeoadmin-token', variable: 'GITHUB_TOKEN'),
string(credentialsId: 'connect-ftp-combo', variable: 'CONNECT_FTP'),
string(credentialsId: 'sonar-jenkins-pipeline-token', variable: 'SONAR_TOKEN')]) {
try {
stage('Checkout'){
checkout scm
sh """
git submodule update --init
echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
"""
checkout([$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'RelativeTargetDirectory',
relativeTargetDir: './vendor/exchange-mobile-extension']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'BoundlessAdminGitHub',
url: 'https://github.com/boundlessgeo/exchange-mobile-extension.git']]])
sh """
# https://issues.jenkins-ci.org/browse/JENKINS-44909
rm -r vendor/exchange-mobile-extension@tmp
"""
}
stage('Setup'){
sh """
docker pull 'quay.io/boundlessgeo/sonar-maven-py3-alpine'
docker pull 'quay.io/boundlessgeo/bex-nodejs-bower-grunt:v0.10.x'
docker-compose -f vendor/docker/bex/docker-compose.yml --project-dir=. down
docker system prune -f
"""
}
stage('Style Checks'){
parallel (
"pycodestyle" : {
bashDocker(
'quay.io/boundlessgeo/sonar-maven-py3-alpine',
'pycodestyle exchange --ignore=E722,E731'
)
},
"flake8" : {
bashDocker(
'quay.io/boundlessgeo/sonar-maven-py3-alpine',
'flake8 --ignore=F405,E722,E731 exchange'
)
}
)
}
stage('Build Maploom'){
bashDocker(
'quay.io/boundlessgeo/bex-nodejs-bower-grunt:v0.10.x',
'rm -fr vendor/maploom/node_modules vendor/maploom/package-lock.json && . vendor/docker/bex/docker/devops/helper.sh && build-maploom'
)
}
stage('Build Images'){
sh """
docker rm -f \$(docker ps -aq) || echo "no containers to remove"
docker-compose -f vendor/docker/bex/docker-compose.yml --project-dir=. up --build --force-recreate -d
"""
}
stage('Start Containers'){
timeout(time: 10, unit: 'MINUTES') {
waitUntil {
script {
def r = sh script: 'wget -q http://localhost -O /dev/null', returnStatus: true
return (r == 0);
}
}
}
sh """
docker-compose -f vendor/docker/bex/docker-compose.yml --project-dir=. logs
"""
}
stage('py.test'){
sh """
docker-compose -f vendor/docker/bex/docker-compose.yml --project-dir=. exec -T exchange /bin/bash -c '/code/vendor/docker/bex/docker/exchange/run_tests.sh'
"""
}
if (env.BRANCH_NAME == 'master') {
stage('SonarQube Analysis') {
sh """
docker run -e SONAR_HOST_URL='https://sonar-ciapi.boundlessgeo.io' \
-e SONAR_TOKEN=$SONAR_TOKEN \
-v \$(pwd -P):/code \
-w /code quay.io/boundlessgeo/sonar-maven-py3-alpine bash \
-c '. vendor/docker/bex/docker/devops/helper.sh && sonar-scan'
"""
}
}
if (gitTagCheck()) {
stage('Update Connect Docs') {
sh """
docker run --rm -e CONNECT_FTP=$CONNECT_FTP \
-v \$(pwd -P):/code \
-w /code quay.io/boundlessgeo/sonar-maven-py3-alpine bash \
-c '. vendor/docker/bex/docker/devops/helper.sh && \
lftp -e "set ftp:ssl-allow no; \
mkdir /site/wwwroot/docs/exchange/`py3-bex-version`; \
mirror -R -e exchange/static/docs/html /site/wwwroot/docs/exchange/`py3-bex-version`; \
mirror -R -e exchange/static/docs/html /site/wwwroot/docs/exchange/latest; \
quit" \
-u $CONNECT_FTP \
waws-prod-ch1-017.ftp.azurewebsites.windows.net'
"""
}
}
currentBuild.result = "SUCCESS"
}
catch (err) {
currentBuild.result = "FAILURE"
throw err
} finally {
// Success or failure, always send notifications
echo currentBuild.result
sh """
docker-compose -f vendor/docker/bex/docker-compose.yml --project-dir=. down
docker system prune -f
"""
notifyBuild(currentBuild.result)
}
}
}
// Slack Integration
def notifyBuild(String buildStatus = currentBuild.result) {
// generate a custom url to use the blue ocean endpoint
def jobName = "${env.JOB_NAME}".split('/')
def repo = jobName[0]
def pipelineUrl = "${env.JENKINS_URL}blue/organizations/jenkins/${repo}/detail/${env.BRANCH_NAME}/${env.BUILD_NUMBER}/pipeline"
// Default values
def colorName = 'RED'
def colorCode = '#FF0000'
def subject = "${buildStatus}\nJob: ${env.JOB_NAME}\nBuild: ${env.BUILD_NUMBER}\nJenkins: ${pipelineUrl}\n"
def summary = (env.CHANGE_ID != null) ? "${subject}\nAuthor: ${env.CHANGE_AUTHOR}\n${env.CHANGE_URL}\n" : "${subject}"
// Override default values based on build status
if (buildStatus == 'SUCCESS') {
colorName = 'GREEN'
colorCode = '#228B22'
}
// Send notifications
slackSend (color: colorCode, message: summary, channel: '#exchange-bots')
}