简体   繁体   English

离子cordova android构建失败,在大厅ci上说“ Gradle build守护进程退出”

[英]Ionic cordova android build fails on concourse ci by saying “Gradle build daemon got exited”

We are currenly migrating an Ionic android build setup from bamboo to concourse. 我们目前正在将Ionic Android构建设置从Bamboo迁移到Concourse。 The android build using ionic cordova is triggered as one of the commands in a larger concourse-ci job which does npm install first and then does ionic build command. 使用离子cordova的android构建会作为较大的concourse-ci作业中的命令之一触发,该作业先安装npm,然后再执行ionic build命令。

The actual ionic command that fails is : 失败的实际离子命令是:

ionic cordova build android --dev --debug --release --no-interactive --no- confirm --buildConfig --nofetch --minifyjs --minifycss --gradleArg=--no-daemon

As a prerequisite to ionic cordova, I have ensured that gradle is installed correctly in the base docker image by doing wget of the gradle distribution and setting the gradle home environment variable to point to the downloaded gradle binary. 作为离子cordova的先决条件,我通过执行gradle分发的wget并将gradle主页环境变量设置为指向下载的gradle二进制文件,确保gradle已正确安装在基本docker映像中。 Following is the content of the dockerfile : 以下是dockerfile的内容:

FROM runmymind/docker-android-sdk

# make /bin/sh symlink to bash instead of dash:
RUN echo "dash dash/sh boolean false" | debconf-set-selections \
 && DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash

# Installing NodeJS
RUN ARCH=x64 \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
  && curl -SLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
  && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
 && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc \
 && ln -s /usr/local/bin/node /usr/local/bin/nodejs

# Installing gradle
ENV GRADLE_VERSION 3.3
RUN mkdir /opt/gradle \
 && wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
 && unzip -d /opt/gradle gradle-${GRADLE_VERSION}-bin.zip
 ENV GRADLE_HOME /opt/gradle/gradle-${GRADLE_VERSION}/bin
 ENV PATH $PATH:$GRADLE_HOME

When using this docker image; 使用此docker映像时; the docker container comes up and I am able to access the gradle correctly. docker容器出现,我能够正确访问gradle。 However when invoking the above ionic cordova build command after installing cordova7 we get a detailed error message : Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed . The detailed error message is follows : 但是,在安装cordova7之后调用上述离子式cordova build命令时,我们会收到一条详细的错误消息: Gradle build守护进程意外消失(它可能已被杀死或崩溃了 。详细的错误消息如下:

FAILURE: Build failed with an exception. 失败:构建失败,发生异常。

  • What went wrong: 什么地方出了错:

Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed) * Try: Run with --stacktrace option to get the stack trace. Gradle构建守护程序意外消失(它可能已被杀死或崩溃)*尝试:使用--stacktrace选项运行以获取堆栈跟踪。 Run with --info or --debug option to get more log output. 使用--info或--debug选项运行以获取更多日志输出。 Error: /opt/gradle/gradle-3.3/bin/gradle: Command failed with exit code 1 错误:/opt/gradle/gradle-3.3/bin/gradle:命令失败,退出代码为1
[ERROR] An error occurred while running cordova build android --debug --release --buildConfig (exit code 1). [错误]运行cordova build android --debug --release --buildConfig(退出代码1)时发生错误。

We tried using latest gradle build version 4.6 and the problem persist and the gradle daemon gets killed immediately. 我们尝试使用最新的gradle构建版本4.6,但问题仍然存在 ,并且gradle守护程序立即被杀死。 Some of the gradle logs thats gets printed in the concourse ci : 一些gradle日志thats被打印在大厅ci中:

cordova build android --debug --release --buildConfig 科尔多瓦建立android --debug --release --buildConfig

You have been opted out of telemetry. 您已选择退出遥测。 To change this, run: cordova telemetry on. 要更改此设置,请运行:打开cordova遥测。 will push strings array {"name":"lang","titles":["English (US)","English (UK)"],"values":["en-us","en-gb"]} android preferences file was successfully generated ANDROID_HOME=/opt/android-sdk-linux 将推送字符串数组{“ name”:“ lang”,“ titles”:[“ English(US)”,“ English(UK)”],“ values”:[“ en-us”,“ en-gb”] } android偏好设置文件已成功生成ANDROID_HOME = / opt / android-sdk-linux
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 Reading build config file: /tmp/build/80754af9/source/build.json Reading the keystore from: /tmp/build/80754af9/source/Elsa2Go_android.keystore Starting a Gradle Daemon (subsequent builds will be faster) The message received from the daemon indicates that the daemon has disappeared. JAVA_HOME = / usr / lib / jvm / java-8-openjdk-amd64读取构建配置文件:/tmp/build/80754af9/source/build.json从/tmp/build/80754af9/source/Elsa2Go_android.keystore读取密钥库启动Gradle守护程序(后续构建会更快)从该守护程序收到的消息表明该守护程序已消失。
Build request sent: Build{id=a31854f5-a2c8-4248-b580-2ae398dbba4c.1, currentDir=/tmp/build/80754af9/source} Attempting to read last messages from the daemon log... Daemon pid: 731 log file: /root/.gradle/daemon/3.3/daemon-731.out.log 已发送构建请求:Build {id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,currentDir = / tmp / build / 80754af9 / source}尝试从守护程序日志中读取最后一条消息...守护进程pid:731日志文件: /root/.gradle/daemon/3.3/daemon-731.out.log
----- Last 20 lines from daemon log file - daemon-731.out.log ----- 10:01:27.698 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonStartupCommunication] Completed writing the daemon greeting. -----来自守护程序日志文件的最后20行-daemon-731.out.log ----- 10:01:27.698 [DEBUG] [org.gradle.launcher.daemon.bootstrap.DaemonStartupCommunication]完成编写守护程序问候。 Closing streams... 正在关闭信息流...
10:01:27.795 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] stopOnExpiration() called on daemon 10:01:27.799 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] awaitExpiration() called on daemon 10:01:27.800 [DEBUG] [org.gradle.internal.remote.internal.inet.TcpIncomingConnector] Accepted connection from /127.0.0.1:54152 to /127.0.0.1:45644. 10:01:27.795 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] stopOnExpiration()在守护程序上调用10:01:27.799 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] awaitExpiration( )在守护程序10:01:27.800上调用[DEBUG] [org.gradle.internal.remote.internal.inet.TcpIncomingConnector]接受从/127.0.0.1:54152到/127.0.0.1:45644的连接。
10:01:27.801 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] daemon is running. 10:01:27.801 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator]守护程序正在运行。 Sleeping until state changes. 睡觉直到状态改变。 10:01:27.950 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 14: received class org.gradle.launcher.daemon.protocol.Build 10:01:27.950 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection]线程14:接收到类org.gradle.launcher.daemon.protocol.Build
10:01:27.950 [DEBUG] [org.gradle.launcher.daemon.server.DefaultDaemonConnection] thread 14: Received non-IO message from client: Build{id=a31854f5-a2c8-4248-b580-2ae398dbba4c.1, currentDir=/tmp/build/80754af9/source} 10:01:27.951 [INFO] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler] Received command: Build{id=a31854f5-a2c8-4248-b580-2ae398dbba4c.1, currentDir=/tmp/build/80754af9/source}. 10:01:27.950 [DEBUG] [org.gradle.launcher.daemon.server.DefaultDaemonConnection]线程14:从客户端收到非IO消息:Build {id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,currentDir = / tmp / build / 80754af9 / source} 10:01:27.951 [INFO] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler]收到的命令:Build {id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,currentDir = / tmp / build / 80754af9 / source}。 10:01:27.951 [DEBUG] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler] Starting executing command: Build{id=a31854f5-a2c8-4248-b580-2ae398dbba4c.1, currentDir=/tmp/build/80754af9/source} with connection: socket connection from /127.0.0.1:45644 to /127.0.0.1:54152. 10:01:27.951 [DEBUG] [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler]开始执行命令:Build {id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,currentDir = / tmp / build / 80754af9 /源}与连接:从/127.0.0.1:45644到/127.0.0.1:54152的套接字连接。 10:01:27.953 [ERROR] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] Command execution: started DaemonCommandExecution[command = Build{id=a31854f5-a2c8-4248-b580-2ae398dbba4c.1, currentDir=/tmp/build/80754af9/source}, connection = DefaultDaemonConnection: socket connection from /127.0.0.1:45644 to /127.0.0.1:54152] after 0.0 minutes of idle 10:01:27.954 [INFO] [org.gradle.launcher.daemon.server.DaemonRegistryUpdater] Marking the daemon as busy, address: [2f4d8bed-fcce-4001-8cd5-896af7ca9860 port:45644, addresses:[/127.0.0.1]] 10:01:27.954 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Marking busy by address: [2f4d8bed-fcce-4001-8cd5-896af7ca9860 port:45644, addresses:[/127.0.0.1]] 10:01:27.955 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry. 10:01:27.953 [ERROR] [org.gradle.launcher.daemon.server.DaemonStateCoordinator]命令执行:启动了DaemonCommandExecution [command = Build {id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,currentDir = / tmp / build / 80754af9 / source},连接= DefaultDaemonConnection:闲置0.0分钟10:01:27.954 [INFO] [org.gradle.launcher.daemon之后,从/127.0.0.1:45644到/127.0.0.1:54152]的套接字连接。 server.DaemonRegistryUpdater]将守护进程标记为忙,地址:[2f4d8bed-fcce-4001-8cd5-896af7ca9860端口:45644,地址:[/ 127.0.0.1]] 10:01:27.954 [DEBUG] [org.gradle.launcher。 daemon.registry.PersistentDaemonRegistry]按地址标记为忙:[2f4d8bed-fcce-4001-8cd5-896af7ca9860端口:45644,地址:[/ 127.0.0.1]] 10:01:27.955 [DEBUG] [org.gradle.cache.internal .DefaultFileLockManager]正在等待获取守护程序地址排他锁。 10:01:27.956 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired. 10:01:27.956 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]获得了锁定。
10:01:27.957 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry. 10:01:27.957 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager]释放对守护程序的锁定地址注册表。 10:01:27.957 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] resetting idle timer 10:01:27.958 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] daemon is running. 10:01:27.957 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator]重置空闲计时器10:01:27.958 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator]守护程序正在运行。 Sleeping until state changes. 睡觉直到状态改变。 10:01:27.961 [INFO] [org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy] Daemon is about to start building Build{id=a31854f5-a2c8-4248-b580-2ae398dbba4c.1, currentDir=/tmp/build/80754af9/source}. 10:01:27.961 [INFO] [org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy]守护程序即将开始构建Build {id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,currentDir = / tmp / build / 80754af9 / source}。 Dispatching build started information... 10:01:27.967 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 16: dispatching class org.gradle.launcher.daemon.protocol.BuildStarted 10:01:27.996 [DEBUG] [org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment] Configuring env variables: ............. .................. 调度构建开始信息... 10:01:27.967 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection]线程16:调度类org.gradle.launcher.daemon.protocol.BuildStarted 10:01:27.996 [调试] [org.gradle.launcher.daemon.server.exec。EstablishmentBuildEnvironment]配置环境变量:............................. ..

PS : Version information PS:版本信息

  • "ionic": "3.19.0" “ ionic”:“ 3.19.0”
  • "@angular/cli": "1.5.3" “ @ angular / cli”:“ 1.5.3”
  • Android plaftorm : installed in ionic Android plaftorm:安装在离子型

Approaches tried but same issue was observed : 尝试了方法,但观察到相同的问题:

  • Setting the gradle daemon as false in gradle properties by : org.gradle.daemon=false 通过以下 方式 在gradle属性中将gradle守护进程设置为false: org.gradle.daemon = false
  • Setting the heap size to a mininum in gradle properties by : org.gradle.jvmargs=-XX:MaxPermSize=256m -Xms256m -Xmx512m 通过以下 方式 在gradle属性中将堆大小设置为最小值: org.gradle.jvmargs = -XX:MaxPermSize = 256m -Xms256m -Xmx512m
  • Using latest version of gradle 4.6 使用最新版本的Gradle 4.6

Any idea / suggestions as to what is the root cause will be of great help. 关于根本原因的任何想法/建议都会有很大帮助。 Thanks in advance. 提前致谢。

What happens, if you remove the --no-daemon from the args? 如果从args中删除--no-daemon,会发生什么? I mean Gradle says that the preferred way is the deamon since Gradle 3.0 ( https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:disabling_the_daemon ). 我的意思是Gradle说,自Gradle 3.0( https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:disabling_the_daemon )以来,首选方式是守护进程。 Furthermore you don't have a need for it, because Docker provides you a fresh environment. 此外,您不需要它,因为Docker为您提供了全新的环境。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM