GitLabはCI/CD機能が実装されており、GitLab Runnerを用いてAndroidアプリのJUnitを行ってみた。
.gitlab-ci.yml
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "29"
ANDROID_BUILD_TOOLS: "29.0.2"
ANDROID_SDK_TOOLS: "6200805"
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/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
- unzip -d android-sdk-linux android-sdk.zip
- mkdir -p android-sdk-linux/licenses/
- echo "8933bad161af4178b1185d1a37fbf41ea5269c55nd56f5187479451eabf01fb78af6dfcb131a6481en24333f8a63b6825ea9c5514f83c2829b004d1fee" > android-sdk-linux/licenses/android-sdk-license
- echo "84831b9409646a918e30573bab4c9c91346d8abdn504667f4c0de7af1a06de9f4b1727b84351f2910" > android-sdk-linux/licenses/android-sdk-preview-license
- echo y | android-sdk-linux/tools/bin/sdkmanager --sdk_root=android-sdk-linux --licenses > /dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager --sdk_root=android-sdk-linux "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager --sdk_root=android-sdk-linux "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager --sdk_root=android-sdk-linux "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 --sdk_root=android-sdk-linux --licenses
- yes | android-sdk-linux/tools/bin/sdkmanager --sdk_root=android-sdk-linux --update
- set -o pipefail
lintDebug:
stage: build
script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
debugTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug
unitTests:
stage: test
script:
- ./gradlew testDebugUnitTest
artifacts:
paths:
- app/build/reports/tests/testDebugUnitTest/
所感
OpenJDK1.8のDockerを使っています。
variablesでビルド対象のAndroid SDKの設定、
before scriptでAndroid SDKをインストールしています。
URL及びインストール方法が変わったらしく、過去のやり方ではできなかった。
14~15行目はライセンスに同意するために記述
26~27行目だけでも同様のことをしているので、いらないかも。
33行目以降はテスト実施
artifacts: paths:
で成果物を出すことができる。
JUnit結果を取得したい場合は57行目「app/build/reports/tests/testDebugUnitTest/
」で取得できる。
共有Runnerを使うとAndroid SDKインストールから始めないといけないので、全体的に処理が遅くなる。(Android SDKインストール完了までに数分かかる)
自サーバ等を使えるのであれば、予めSDKインストールを行っているコンテナを用意したほうがいいかと思う。