【问题标题】:How to prevent line from getting run in build.gradle?如何防止线路在 build.gradle 中运行?
【发布时间】:2020-01-26 04:44:42
【问题描述】:

我目前有一个 gradle 应用程序,并且正在使用 gradle-docker 插件。

我的 build.gradle 文件中有两个 Docker 任务,每个任务都应该为相应的 Container Registry(由 project.group 指定)标记一个映像:

task buildDockerSandbox(type: Docker) {
    project.group = 'gcr.io/sandbox'
    baseImage "java:8"
    runCommand("mkdir a")
    addFile("a.jar", "a/")
    workingDir("/a")
    entryPoint(["java", "-Dspring.profiles.active=sandbox", "-jar", "a.jar"])
}

task buildDockerProd(type: Docker) {
    project.group = 'gcr.io/prod'
    baseImage "java:8"
    runCommand("mkdir b")
    addFile("b.jar", "b/")
    workingDir("/b")
    entryPoint(["java", "-Dspring.profiles.active=prod", "-jar", "b.jar"])
}

但是,当我运行“gradle buildDockerSandbox”时,“project.group = 'gcr.io/prod'”行在 buildDockerSandbox 任务运行时被注册,导致图像被标记为错误的环境。

为了防止这种情况发生,我需要禁用未在实际运行“project.group = {group}”行中运行的任务,但不知道如何。

预期结果: 运行“gradle buildDockerSandbox”将图像标记为“gcr.io/sandbox:{applicationName}”并运行“gradle buildDockerProd”将图像标记为“gcr.io/prod: {applicationName}”。

实际结果:两个任务都将图像标记为“gcr.io/prod:{applicationName}”

【问题讨论】:

    标签: spring-boot docker gradle


    【解决方案1】:

    您在任务的闭包中添加的内容会在 Gradle 配置任务时应用,而不是在实际运行它们时应用。所以在这种情况下,您定义了两个任务,并且它们都设置了一个共享属性project.group。因此,无论您实际打算运行哪个任务,最后配置的任务都会“获胜”。

    有许多可用的 Gradle Docker 插件,在我看来,您使用的是来自 Transmode 的那个。从文档来看,您似乎无法在同一个 Gradle 项目中构建两个具有不同 Docker 存储库名称的映像。所以我想说你的选择是在构建图像后自己设置名称(例如在 doLast 块中),将其拆分为两个 Gradle 项目,或者使用另一个更可定制的 Docker 插件。来自bmuschko 的可能是使用最广泛且功能最丰富的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-17
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2015-12-20
      相关资源
      最近更新 更多