1
votes

CircleCI 2.0: Erreur lors de la suppression de l'en-tête de retour; l'exception imbriquée est:

J'ai créé des tests d'interface utilisateur d'espresso. Les tests fonctionnent correctement localement (émulateur et appareil réel). Mais lorsque j'essaye d'exécuter le test de l'interface utilisateur sur CircleCI. Je reçois ce journal des erreurs

Tâche: app: compileFossDebugAndroidTestKotlin La compilation avec le démon de compilation Kotlin n'a pas réussi java.rmi.UnmarshalException: Erreur lors de la suppression de l'en-tête de retour; l'exception imbriquée est:

Impossible de vider le cache jar après la compilation, peut-être que le démon est déjà en panne: java.rmi.ConnectException: Connexion refusée à l'hôte: 127.0.0.1; l'exception imbriquée est: java.net.ConnectException: connexion refusée (connexion refusée) Impossible de se connecter au démon kotlin. Utilisation de la stratégie de secours.

Récupération de JAVA_TOOL_OPTIONS: -Xms512m

Tâche: app: compileFossDebugAndroidTestKotlin FAILED

ÉCHEC: la construction a échoué avec une exception.

  • Ce qui n'a pas fonctionné: L'exécution a échoué pour la tâche ': app: compileFossDebugAndroidTestKotlin'.

Plus de détails sur le journal des erreurs sont disponibles ici a >

Voici mon fichier config.yml pour circleci avec la tâche run-ui-tests

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

gradle.properties

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

Autre configuration

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

Le projet a 2 saveurs: foss et play et 2 types de build: debug et release

J'ai essayé toutes les solutions possibles mais aucune ne fonctionne. Toute aide serait appréciée. Merci


0 commentaires

3 Réponses :


0
votes

Je rencontre le même problème.

Et enfin, je supprime mon dossier de cache gradle (linux: ~ / .gradle), et ce problème disparaît.

Vous pouvez d'abord essayer de tuer Gradle Deamon.

mise à jour: j'ai trouvé que la désactivation du démon gradle peut résoudre ce problème. ajoutez org.gradle.daemon = false à gradle.properties

update2: désolé, tout le monde, la raison pour laquelle ce momery est trop bas sur mon ECS (1 cpu, 1G de mémoire), j'ajoute un swap 1G et ce problème disparaît.


8 commentaires

pouvez-vous partager votre fichier de configuration circleci ou mentionner les commandes que je dois utiliser pour résoudre le problème.


salut, vous pouvez essayer de désactiver le démon gradle: org.gradle.daemon = false J'ai trouvé que cela pouvait résoudre le problème. Tuez d'abord le démon gradle. Je ne sais pas pourquoi.


J'ai essayé de démanteler le démon gradle en ajoutant org.gradle.daemon = false mais ensuite il lance Le démon de compilation Gradle a disparu de manière inattendue (il a peut-être été tué ou s'est peut-être écrasé)


@GOVINDDIXIT vous pouvez essayer de supprimer le dossier de cache du démon gradle rm -fr ~ / .gradle / daemon / J'ai trouvé que cela peut être résolu sur un ordinateur, mais un autre ordinateur ne peut toujours pas le résoudre.


@GOVINDDIXIT aujourd'hui, j'ai essayé plusieurs fois de découvrir pourquoi ce problème ne se produit que sur mon ordinateur Linux. J'ai trouvé que les deux ordinateurs étaient ECS avec 1 processeur, 1G de mémoire. Donc je pense que la mémoire est peut-être trop faible. J'ai ajouté un swap 1G et j'ai trouvé ce problème disparaître sur les deux ordinateurs. donc je pense que vous pouvez vérifier si la mémoire est suffisante et essayer.


Il y a une mise à jour de mon côté, j'ai fait quelques changements dans la configuration et les tests commencent à s'exécuter mais pour la deuxième fois, il lance Impossible de vider le cache jar après la compilation, peut-être que le démon est déjà en panne: java.rmi.ConnectException: Connection refusé d'héberger: 127.0.0.1; l'exception imbriquée est: java.net.ConnectException: connexion refusée (connexion refusée) première fois: circleci.com/gh/GOVINDDIXIT/Rocket.Chat.Android/878 deuxième fois: circleci.com/gh/GOVINDDIXIT/Rocket.Chat.Android/885


salut, @GOVINDDIXIT, sur mon ordinateur, cette exception se lève à chaque fois avec UnmarshalException. Après avoir ajouté un échange 1G, les deux exceptions disparaissent et la construction réussit.


Pouvez-vous partager votre fichier de configuration de circleci de travail, les circleci ont par défaut 4 Go de RAM. Comment ajoutez-vous de la mémoire d'échange?



1
votes

Pour beaucoup de gens, il semble que l'ajout de la ligne GRADLE_OPTS que vous avez déjà a aidé à résoudre leur erreur de démarshaling. Pour moi, cette ligne a en fait cassé tous mes tests unitaires avant d'arriver à la commande qui provoque l'erreur de démarshaling. Pour notre build, notre mémoire gradle a été utilisée après l'exécution de tous nos tests unitaires. La solution consistait à vider le cache gradle après l'exécution de tous les tests unitaires, mais avant la création et le transfert vers le magasin. Nous avons ajouté la commande rm -fr ~ / .gradle / daemon / à notre fichier travis comme l'a indiqué l'utilisateur zhukunqian dans la section commentaires.


0 commentaires

1
votes

L'ajout de cette ligne à config.yml m'a aidé à éviter cette erreur

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

plus d'infos ici: https://github.com/circleci / circleci-docs / issues / 2945 # issuecomment-471637158


0 commentaires