Android Gitlab CI作业在“模拟器:错误:错误:磁盘空间不足,无法运行AVD'testAVD'退出...”

问题描述

您好,目前我正在尝试在Gitlab CI中运行Android工具测试,但是在尝试运行模拟器时,我遇到了“模拟器:错误:磁盘空间不足,无法运行AVD'testAVD'。正在退出...”,然后CI流程只会停留在那里。

Gitlab CI结果

$ echo n | android-sdk-linux/tools/bin/avdmanager create avd -f -n testAVD -k "system-images;android-${ANDROID_COMPILE_SDK};google_apis;x86_64"
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_64
Do you wish to create a custom hardware profile? [no] $ android-sdk-linux/emulator/emulator -avd testAVD -no-audio -no-window &
$ adb wait-for-device
* daemon not running; starting Now at tcp:5037
* daemon started successfully
emulator: ERROR: Not enough disk space to run AVD 'testAVD'. Exiting...

.gitlab-ci.yml

image: openjdk:8-jdk
 variables:
      ANDROID_COMPILE_SDK: "29"
      ANDROID_BUILD_TOOLS: "29.0.3"
      ANDROID_SDK_TOOLS: "4333796"
      CMAKE: "3.10.2.4988404"
    
    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 "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
      - echo y | android-sdk-linux/tools/bin/sdkmanager "ndk-bundle" >/dev/null
      - echo y | android-sdk-linux/tools/bin/sdkmanager "cmake;${CMAKE}" >/dev/null
    
      - export ANDROID_HOME=$PWD/android-sdk-linux/
      - export CMAKE_HOME=$PWD/android-sdk-linux/cmake/${CMAKE}/bin/
      - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/:$CMAKE_HOME
    
      - 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:
      - test
    
    instrumentationTest:
      stage: test
      script:
        - echo y | android-sdk-linux/tools/bin/sdkmanager  "emulator" >/dev/null
        - echo y | android-sdk-linux/tools/bin/sdkmanager "system-images;android-${ANDROID_COMPILE_SDK};google_apis;x86_64"
        - echo n | android-sdk-linux/tools/bin/avdmanager create avd -f -n testAVD -k "system-images;android-${ANDROID_COMPILE_SDK};google_apis;x86_64"
        - android-sdk-linux/emulator/emulator -avd testAVD -no-audio -no-window &
        - adb wait-for-device
        - adb shell input keyevent 82 &
        - android list target
        - ./gradlew connectedAndroidTest

如何设置Gitlab以运行具有足够磁盘空间的Android仿真器?

解决方法

如何设置Gitlab以运行具有足够磁盘空间的Android仿真器?

如果我们与他们的公共共享运行程序谈论公共gitlab.com存储库,那么根据documentation,我们在运行程序上只有25GB的磁盘空间:

您的所有CI / CD作业都在n1-standard-1个实例上运行,这些实例具有3.75GB的RAM,CoreOS和最新的Docker Engine。实例提供1个vCPU和25GB的HDD磁盘空间。

gitlab-shared-runners-manager-X.gitlab.com的Runner团队专门用于GitLab项目以及它们的社区分支。他们使用稍大的计算机类型(n1-standard-2),并且具有更大的SSD磁盘大小。

-换句话说,如果您的项目不是官方GitLab-org存储库的分支,则转轮仅具有25gb的空间

增加流道磁盘空间的其他机会是设置自己的流道:

  1. Install GitLab Runner
  2. 在Runner安装程序中指定gitlab网址:https://gitlab.com/(或您自定义的gitlab安装主机)
  3. 转到http://您的存储库->设置-> CI / CD->展开Runners部分并获取注册令牌,该令牌将在安装过程中被询问
  4. 启动亚军

还要注意,您可以在每次操作之后通过输入下一个命令df -h来调试运行器磁盘的可用空间。像这样:

instrumentationTest:
  stage: test
  script:
    - df -h 
    - echo y | android-sdk-linux/tools/bin/sdkmanager  "emulator" >/dev/null
    - df -h
    - echo y | android-sdk-linux/tools/bin/sdkmanager "system-images;android-${ANDROID_COMPILE_SDK};google_apis;x86_64"
    - df -h
    - echo n | android-sdk-linux/tools/bin/avdmanager create avd -f -n testAVD -k "system-images;android-${ANDROID_COMPILE_SDK};google_apis;x86_64"
    - df -h
    - android-sdk-linux/emulator/emulator -avd testAVD -no-audio -no-window &
    - df -h

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...