This repository has been archived by the owner on Jan 25, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJenkinsfile
127 lines (115 loc) · 4.13 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
pipeline {
agent any
environment {
MIN_SDK_IMAGE = "system-images;android-21;default;x86_64"
MAX_SDK_IMAGE = "system-images;android-30;default;x86_64"
APK_BUILD_BRANCH = "develop"
MOCK_WEB_SERVER_PORT = "8888"
}
options {
buildDiscarder(logRotator(numToKeepStr: "2"))
skipStagesAfterUnstable()
gitLabConnection("FreshRSSGitlab")
gitlabBuilds(builds: getBuildSteps(env.BRANCH_NAME))
disableConcurrentBuilds()
newContainerPerStage()
timestamps()
timeout(time: 30, unit: "MINUTES")
}
triggers {
gitlab(
branchFilterType: "All",
triggerOnPush: true,
triggerOnMergeRequest: false,
triggerOpenMergeRequestOnPush: "never",
triggerOnNoteRequest: true,
noteRegex: "Jenkins please retry a build",
skipWorkInProgressMergeRequest: false,
ciSkip: true,
setBuildDescription: true,
addNoteOnMergeRequest: true,
addCiMessage: true,
addVoteOnMergeRequest: true,
acceptMergeRequestOnSuccess: false,
cancelPendingBuildsOnUpdate: true
)
}
libraries {
lib("android-pipeline-steps")
}
stages {
stage("Lint") {
steps {
gitlabCommitStatus("Lint") {
sh "./gradlew spotlessCheck lint"
recordIssues(tools: [androidLintParser(pattern: "**/lint-results*.xml")])
}
}
}
stage("Unit tests") {
steps {
gitlabCommitStatus("Unit tests") {
sh "./gradlew testDebugUnitTest"
recordIssues(tools: [junitParser(pattern: "**/test-results/**/*.xml")])
}
}
}
stage("on min SDK level") {
steps {
gitlabCommitStatus("Instrumented tests on min SDK image") {
withAvd(
hardwareProfile: "Nexus 5X",
systemImage: env.MIN_SDK_IMAGE,
headless: true
) {
sh "./gradlew clean connectedDebugAndroidTest"
}
}
}
}
stage("on max SDK level") {
steps {
gitlabCommitStatus("Instrumented tests on max SDK image") {
withAvd(
hardwareProfile: "Nexus 5X",
systemImage: env.MAX_SDK_IMAGE,
headless: true
) {
sh "./gradlew clean connectedDebugAndroidTest"
}
}
}
}
stage("Build APK") {
steps {
gitlabCommitStatus("Build APK") {
withCredentials([usernamePassword(
credentialsId: "freshrss-signkey",
usernameVariable: "SIGN_KEY_CREDENTIALS_USR",
passwordVariable: "SIGN_KEY_CREDENTIALS_PSW"
)]) {
sh("""
./gradlew clean assembleJenkins \
-Pandroid.injected.signing.store.file=$SIGN_KEY_PATH \
-Pandroid.injected.signing.store.password=${'$'}SIGN_KEY_CREDENTIALS_PSW \
-Pandroid.injected.signing.key.alias=${'$'}SIGN_KEY_CREDENTIALS_USR \
-Pandroid.injected.signing.key.password=${'$'}SIGN_KEY_CREDENTIALS_PSW
""")
}
archiveArtifacts artifacts: "**/*.apk", fingerprint: true, onlyIfSuccessful: true
}
}
when { branch env.APK_BUILD_BRANCH }
}
}
}
def getBuildSteps(String branch) {
def buildSteps = [
"Lint",
"Unit tests",
"Instrumented tests on min SDK image",
"Instrumented tests on max SDK image",
]
if(branch == env.APK_BUILD_BRANCH) return buildSteps + ["Build APK"]
return buildSteps
}