docker - Gradle docker build 无限期挂起
问题描述
即使使用完全相同的参数运行,我的构建也会随机运行并随机挂起。我的复制任务后总是卡住(某些部分替换为 )
task createDocker(group: '<placeholder>', type: Docker) {
push = true
dockerfile = file(stageDir.getAbsolutePath()+"/Dockerfile")
project.group = "<placeholder>"
applicationName = "<placeholder>-clusterservice"
tagVersion = "${project.version}"
doFirst {
println ("Copying Dockerfile to staging area:" + stageDir.getAbsolutePath())
copy {
from "${project.projectDir}/src/main/docker/"
include "**/*"
into stageDir
}
println ("Getting artifact")
copy {
from "$distDir/${war.baseName}-${war.version}.war"
rename "${war.baseName}-${war.version}.war", "clusterservice.war"
into stageDir
}
}
}
我用调试标志运行它,这是它工作时的样子:
[16:26:15] : [Step 1/1] 16:25:49.730 [QUIET] [system.out] Getting artifact
[16:26:15] : [Step 1/1] 16:25:50.041 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Execute doFirst {} action for :clusterservice:createDocker'
[16:26:15] : [Step 1/1] 16:25:50.041 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute doFirst {} action for :clusterservice:createDocker' completed
[16:26:15] : [Step 1/1] 16:25:50.041 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute build for :clusterservice:createDocker' started
[16:26:15] : [Step 1/1] 16:25:50.041 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Setting up staging directory.
[16:26:15] : [Step 1/1] 16:25:50.041 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Creating Dockerfile from file /opt/teamcity/agent/work/7fe8da50bfc4c49f/clusterservice/build-gradle/docker/Dockerfile.
[16:26:15] : [Step 1/1] 16:25:50.045 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Determining image tag: <placeholder>/<placeholder>-clusterservice:8.23.0-SNAPSHOT
[16:26:15] : [Step 1/1] 16:25:50.045 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Using the native docker binary.
[16:26:15] : [Step 1/1] 16:26:05.213 [QUIET] [system.out] Sending build context to Docker daemon 194MB
[16:26:15] : [Step 1/1] 16:26:05.213 [QUIET] [system.out] Step 1/33 : FROM <placeholder>/tomcat-openjre8:8.5.40
[16:26:15] : [Step 1/1] 16:26:05.213 [QUIET] [system.out] ---> aa259d3bf785
[16:26:15] : [Step 1/1] 16:26:05.213 [QUIET] [system.out] Step 2/33 : LABEL MAINTAINER 'dev@<placeholder>.com'
[16:26:15] : [Step 1/1] 16:26:05.213 [QUIET] [system.out] ---> Using cache
[16:26:15] : [Step 1/1] 16:26:05.213 [QUIET] [system.out] ---> 14bff4363c7f
...
然后它继续正常构建,没有错误!
这是在完全相同的机器和完全相同的参数上运行的失败构建
[15:53:03] : [Step 1/1] 15:52:37.030 [QUIET] [system.out] Getting artifact
[15:53:03] : [Step 1/1] 15:52:38.608 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Execute doFirst {} action for :clusterservice:createDocker'
[15:53:03] : [Step 1/1] 15:52:38.609 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute doFirst {} action for :clusterservice:createDocker' completed
[15:53:03] : [Step 1/1] 15:52:38.609 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute build for :clusterservice:createDocker' started
[15:53:03] : [Step 1/1] 15:52:38.609 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Setting up staging directory.
[15:53:03] : [Step 1/1] 15:52:38.612 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Creating Dockerfile from file /opt/teamcity/agent/work/7fe8da50bfc4c49f/clusterservice/build-gradle/docker/Dockerfile.
[15:53:03] : [Step 1/1] 15:52:38.645 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Determining image tag: <placeholder>/<placeholder>-clusterservice:8.23.0-SNAPSHOT
[15:53:03] : [Step 1/1] 15:52:38.645 [INFO] [se.transmode.gradle.plugins.docker.DockerTask] Using the native docker binary.
[15:53:03] : [Step 1/1] 15:53:03.859 [LIFECYCLE] [org.gradle.process.internal.health.memory.MemoryManager]
[15:53:03] : [Step 1/1] 15:53:03.859 [DEBUG] [org.gradle.process.internal.health.memory.MemoryManager] Emitting OS memory status event {Total: 33737138176, Free: 26021330944}
[15:53:03] : [Step 1/1] 15:53:03.859 [DEBUG] [org.gradle.launcher.daemon.server.health.LowMemoryDaemonExpirationStrategy] Received memory status update: {Total: 33737138176, Free: 26021330944}
[15:53:03] : [Step 1/1] 15:53:03.859 [DEBUG] [org.gradle.process.internal.health.memory.MemoryManager] Emitting JVM memory status event {Maximum: 1908932608, Committed: 1186463744}
[15:53:08] : [Step 1/1] 15:53:08.859 [DEBUG] [org.gradle.process.internal.health.memory.MemoryManager] Emitting OS memory status event {Total: 33737138176, Free: 26022682624}
[15:53:08] : [Step 1/1] 15:53:08.859 [DEBUG] [org.gradle.launcher.daemon.server.health.LowMemoryDaemonExpirationStrategy] Received memory status update: {Total: 33737138176, Free: 26022682624}
[15:53:08] : [Step 1/1] 15:53:08.859 [DEBUG] [org.gradle.process.internal.health.memory.MemoryManager] Emitting JVM memory status event {Maximum: 1908932608, Committed: 1186463744}
[15:53:11] : [Step 1/1] 15:53:11.450 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] DaemonExpirationPeriodicCheck running
[15:53:11] : [Step 1/1] 15:53:11.450 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire shared lock on daemon addresses registry.
[15:53:11] : [Step 1/1] 15:53:11.450 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
...
它不会出错,并且运行状况检查会重复并无限期地运行(我让它运行了 2 个小时以上),它只是继续挂起而没有任何错误。我不知道它有什么问题,如果我手动运行命令,构建运行完全正常。如果它有效,构建大约需要 7 分钟左右。请帮忙。
解决方案
似乎已经放弃了针对这个特定 docker gradle 插件的项目开发。
如果您在此处https://github.com/Transmode/gradle-docker/issues/119和此处https://github.com/Transmode/gradle-docker/issues/37检查此 github 页面上的问题,您将看到这个问题是几年前报告的,但从未合并过任何修复程序。
还有其他可用的 gradle docker 插件在开发中更加活跃,您可以使用它们。我想到了这个https://github.com/bmuschko/gradle-docker-plugin 。
就个人而言,在厌倦了所有这些之后,我只是在 bash 脚本中重写了所有内容,并使用 gradle 来调用所述脚本,以便进行必要的 docker 配置。
推荐阅读
- python - 熊猫的 itterows 更新问题
- kubernetes - Kubernetes 从 GCR 私有仓库下载镜像
- python - python raises syntax error in environment variable path
- python - 如何从数据框中的第 5 列应用 cummax 逻辑
- monads - 如何在 Idris 中使用 ST 来获得 ReaderT r Maybe a 的功能?
- python - 使用 Python SQLAlchemy 将 JSON 发布到数据库
- centos - Centos iptables 显示规则但没有安装服务
- node.js - 路由处理程序中的函数
- c++ - 如何有效地对满足给定谓词的向量中的所有项目进行操作?
- android - 如何在响应解码 jwt 中获取价值并保存共享首选项