如何防止line在build.gradle中运行?

时间:2019-09-25 23:28:10

标签: spring-boot docker gradle

我目前有一个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”时,在buildDockerSandbox任务运行时,行“ project.group ='gcr.io/prod'”被注册,从而导致为错误的环境标记映像。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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