【问题标题】:Gradle clean task with bmuschko/gradle-docker-plugin使用 bmuschko/gradle-docker-plugin 进行 Gradle 清理任务
【发布时间】:2016-06-24 03:49:39
【问题描述】:

我正在尝试创建一个 Gradle 任务,该任务将运行干净、构建,然后从 bmuschko/gradle-docker-plugin 插件运行 buildDockerImage 任务。我可以在命令行中的单独命令中成功运行 clean 任务、构建任务和 buildDockerImage 任务,但是当我尝试创建一个执行所有三个任务的单一任务时,我得到一个错误:

.../config-server/build/docker/state/DockerBuildImage_Decorated (No such file or directory)

看起来 gradle-docker-plugin 正在尝试将某种日志文件添加到 /build/docker/state 目录,但是当我在单个任务中运行 clean、build 和 buildDockerImage 时,该目录不存在。但是,当我在 CLI 中将这些作为单独的命令运行时,该目录存在。


这可行

如果我不尝试清理...它可以正常工作并创建 docker 映像:

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
task buildDockerImage(type: DockerBuildImage) {
  doFirst {
    copy {
      from 'src/main/resources/docker/Dockerfile'
      into 'build/libs'
    }
  }

  inputDir = project.file('build/libs')
  tag = alexFabian + "/" + jar.baseName
}

task myBuildDockerImage(type: Task, dependsOn: ['build' ,'buildDockerImage']) {
  buildDockerImage.mustRunAfter build
}

我的构建目录如下所示:

/classes
/dependency-cache
/docker
/libs
/reports
/resources
/test-results
/tmp 

这失败了

但是当我添加对“干净”任务的依赖时... buildDockerImage 任务失败,因为它找不到 /build/docker 目录

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
task buildDockerImage(type: DockerBuildImage) {
  doFirst {
    copy {
      from 'src/main/resources/docker/Dockerfile'
      into 'build/libs'
    }
  }

  inputDir = project.file('build/libs')
  tag = afabian + "/" + jar.baseName
}

task myBuildDockerImage(type: Task, dependsOn: ['clean', 'build' ,'buildDockerImage']) {
  build.mustRunAfter clean
  buildDockerImage.mustRunAfter build
}

现在我的 build/ 目录看起来像这样(缺少 /docker 目录):

/classes
/dependency-cache
/libs
/reports
/resources
/test-results
/tmp

我得到了这个错误:

Execution failed for task ':buildDockerImage'.
> .../config-server/build/docker/state/DockerBuildImage_Decorated (No such file or directory)

我过去使用过 Maven,并且对 Gradle 很陌生,因此我目前的理解有限。

  • 使用 gradle(包装器):2.11
  • 使用 gradle-docker-plugin : com.bmuschko:gradle-docker-plugin:2.6.6

感谢任何帮助!

【问题讨论】:

  • 为什么你的任务中有doFirst
  • 推测:也许您的copy 部分在清理任务之前执行?尝试从复制部分删除doFirst
  • 好主意@RaGe。我尝试删除doFirst,但构建失败,我得到一个Directory .../build/docker specified for property 'inputDir' does not exist.,所以我假设在没有do的情况下,inputDir行在复制完成之前被执行。

标签: java gradle docker build.gradle gradle-plugin


【解决方案1】:

这是 bmuschko 插件早期版本中的一个错误。 尝试使用新版本。我在使用旧版本('com.bmuschko:gradle-docker-plugin:2.6.6')时遇到了同样的问题,但是当我升级到版本时: com.bmuschko:gradle-docker-plugin:2.6.8 ,它已修复。

https://github.com/bmuschko/gradle-docker-plugin/issues/168

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2022-09-28
    • 2020-07-12
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多