forked from Catrobat/Paintroid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Jenkinsfile.releaseAPK
134 lines (121 loc) · 4.94 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
#!groovy
pipeline {
agent {
dockerfile {
filename 'Dockerfile.jenkins'
// 'docker build' would normally copy the whole build-dir to the container, changing the
// docker build directory avoids that overhead
dir 'docker'
// Pass the uid and the gid of the current user (jenkins-user) to the Dockerfile, so a
// corresponding user can be added. This is needed to provide the jenkins user inside
// the container for the ssh-agent to work.
// Another way would be to simply map the passwd file, but would spoil additional information
// Also hand in the group id of kvm to allow using /dev/kvm.
additionalBuildArgs '--build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) --build-arg KVM_GROUP_ID=$(getent group kvm | cut -d: -f3)'
// Ensure that each executor has its own gradle cache to not affect other builds
// that run concurrently.
args '--device /dev/kvm:/dev/kvm'
}
}
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('Approve 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 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: '**/*-release.aar'
}
}
}
post {
always {
// clean workspace
deleteDir()
}
}
}