-
Notifications
You must be signed in to change notification settings - Fork 304
/
Copy pathJenkinsfile.releaseAPK
169 lines (153 loc) · 6.04 KB
/
Jenkinsfile.releaseAPK
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
161
162
163
164
165
166
167
168
169
#!groovy
pipeline {
agent {
docker {
image 'catrobat/catrobat-paintroid:stable'
args '--device /dev/kvm:/dev/kvm -v /var/local/container_shared/gradle_cache/$EXECUTOR_NUMBER:/home/user/.gradle -m=6.5G'
label 'LimitedEmulator'
alwaysPull true
}
}
environment {
//////// Build specific variables ////////
//////////// May be edited by the developer on changing the build steps
// modulename
GRADLE_PROJECT_MODULE_NAME = "Paintroid"
GRADLE_APP_MODULE_NAME = "app"
// APK build output locations
APK_LOCATION_DEBUG = "${env.GRADLE_APP_MODULE_NAME}/build/outputs/apk/debug/paintroid-debug.apk"
// Code coverage
JACOCO_XML = "${env.GRADLE_PROJECT_MODULE_NAME}/build/reports/coverage/debug/report.xml"
JACOCO_UNIT_XML = "${env.GRADLE_PROJECT_MODULE_NAME}/build/reports/jacoco/jacocoTestDebugUnitTestReport/jacoco.xml"
// place the cobertura xml relative to the source, so that the source can be found
JAVA_SRC = "${env.GRADLE_PROJECT_MODULE_NAME}/src/main/java"
}
options {
timeout(time: 2, unit: 'HOURS')
timestamps()
buildDiscarder(logRotator(numToKeepStr: '30'))
}
stages {
stage('Prepare build') {
steps {
script {
currentBuild.displayName = "#${env.BUILD_NUMBER} | ${env.gitBranch}"
}
}
}
stage('Build signed APK') {
steps {
// Build, zipalign and sign releasable APK
withCredentials([file(credentialsId: 'a925b6e8-b3c6-407e-8cad-65886e330037', variable: 'SIGNING_KEYSTORE')]) {
script {
sh '''
set +x
./gradlew assembleSignedRelease \
-PsigningKeystore=${SIGNING_KEYSTORE} \
-PsigningKeystorePassword=${signingKeystorePassword} \
-PsigningKeyAlias=${signingKeyAlias} \
-PsigningKeyPassword=${signingKeyPassword}
'''
}
}
archiveArtifacts artifacts: 'app/build/outputs/apk/signedRelease/paintroid-signedRelease.apk', fingerprint: true
archiveArtifacts artifacts: 'app/build/outputs/mapping/signedRelease/mapping.txt', fingerprint: true
}
}
stage('Build signed AAB') {
steps {
// Build, zipalign and sign releasable AAB
withCredentials([file(credentialsId: 'a925b6e8-b3c6-407e-8cad-65886e330037', variable: 'SIGNING_KEYSTORE')]) {
script {
sh '''
set +x
./gradlew bundleSignedRelease \
-PsigningKeystore=${SIGNING_KEYSTORE} \
-PsigningKeystorePassword=$signingKeystorePassword \
-PsigningKeyAlias=$signingKeyAlias \
-PsigningKeyPassword=$signingKeyPassword
'''
}
}
archiveArtifacts artifacts: 'app/build/outputs/bundle/signedRelease/paintroid-signedRelease.apk', fingerprint: true
}
}
stage('Approve APK upload to Google Play') {
options {
timeout(time: 60, unit: 'MINUTES')
}
steps {
script {
env.APPROVE_UPLOAD_APK = input message: 'User input required',
parameters: [choice(name: 'Upload', choices: 'no\nyes',
description: 'Do you want to upload this APK to Alpha Channel on Google Play?')]
}
}
}
stage('Upload AKP to Alpha') {
when {
environment name: 'APPROVE_UPLOAD_APK', value: 'yes'
}
steps {
script {
sh 'fastlane android upload_APK_Paintroid'
}
}
}
stage('Approve AAB upload to Google Play') {
options {
timeout(time: 60, unit: 'MINUTES')
}
steps {
script {
env.APPROVE_UPLOAD_AAB = input message: 'User input required',
parameters: [choice(name: 'Upload', choices: 'no\nyes',
description: 'Do you want to upload this AAB to Alpha Channel on Google Play?')]
}
}
}
stage('Upload AAB to Alpha') {
when {
environment name: 'APPROVE_UPLOAD_AAB', value: 'yes'
}
steps {
script {
sh 'fastlane android upload_AAB_Paintroid'
}
}
}
stage('Approve generation of AAR file') {
options {
timeout(time: 60, unit: 'MINUTES')
}
steps {
script {
env.APPROVE_AAR = input message: 'User input required',
parameters: [choice(name: 'Generate', choices: 'no\nyes',
description: 'Do you want to generate the AAR file?')]
}
}
}
stage('AAR file') {
when {
environment name: 'APPROVE_AAR', value: 'yes'
}
steps {
script {
sh '''
set +x
./gradlew publishToMavenLocal
'''
}
archiveArtifacts artifacts: 'Paintroid/build/outputs/aar/Paintroid-signedRelease.aar'
archiveArtifacts artifacts: 'colorpicker/build/outputs/aar/colorpicker-signedRelease.aar'
}
}
}
post {
always {
// clean workspace
deleteDir()
}
}
}