-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJenkinsfile
122 lines (106 loc) · 3.04 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
node {
try {
stage('React-Checkout/Prepare/Tests') {
notifyBuild('STARTED')
checkout scm
def result = sh (script: "git log -1 | grep '\\[full build\\]'", returnStatus: true)
parallel(
react_native: {
if (result != 0) {
sh "${env.CI_STEPS}/cache_build.sh"
} else {
sh "${env.CI_STEPS}/full_build.sh"
}
if (env.BRANCH_NAME == 'dev') {
sh "${env.CI_STEPS}/sonar.sh"
}
},
ios: {
if (env.BRANCH_NAME == 'release') {
if (result != 0) {
sh "${env.CI_STEPS}/ios_cache_build.sh"
} else {
sh "${env.CI_STEPS}/ios_full_build.sh"
}
}
}
)
}
if (env.BRANCH_NAME == 'release') {
stage('Native-Clean/Archive/Export') {
parallel(
ios: {
sh "${env.CI_STEPS}/ios_export.sh ${env.ROOT} ${env.WORKSPACE}"
},
android: {
sh "${env.CI_STEPS}/android_export.sh ${env.ROOT}"
}
)
}
stage('Kobiton-Cloud-Tests') {
withEnv(['PATH+NODE=/usr/local/bin']) {
def result = sh returnStatus: true, script: "node ${env.ROOT}/kobiton/index.js ios"
if (result != 0) {
notifyBuild('FAILED')
}
sh "exit ${result}"
}
}
stage('Deployment') {
parallel(
iTunesConnect: {
sh "${env.CI_STEPS}/testflight.sh ${env.ROOT}"
},
GoogleBeta: {
// TODO: need google paid account to use Pusblishing API
},
CodePushOTA: {
// TODO: need config for native iOS - Android to get update notification
}
)
}
}
stage('Notify-Success-Release') {
notifyBuild('SUCCESSFUL')
}
} catch (e) {
notifyBuild('FAILED')
throw e
}
}
// Notify build
def detailsByStatus(String buildStatus = 'STARTED') {
def detail = ''
switch(buildStatus) {
case 'STARTED': case 'SUCCESSFUL': case 'FAILED':
detail = """<p>${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>"""
break
case 'AUTOMATION-FAILED':
detail = '''${FILE,path="${env.ROOT}/wingman/screenshots/DetailReport.html"}'''
break
}
return detail;
}
def notifyBuild(String buildStatus = 'STARTED') {
buildStatus = buildStatus ?: 'SUCCESSFUL'
def colorName = 'RED'
def subject = "${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
def summary = "${subject} (${env.BUILD_URL})"
def details = detailsByStatus(buildStatus)
if (buildStatus == 'STARTED') {
color = 'YELLOW'
} else if ('SUCCESSFUL') {
color = 'GREEN'
}
hipchatSend (color: color, notify: true, message: summary)
emailext (
subject: subject,
body: details,
to: "${env.DEFAULT_RECIPIENTS}",
attachlog: true,
compresslog: true,
mimeType: 'text/html',
charset: 'UTF-8'
)
}