Android 開発 開発

【GitLab】GitLab RunnerでAndroidアプリテスト

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インストールを行っているコンテナを用意したほうがいいかと思う。

-Android, 開発, 開発
-, , , ,