android - 如何将 firebase 测试实验室与 circleci 集成
问题描述
嗨,我想在 firebase 测试实验室测试我的应用。我想将它与 circleci 集成。我已阅读此文档https://circleci.com/docs/1.0/firebase-test-lab/并创建了 config.yml
我已经GCLOUD_SERVICE_KEY
在 circleci 的环境变量中创建,但它没有在 firebase 测试实验室测试应用程序。
配置.yml
version: 2.0
defaults: &defaults
docker:
- image: circleci/android:api-27-alpha
working_directory: ~/github-jobs
environment:
JAVA_TOOL_OPTIONS: "-Xmx1024m"
GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2 -Dkotlin.incremental=false"
TERM: dumb
gcloud_config: &gcloud_config
working_directory: ~/github-jobs
docker:
- image: google/cloud-sdk:latest
environment:
TERM: dumb
update_sdk: &update_sdk
name: Update SDK
command: |
mkdir "$ANDROID_HOME/licenses" || true
echo "d56f5187479451eabf01fb78af6dfcb131a6481e" > "$ANDROID_HOME/licenses/android-sdk-license"
echo "84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
sdkmanager "platform-tools" "platforms;android-27"
jobs:
build:
<<: *defaults
steps:
- run:
<<: *update_sdk
- checkout
- restore_cache:
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "base/build.gradle" }}-{{ checksum "instantapp/build.gradle" }}-{{ checksum "main/build.gradle" }}-{{ checksum "tv/build.gradle" }}
- run:
name: chmod permissions
command: chmod +x ./gradlew
- run:
name: Download Dependencies
command: ./gradlew dependencies --no-daemon
- save_cache:
paths:
- ~/.gradle
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}-{{ checksum "base/build.gradle" }}-{{ checksum "instantapp/build.gradle" }}-{{ checksum "main/build.gradle" }}-{{ checksum "tv/build.gradle" }}
- run:
name: Assemble APKs
command: ./gradlew assemble --no-daemon
- save_cache:
paths:
- ~/.gradle/caches
- ~/.gradle/wrapper
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
- store_artifacts:
path: app/build/outputs/apk
destination: apks
- store_artifacts:
path: app/build/reports
destination: reports
- store_artifacts:
path: build/dependencyUpdates
destination: dependencyUpdates
- store_test_results:
path: app/build/test-results
- persist_to_workspace:
root: .
paths:
- build
- app/build
# Google Cloud Service
export_gcloud_key: &export_gcloud_key
run:
name: Export Google Cloud Service key environment variable
command: echo 'export GCLOUD_SERVICE_KEY="$GCLOUD_SERVICE_KEY"' >> $BASH_ENV
decode_gcloud_key: &decode_gcloud_key
run:
name: Decode Google Cloud credentials
command: echo $GCLOUD_SERVICE_KEY | base64 -di > ${HOME}/client-secret.json
test_instrumented:
<<: *gcloud_config
steps:
- *export_gcloud_key
- *decode_gcloud_key
- run:
name: Set Google Cloud target project
command: gcloud config set project dazzling-fire-5515
- run:
name: Authenticate with Google Cloud
command: gcloud auth activate-service-account firebase-circleci@dazzling-fire-5515.iam.gserviceaccount.com --key-file ${HOME}/client-secret.json
- run:
name: Run instrumented test on Firebase Test Lab
command: gcloud firebase test android run --type instrumentation --app app/build/outputs/apk/debug/app-debug.apk --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk --device model=Nexus5X,version=26,locale=en_US,orientation=portrait --environment-variables coverage=true,coverageFile=/sdcard/tmp/code-coverage/connected/coverage.ec --directories-to-pull=/sdcard/tmp --timeout 20m
- run:
name: Create directory to store test results
command: mkdir firebase
- run:
name: Download instrumented test results from Firebase Test Lab
command: gsutil -m cp -r -U "`gsutil ls gs://test-lab-3udbiqpdyp0d0-miwcp7d69v80m | tail -1`*" /root/workspace/firebase/
- persist_to_workspace:
root: .
paths:
- firebase
- store_artifacts:
path: firebase/
destination: /firebase/
general:
branches:
only:
- master # list of branches to build
- develop
有谁知道我错过了什么?
解决方案
对于 CirclceCI 2.0,只有Firebase 和 GCP 部署示例;这在这里并不适用……这gcloud
部分相当相关,因为
Using Firebase Test Lab with Continuous Integration Systems的文档引用了它:
gcloud firebase test android run --app <local_server_path>/<app_apk>.apk --test <local_server_path>/<app_test_apk>.apk
在 CircleCI 2.0 上,该gcloud
命令似乎是sudo /opt/google-cloud-sdk/bin/gcloud
. 以及这里描述的,a)如何获取退出代码和 b)它们的实际含义:https ://firebase.google.com/docs/test-lab/android/command-line#running_your_instrumentation_tests
“没有测试应用程序”的问题描述不足以说明究竟是什么问题。我假设,启动仪器测试的命令应该引发一些错误或一些抱怨;请提供更多详细信息(日志)。
我刚刚在 Medium 上找到了一篇文章,这似乎是您正在寻找的内容:All you need to know about CircleCI 2.0 with Firebase Test Lab(还有一篇文章也使用了 FastLane)。
推荐阅读
- django - 如何使用另一个模型查询 django 模型?
- javascript - 在 MorphSVG 中悬停时更改渐变背景
- java - 有什么方法可以通过@ExceptionHandler 将多种错误类型放入一个对象中
- javascript - 使用 chart.js 刷新图表的图像
- html - 使用按钮导入集合多次导入同一个集合 - 邮递员
- php - PHP make json_encode 不要转义双引号
- java - Tomcat 在一段时间后自动取消部署 WAR
- python - 返回与字符串的较大部分字符串匹配的行
- pharo - 如何在 Pharo 6.1 中“归档”?
- asp.net - 正则表达式在 asp.net 中为字符串添加空格