Android 앱을 GitHubActions로 빌드하고 단위 테스트하고 FirebaseTestLab에서 UI 테스트 실행
다음 내용으로
PROJECT_ROOT/.github/workflows/main.yml
를 만들고 푸시하면 GitHubActions의 Workflows에 추가됩니다.main.yml
name: CI
on:
push:
branches: [main]
paths-ignore:
- '**.md'
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Restore gradle cache
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Make gradle.properties
run:
KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}
echo -e "org.gradle.daemon=trueorg.gradle.daemon=true\norg.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError\norg.gradle.parallel=true\norg.gradle.configureondemand=true\nKEYSTORE_PASSWORD=$KEYSTORE_PASSWORD\nandroid.enableD8 = true\nandroid.enableJetifier=true\nandroid.useAndroidX=true" >> gradle.properties
- name: Run Compile
run: ./gradlew assembleDebug
- name: Run unit tests
run: ./gradlew testDebugUnitTest --stacktrace
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@master
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
- name: Assemble Android Instrumentation Tests
run: ./gradlew assembleDebugAndroidTest
- name: Set APP_VERSION
id: app_version
run: |
VERSION=$(grep -Eo 'versionName ".*"' ./app/build.gradle | grep -Eo '[0-9]+.[0-9]+.[0-9]+')
echo "::set-output name=version::$VERSION"
- name: Run Instrumentation Tests in Firebase Test Lab
run: |
echo "y" |
gcloud firebase test android run \
--timeout 5m \
--type instrumentation \
--app app/build/outputs/apk/debug/app-${{ steps.app_version.outputs.version }}-debug.apk \
--test app/build/outputs/apk/androidTest/debug/app-${{ steps.app_version.outputs.version }}-debug-androidTest.apk \
--device model=Pixel2,version=28,locale=ja_JP,orientation=portrait
하나씩 봅니다.
name: CI
이 Workflow의 이름입니다.
on:
push:
branches: [main]
paths-ignore:
- '**.md'
이 Workflow가 움직이는 조건입니다.
"
main
브랜치에 푸시되었을 때"라는 조건을 지정합니다.다만
'**.md'
의 push 는 제외하고 있습니다.jobs:
build:
runs-on: ubuntu-20.04
steps:
Workflow의 작업입니다.
build
라는 Job에서 ubuntu-20.04
에서 실행되도록 정의합니다.Job 의 내용은
steps
안에 기술해 갑니다.runs-on에 지정할 수 있는 레이블은 GitHub Docs-GitHub Actions-jobs.<job_id>.runs-on을 참조하십시오.
Linux, macOS, Windows에서 요금이 바뀌므로 주의하십시오.
자세한 내용은 GitHub Docs-GitHub Actions 결제 정보을 참조하십시오.
- name: Checkout
uses: actions/checkout@v2
리포지토리를 체크아웃합니다.
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
JDK를 설정합니다.
- name: Restore gradle cache
uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
Gradle 종속성을 캐시합니다.
자세한 내용은 GitHub Docs-GitHub Actions - 종속성 캐싱을 참조하십시오.
- name: Make gradle.properties
run:
KEYSTORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}
echo -e "org.gradle.daemon=trueorg.gradle.daemon=true\norg.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError\norg.gradle.parallel=true\norg.gradle.configureondemand=true\nKEYSTORE_PASSWORD=$KEYSTORE_PASSWORD\nandroid.enableD8 = true\nandroid.enableJetifier=true\nandroid.useAndroidX=true" >> gradle.properties
이번 앱에서는 빌드하기 위해
gradle.properties
가 필요하므로 여기서 작성하고 있습니다.파일에 숨겨진 정보도 포함되어 있으므로 GitHub 의 Secrets 로 설정하고
secrets.KEYSTORE_PASSWORD
에서 참조하고 있습니다.자세한 내용은 GitHub Docs-GitHub Actions - 암호화된 비밀을 참조하십시오.
- name: Run Compile
run: ./gradlew assembleDebug
디버그 APK를 빌드합니다.
- name: Run unit tests
run: ./gradlew testDebugUnitTest --stacktrace
단위 테스트를 실행합니다.
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@master
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
FirebaseTestLab과 함께 작동하도록 GCP를 설정합니다.
project_id
Firebase 프로젝트 ID입니다.service_account_key
GCP 서비스 계정의 키를 base64화한 값입니다.둘 다 GitHub의 Secrets로 설정합니다.
이쪽 사이트이 이미지와 함께 이해하기 쉽습니다
- name: Assemble Android Instrumentation Tests
run: ./gradlew assembleDebugAndroidTest
UI 테스트용 APK를 빌드합니다.
- name: Set APP_VERSION
id: app_version
run: |
VERSION=$(grep -Eo 'versionName ".*"' ./app/build.gradle | grep -Eo '[0-9]+.[0-9]+.[0-9]+')
echo "::set-output name=version::$VERSION"
이 앱은 APK 파일 이름에 버전 이름을 포함하므로 build.gradle 파일
versionName 1.0.0
의 1.0.0
만 추출하고 환경 변수에 설정합니다. - name: Run Instrumentation Tests in Firebase Test Lab
run: |
echo "y" |
gcloud firebase test android run \
--timeout 5m \
--type instrumentation \
--app app/build/outputs/apk/debug/app-${{ steps.app_version.outputs.version }}-debug.apk \
--test app/build/outputs/apk/androidTest/debug/app-${{ steps.app_version.outputs.version }}-debug-androidTest.apk \
--device model=Pixel2,version=28,locale=ja_JP,orientation=portrait
FirebaseTestLab에 APK를 업로드하고 UI 테스트를 실행하고 있습니다.
방금 환경 변수에 설정한 versionName은
${{ steps.app_version.outputs.version }}
에서 참조합니다.gcloud firebase test android run
옵션은 gcloud 참조-gcloud firebase test android run을 참조하십시오.echo "y"
는 처음 실행할 때 다음과 같은 확인이 들어가기 때문에 기술하고 있습니다.(2회째 이후는 불필요)
API [toolresults.googleapis.com] not enabled on project.
Would you like to enable and retry (this will take a few minutes)? (y/N)?
그런 다음 파일을 메인 브랜치로 푸시하면 GitHub Actions가 실행되고 Firebase의 Test Lab에서 테스트가 실행되는 것을 확인할 수 있습니다.
이상입니다.
참고
GitHub Docs-GitHub Actions
[GithubActions] Android 앱을 FirebaseTestLab에 연결하고 Robo 테스트를 실행하기 전의 단계
gcloud 참조-gcloud firebase test android run
Reference
이 문제에 관하여(Android 앱을 GitHubActions로 빌드하고 단위 테스트하고 FirebaseTestLab에서 UI 테스트 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/koichi-ozaki/items/b9c07d312d03d73b705d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)