Ionic cordova android build在concourse ci上失败,说" Gradle build daemon退出"

时间:2018-03-15 10:57:32

标签: android docker ionic-framework gradle concourse

我们目前正在将一个离子的Android构建设置从竹子迁移到大厅。使用离子cordova的android构建是作为更大的concourse-ci作业中的一个命令触发的,它首先执行npm安装,然后执行离子构建命令。

失败的实际离子命令是:

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

作为离子cordova的先决条件,我确保通过执行gradle分配的wget并将gradle home环境变量设置为指向下载的gradle二进制文件,将gradle正确安装在基本docker镜像中。以下是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

使用此泊坞窗图像时; docker容器出现,我能够正确访问gradle。但是在安装cordova7之后调用上面的ionic cordova build命令时,我们收到一条详细的错误信息: Gradle构建守护程序意外消失(可能已被杀死或可能已崩溃。详细错误消息如下:

  

失败:构建因异常而失败。

     
      
  • 出了什么问题:
  •   
     

Gradle build守护程序意外消失(它可能已被杀死   或者可能已经崩溃了)   *尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。错误:/opt/gradle/gradle-3.3/bin/gradle:命令失败,退出代码为1
  [错误]运行cordova build android --debug时发生错误    - 发布           --buildConfig(退出代码1)。

我们尝试使用最新的gradle build版本4.6并且问题仍然存在并且gradle守护程序立即被杀死。一些gradle日志将在大厅ci中打印出来:

  
    

cordova build android --debug --release --buildConfig

  
     

您已选择退出遥测。要更改此设置,请运行:cordova   遥测。将推送字符串数组   {"姓名":" lang","标题":["英语(美国)","英语   (英国)"],"价值观":[" en-us"," en-gb"]} android偏好文件被   成功生成ANDROID_HOME = / opt / android-sdk-linux
  JAVA_HOME = / usr / lib / jvm / java-8-openjdk-amd64阅读构建配置   file:/tmp/build/80754af9/source/build.json阅读密钥库   来自:/tmp/build/80754af9/source/Elsa2Go_android.keystore开始   Gradle守护进程(后续构建将更快)消息   从守护进程收到的信息表明该守护进程已经消失   发送构建请求:构建{id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,   currentDir = / tmp / build / 80754af9 / source}试图读完最后一个   来自守护程序日志的消息...守护进程pid:731        日志文件:/root/.gradle/daemon/3.3/daemon-731.out.log
  -----来自守护程序日志文件的最后20行 - 守护程序-731.out.log ----- 10:01:27.698 [DEBUG]   [org.gradle.launcher.daemon.bootstrap.DaemonStartupCommunication]   完成了守护进程的问候。关闭流......
  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 [调试]   [org.gradle.internal.remote.internal.inet.TcpIncomingConnector]   接受从/127.0.0.1:54152到/127.0.0.1:45644的连接。
  10:01:27.801 [调查]   [org.gradle.launcher.daemon.server.DaemonStateCoordinator]守护进程是   运行。睡觉直到状态改变。 10:01:27.950 [调查]   [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection]   线程14:收到类org.gradle.launcher.daemon.protocol.Build
  10:01:27.950 [调查]   [org.gradle.launcher.daemon.server.DefaultDaemonConnection]主题14:   从客户端收到非IO消息:   建立{ID = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,   currentDir = / tmp / build / 80754af9 / source} 10:01:27.951 [INFO]   [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler]   收到命令:构建{id = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,   currentDir = / TMP /构建/ 80754af9 /源}。 10:01:27.951 [调试]   [org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler]   开始执行命令:   建立{ID = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,   currentDir = / tmp / build / 80754af9 / source} with connection:socket   从/127.0.0.1:45644到/127.0.0.1:54152的连接。 10:01:27.953   [错误] [org.gradle.launcher.daemon.server.DaemonStateCoordinator]   命令执行:启动DaemonCommandExecution [command =   建立{ID = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,   currentDir = / tmp / build / 80754af9 / source},connection =   DefaultDaemonConnection:从/127.0.0.1:45644到的套接字连接   /127.0.0.1:54152]闲置0.0分钟后10:01:27.954 [INFO]   [org.gradle.launcher.daemon.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 port: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]获取锁定。
  10:01:27.957 [调试]   [org.gradle.cache.internal.DefaultFileLockManager]释放锁定   守护进程解决注册表问题。 10:01:27.957 [调试]   [org.gradle.launcher.daemon.server.DaemonStateCoordinator]重置   idle timer 10:01:27.958 [DEBUG]   [org.gradle.launcher.daemon.server.DaemonStateCoordinator]守护进程是   运行。睡觉直到状态改变。 10:01:27.961 [INFO]   [org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy]   守护进程即将开始建设   建立{ID = a31854f5-a2c8-4248-b580-2ae398dbba4c.1,   currentDir = / TMP /构建/ 80754af9 /源}。调度构建已开始   信息...... 10:01:27.967 [调查]   [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection]   线程16:调度类   org.gradle.launcher.daemon.protocol.BuildStarted 10:01:27.996   [DEBUG]   [org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment]   配置env变量:............. ..................

P.S:版本信息

  • " ionic":" 3.19.0"
  • " @ angular / cli":" 1.5.3"
  • Android plaftorm:安装在离子

尝试了方法,但观察到同样的问题:

  • 在gradle属性中将gradle守护程序设置为false: org.gradle.daemon = false
  • 通过以下方式将堆大小设置为gradle属性中的最小值: org.gradle.jvmargs = -XX:MaxPermSize = 256m -Xms256m -Xmx512m
  • 使用最新版本的gradle 4.6

关于什么是根本原因的任何想法/建议都会有很大的帮助。 提前致谢。

1 个答案:

答案 0 :(得分:0)

如果从args中删除--no-daemon,会发生什么? 我的意思是Gradle说,首选的方法是自Gradle 3.0(https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:disabling_the_daemon)以来的守护。 此外,您不需要它,因为Docker为您提供了一个全新的环境。