Android 项目 使用 GitLab Runner CI/CD 构建
源码
.gitlab-ci.yml
stages:
- build
build-android:
stage: build
image: $BUILD_IMAGE
variables:
# 流水线作业运行的 Docker 镜像
# 如果使用 gradle 命令,则需要使用 gradle 镜像
# 如果使用 gradlew 命令, 则仅需要使用 JDK 镜像
BUILD_IMAGE: registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/gradle:9.1.0-jdk17
# gradle 本地仓库路径
GRADLE_USER_HOME: $CI_PROJECT_DIR/.gradle
# android SDK 路径
ANDROID_HOME: $CI_PROJECT_DIR/android-sdk-root
# 编译时使用的安卓版本,它应该和 compileSdkVersion 一致。
ANDROID_COMPILE_SDK: 33
# 构建工具版本。应该是符合 buildToolsVersion。
ANDROID_BUILD_TOOLS: 33.0.2
# 从官方网站下载命令行工具的版本。
# https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
ANDROID_SDK_TOOLS: 9477386
before_script:
- cd android && echo "进入安卓项目文件夹"
- echo $KEYSTORE_BASE64 | base64 -d > xuxiaowei.keystore
- echo "storeFile=../xuxiaowei.keystore" > keystore.properties
- echo "keyAlias=$KEYSTORE_ALIAS" >> keystore.properties
- echo "storePassword=$KEYSTORE_PASSWORD" >> keystore.properties
- echo "keyPassword=$KEYSTORE_PASSWORD" >> keystore.properties
- install -d $ANDROID_HOME
- |
if [ ! -f "$ANDROID_HOME/cmdline-tools.zip" ]; then
wget --no-verbose --output-document=$ANDROID_HOME/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
fi
- |
if [ ! -d "$ANDROID_HOME/cmdline-tools/tools" ]; then
unzip -q -d $ANDROID_HOME/cmdline-tools $ANDROID_HOME/cmdline-tools.zip;
mv -T $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/tools;
fi
- export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/cmdline-tools/tools/bin
- sdkmanager --version
- yes | sdkmanager --licenses > /dev/null || true
- sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}"
- sdkmanager "platform-tools"
- sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}"
script:
- gradle -version
- gradle build -x test
- ls -lh $CI_PROJECT_DIR/android/app/build/outputs/apk/*/*.apk
after_script:
- echo "无论流水线执行结果如何,最终都会执行删除 android 签名配置"
- rm -rf android/keystore.properties
- rm -rf android/xuxiaowei.keystore
artifacts:
name: "${CI_JOB_NAME}"
expire_in: 7 days
paths:
- android/app/build/outputs/apk/*/*.apk
cache:
key: "${CI_JOB_NAME}"
paths:
- .gradle
- android-sdk-root
tags:
- 911k-docker
项目变量配置
- 注意
隐藏密码和隐藏签名文件Base64
- 注意
环境变量是否受保护
GitLab Runner 执行示例
- 首次运行,没有缓存,执行时间较长(
7分 8秒)
- 首次运行,会下载 Android 构建工具等软件
- 正常运行结束
- 会得到已经签名的
app-release.apk
- 无论流水线执行结果如何,最终都会执行删除 android 签名配置,防止泄密
- 将
.gradle、android-sdk-root 打包,缓存起来,方便下次使用
- 将
android/app/build/outputs/apk/*/*.apk 上传到 Gitlab Artifacts,方便后续下载使用,默认保留 30天,本示例为保留 7 天。如果有需要,可以点击右侧的保持按钮,可以永久保留。点击下载可以下载所有 Artifacts,点击浏览可以选择性下载某个 Artifacts
- 后续执行时,存在缓存,执行速度较快(
3分 0秒)