我正在尝试在gitlab-ci中设置检测测试。但是,作业停留在以下消息的位置:
PANIC:缺少'x86'CPU的模拟器引擎程序。
这是我正在使用的ci配置。管道构建成功运行到测试阶段(debugTests),但最终在instrumentation_tests处失败。
image: openjdk:8-jdk
variables:
ANDROID_COMPILE_SDK: "28"
ANDROID_BUILD_TOOLS: "28.0.3"
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 "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 ANDROID_AVD_HOME=$HOME/.android/avd
- export ANDROID_SDK_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- export PATH=$PATH:$PWD/android-sdk-linux/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
- quality_assurance
- deploy
build_job:
stage: build
script:
- ./gradlew clean assembleRelease
artifacts:
paths:
- app/build/outputs/
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
instrumentation_tests:
stage: test
script:
- wget --quiet --output-document=android-wait-for-emulator https://raw.githubusercontent.com/travis-ci/travis-cookbooks/0f497eb71291b52a703143c5cd63a217c8766dc9/community-cookbooks/android-sdk/files/default/android-wait-for-emulator
- chmod +x android-wait-for-emulator
- echo y | ${ANDROID_HOME}/tools/bin/sdkmanager "system-images;android-${ANDROID_COMPILE_SDK};google_apis_playstore;x86"
- echo y | ${ANDROID_HOME}/tools/bin/sdkmanager --update
- echo no | ${ANDROID_HOME}/tools/bin/avdmanager create avd -k "system-images;android-${ANDROID_COMPILE_SDK};google_apis_playstore;x86" -n test
- emulator -list-avds
- emulator -avd test -no-window -no-audio &
# - emulator -avd testAVD -no-audio -no-window &
# - adb wait-for-device
- ./android-wait-for-emulator
- adb devices
- adb shell settings put global window_animation_scale 0 &
- adb shell settings put global transition_animation_scale 0 &
- adb shell settings put global animator_duration_scale 0 &
- adb shell input keyevent 82 &
- ./gradlew connectedAndroidTest
- ./ci/stop-emulators.sh
artifacts:
name: "reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
when: on_failure
expire_in: 4 days
paths:
- app/build/reports/androidTests/connected/
static_analysis:
stage: quality_assurance
script:
- ./gradlew lint
- ./gradlew checkstyle
- ./gradlew pmd
- ./gradlew findbugs
artifacts:
name: "reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
when: on_failure
expire_in: 4 days
paths:
- app/build/reports/
deploy_internal:
stage: deploy
script:
- bundle exec fastlane android deploy_lane
when: manual
以下是作业失败并出现超时错误之前的几行日志。
$ echo no | ${ANDROID_HOME}/tools/bin/avdmanager create avd -k "system-
images;android-${ANDROID_COMPILE_SDK};google_apis_playstore;x86" -n test
Loading local repository...
[========= ] 25% Loading local repository...
[========= ] 25% Fetch remote repository...
[========= ] 25% Fetch remote repository...
[========= ] 25% Fetch remote repository...
[=======================================] 100% Fetch remote repository...
Auto-selecting single ABI x86
Do you wish to create a custom hardware profile? [no] $ emulator -list-avds
test
$ emulator -avd test -no-window -no-audio &
$ ./android-wait-for-emulator
PANIC: Missing emulator engine program for 'x86' CPU.
Waiting for emulator to start
Pulling docker image gitlab/gitlab-runner-helper:x86_64-4745a6f3 ...
ERROR: Job failed: execution took longer than 1h0m0s seconds
您正在使用工具文件夹中错误的“遗留”模拟器二进制文件。而是从模拟器sdk文件夹安装和使用emulator
。
sdkmanager "emulator"
$ANDROID_HOME/emulator/emulator -avd test ...
请将android SDK放在您的自定义docker镜像上,它可能很有用。