【问题标题】:CircleCI 2.0 : Error unmarshaling return header; nested exception is:CircleCI 2.0:解组返回标头时出错;嵌套异常是:
【发布时间】:2023-03-16 11:55:01
【问题描述】:

我创建了一些 espresso UI 测试。测试在本地运行良好(模拟器和真实设备)。但是当我试图在 CircleCI 上运行 UI 测试时。我收到此错误日志

任务:app:compileFossDebugAndroidTestKotlin 使用 Kotlin compile daemon 编译不成功 java.rmi.UnmarshalException:解组返回标头时出错;嵌套异常是:

编译后无法清除jar缓存,可能守护进程已经关闭:java.rmi.ConnectException: Connection denied to host: 127.0.0.1;嵌套异常是: java.net.ConnectException:连接被拒绝(连接被拒绝) 无法连接到 kotlin 守护程序。使用后备策略。

拿起JAVA_TOOL_OPTIONS:-Xms512m

任务:app:compileFossDebugAndroidTestKotlin FAILED

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':app:compileFossDebugAndroidTestKotlin' 执行失败。

有关错误日志的更多详细信息,请参阅here

这是我的带有 run-ui-tests 作业的 circleci 的 config.yml 文件

run-ui-tests:
    docker:
      - image: circleci/android@sha256:5cdc8626cc6f13efe5ed982cdcdb432b0472f8740fed8743a6461e025ad6cdfc
    environment:
      JVM_OPTS: -Xmx2048m
      GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false
    steps:
      - checkout
      - run:
          name: ANDROID_HOME
          command: echo "sdk.dir="$ANDROID_HOME > local.properties
      - run:
          name: restore files from ENV
          command: |
            echo $ROCKET_JKS_BASE64 | base64 --decode > Rocket.jks
            echo $ROCKET_PLAY_JSON | base64 --decode > app/rocket-chat.json
      - run:
          name: checkout Rocket.Chat.Kotlin.SDK
          command: git clone https://github.com/RocketChat/Rocket.Chat.Kotlin.SDK.git ../Rocket.Chat.Kotlin.SDK
      - restore_cache:
          key: kotlin-sdk-{{ .Revision }}
      - restore_cache:
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - run:
          name: Accept licenses
          command: yes | sdkmanager --licenses || true
      - run:
          name: Download Dependencies
          command: ./gradlew androidDependencies
      - save_cache:
          paths:
            - ~/.gradle
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - run:
          name: Setup emulator
          command: sdkmanager "system-images;android-22;default;armeabi-v7a" && echo "no" | avdmanager create avd -n test -k "system-images;android-22;default;armeabi-v7a"
      - run:
          name: Launch emulator
          command: export LD_LIBRARY_PATH=${ANDROID_HOME}/emulator/lib64:${ANDROID_HOME}/emulator/lib64/qt/lib && emulator64-arm -avd test -noaudio -no-boot-anim -no-window -accel auto -verbose
          background: true
      - run:
          name: Wait emulator
          command: |
            # wait for it to have booted
            circle-android wait-for-boot
            # unlock the emulator screen
            sleep 30
            adb shell input keyevent 82
      - run:
          name: Run EspressoTests
          command: ./gradlew connectedAndroidTest
      - store_artifacts:
          path: app/build/reports
          destination: reports
      - store_test_results:
          path: app/build/test-results

gradle.properties

android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536m

其他配置

compileSdk version           : 28
targetSdk version            : 28
kotlin version               : '1.3.31'

该项目有 2 种风格:foss 和 play 和 2 种构建类型:调试和发布

我已经尝试了所有可能的解决方案,但没有一个有效。任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: android kotlin android-espresso circleci circleci-2.0


    【解决方案1】:

    将此行添加到config.yml 帮助我避免了此错误

    GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false

    更多信息在这里:https://github.com/circleci/circleci-docs/issues/2945#issuecomment-471637158

    【讨论】:

      【解决方案2】:

      对于很多人来说,添加您已经拥有的 GRADLE_OPTS 行似乎有助于解决他们的解组错误。对我来说,在到达导致解组错误的命令之前,该行实际上破坏了我的所有单元测试。对于我们的构建,我们的 gradle 内存在运行完所有单元测试后被用完。解决方案是在所有单元测试运行之后,但在构建和推送到商店之前清除 gradle 缓存。正如用户 zhukunqian 在 cmets 部分中指出的那样,我们将命令 rm -fr ~/.gradle/daemon/ 添加到我们的 travis 文件中。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。

        最后,我删除了我的 gradle 缓存文件夹(linux: ~/.gradle),这个问题就消失了。

        你可以先尝试杀死gradle deamon。

        更新:我发现原因是禁用 gradle deamon 可以解决这个问题。 将 org.gradle.daemon=false 添加到 gradle.properties

        update2: 对不起,各位,我的ECS(1 cpu,1G内存)内存太低的原因,我添加了1G swap,这个问题就消失了。

        【讨论】:

        • 您能否分享您的 circleci 配置文件或提及我必须用来解决问题的命令。
        • 您好,您可以尝试禁用 gradle 守护进程:org.gradle.daemon=false 我发现这可以解决问题。先杀掉gradle demon。我不知道为什么。
        • 我尝试通过添加 org.gradle.daemon=false 来禁用 gradle 守护进程,但随后它抛出 Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
        • @GOVINDDIXIT 您可以尝试删除 gradle daemon cache 文件夹 rm -fr ~/.gradle/daemon/ 我发现这可以在一台计算机上解决,但另一台计算机仍然无法解决。
        • @GOVINDDIXIT 今天,我多次尝试找出为什么这个问题只出现在我的 linux 计算机上。我发现两台电脑都是ECS,1个cpu,1G内存。所以我想也许内存太低了。我添加了 1G 交换,发现两台计算机上都出现了这个问题。所以我想你可以检查一下内存是否足够,然后试试。
        猜你喜欢
        • 1970-01-01
        • 2011-12-11
        • 2012-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2011-11-26
        • 1970-01-01
        相关资源
        最近更新 更多