Android 项目配置 gitlab-ci 持续集成
这里只通过docker执行器来进行,如果使用shell也是可以的,不过需要自己写shell代码不如docker方便快捷。
docker容器搭建Android打包环境一般有两种方式:一种是通过基于openjdk:8-jdk 写shell配置好打包环境进行打包处理,另外一种则是通过docker hub上面别人配置好的Android打包环境docker容器进行。
1.使用OpenJdk镜像自行打包环境做Gitlab-CI/CD
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
| #使用 openjdk镜像 image: openjdk:8-jdk
#定义Android版本变量 variables: ANDROID_COMPILE_SDK: "28" ANDROID_BUILD_TOOLS: "28.0.2" ANDROID_SDK_TOOLS: "4333796" # 构建开始执行的脚本 before_script: - apt-get --quiet update --yes - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip - unzip -d android-sdk-linux android-sdk.zip - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null - export ANDROID_HOME=$PWD/android-sdk-linux - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/ - chmod +x ./gradlew # temporarily disable checking for EPIPE error and use yes to accept all licenses - set +o pipefail - yes | android-sdk-linux/tools/bin/sdkmanager --licenses - set -o pipefail
stages: - build - test
lintDebug: stage: build script: - ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug: stage: build script: - ./gradlew assembleDebug#执行打包任务 only: - tags #这里tags的作用是当修改gitlab项目tag的时候会触发 - test # 监听GitLab的这个分支 # 指定由哪一个runner运行 tags: - dev # 这个dev是上文注册Runner时的tag,和注册时候tag一样的话就会用对应的Runner来执行任务 # 指定成功后应附加到任务的文件和目录的列表 artifacts: paths: - app/build/outputs/# 保留app/build/outputs/文件夹 debugTests: stage: test script: - ./gradlew -Pci --console=plain :app:testDebug # 构建完成之后执行的脚本 #after_script: # - 这里如果是要配合monkey的话,一般在这个地方执行monkey的脚本
|
2.使用DockerAndroid配置好的打包环境做Gitlab-CI/CD
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
| image: runmymind/docker-android-sdk:latest before_script: - chmod +x ./gradlew stages: - build assembleDebug: stage: build script: - ./gradlew clean - ./gradlew assembleDebug artifacts: paths: - app/build/outputs/ only: - master
assembleRelease: stage: build script: - ./gradlew clean - ./gradlew assembleRelease artifacts: paths: - app/build/outputs/ only: - master
|
jangrewe/gitlab-ci-android的tag里面有基于sdk30、29、28、27、26等版本可以选择:
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
| image: gitlab-ci-android:30 # 用来编译 android 项目的镜像 variables: GRADLE_OPTS: "-Dorg.gradle.daemon=false" # 禁用 gradle 守护进程 before_script: # 配置 gradle 的缓存目录 - export GRADLE_USER_HOME=/cache/.gradle # 获取权限 - chmod +x ./gradlew - chmod +x ./update-version-code.sh stages: - build # 提交代码自动编译 build: stage: build only: - master script: - ./gradlew assembleDebug tags: - android # 构建测试包 qa: stage: build only: - qa script: - ./gradlew assembleDebug - sh -x /cache/deploy-android.sh artifacts: paths: - app/build/outputs/apk/debug/ tags: - android
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| image: androidsdk/android-30:latest before_script: - chmod +x ./gradlew stages: - build cache: paths: - .gradle/wrapper - .gradle/caches assembleDebug: stage: build script: - ./gradlew assembleDebug - cp app/build/outputs/apk/debug/app-debug.apk app-debug.apk artifacts: paths: - app-debug.apk
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| image: mingc/android-build-box:latest
pipelines: default: - step: caches: - gradle - gradle-wrapper - android-emulator script: - bash ./gradlew assemble definitions: caches: gradle-wrapper: ~/.gradle/wrapper android-emulator: $ANDROID_HOME/system-images/android-21
|
3.配置 runner 的Dokcker缓存路径
在服务器上找一个文件夹挂载到 docker 容器里边,给 .gradle 做一个缓存,这样每次编译的时候,就不用一直下载 gradle 了,这里我挂载的是 /home/android-cache 文件夹:
vi /etc/gitlab-runner/config.toml
pull_policy = “if-not-present” 避免docker 镜像每次都pull
注意,如果你的 gitlab 服务器迁移了之后,如果不想再重新注册 runner,可以改这个配置文件的 url 和 token 为迁移后的值
参考资料:
Docker在Android中的应用
GitLab CI/CD 介绍和使用
GitLab CI/CD 介绍和使用
使用gitlab api触发ci
如何使用 gitlab api 触发 CI
超简单配置Android持续集成自动化打包流程 - GitHub+GitLab-CI+蒲公英+钉钉
Android 项目配置 gitlab-ci 持续集成
Android 持续集成实践(二)——配置 Docker + gitlab-runner 实现线上自动编译
Android 持续集成实践(三)——编写 .gitlab-ci.yml 实现自动化
Android 持续集成实践(四)——配置 WebHook 通知编译结果
Android 持续集成实践(五)—— ABI 分包、特殊渠道编译需求