【问题标题】:Jib plugin not able to access project.version as updated by another Gradle pluginJib 插件无法访问由另一个 Gradle 插件更新的 project.version
【发布时间】:2020-04-22 14:28:52
【问题描述】:

我的build.gradle 设置如下(为简洁起见仅列出插件)

plugins {
  id 'java'
  id 'maven-publish'
  id 'signing'
  id 'org.springframework.boot' version '2.2.2.RELEASE'
  id 'io.spring.dependency-management' version '1.0.8.RELEASE'
  id 'com.limark.gitflowsemver' version '0.3.1'
  id 'com.google.cloud.tools.jib' version '1.8.0'
}
...
group = 'com.app.my'
// The below line remains commented
// version = '0.1.0' 
...

jib {
  from {
    image = 'azul/zulu-openjdk-alpine:11-jre'
  }
  to {
    image = 'aws_account_id.dkr.ecr.region.amazonaws.com/my-app'
    tags = [version]
  }
  container {
    format = 'OCI'
  }
}

publishing {
  repositories {
    maven {
      def releasesRepoUrl = "http://localhost:8081/repository/maven-releases/"
      def snapshotsRepoUrl = "http://localhost:8081/repository/maven-snapshots/"
      url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
      credentials {
        username nexusUsername
        password nexusPassword
      }
    }
  }
  publications {
    mavenJava(MavenPublication) {
      artifactId = 'my-app'
      from components.java
      pom {
        name = 'My App'
        description = 'My App'
        url = 'https://my-app.com'
        developers {
          developer {
            id = 'john'
            name = 'John Doe'
            email = 'an.emaill@address.here'
          }
        }
        scm {
          connection = 'scm:git:ssh://git@bitbucket.org:acme/my-app.git'
          developerConnection = 'scm:git:ssh://git@bitbucket.org:acme/my-app.git'
          url = 'https://bitbucket.org/acme/my-app'
        }
      }
    }
  }
}

signing {
  sign publishing.publications.mavenJava
}

gitflowsemver plugin 根据 GitFlow 分支策略更新 project.versionpublish 任务能够访问由 gitflowsemver 插件更新的版本,但是当我尝试使用 jib 构建 docker 映像时,它不会使用更新版本标记映像。它总是被标记为unspecified。但是,如果我取消注释 version = '0.1.0' 行,jib 插件能够获取版本。我无法理解为什么。非常感谢任何帮助。

【问题讨论】:

    标签: java gradle plugins jib


    【解决方案1】:

    更新:Jib 2.6.0 现在支持对 jib.to.imagejib.to.tags 的后期评估。您可以使用project.provider 配置它们,它们只会在使用时进行评估。

    jib {
      ...
      to {
        image = 'rishabh9/jib-demo'
        tags = project.provider{[version]}
      }
      ...
    }
    

    对于旧版本的 jib,您可以尝试以前的答案:

    来自 gitter.im/google/jib 上讨论的解决方案

    查看 gitsemver 插件的代码可以看到它在项目评估后更新了版本:https://github.com/OpenLimark/GitFlowSemVerPlugin/blob/develop/src/main/groovy/com/limark/open/gradle/plugins/gitflowsemver/GitFlowSemVerPlugin.groovy#L51

    所以你可以做的就是在 afterEvaluate 块中设置你的标签版本,你就会正确地选择版本:

    jib {
      ...
      to {
        image = 'rishabh9/jib-demo'
        project.afterEvaluate { // <-- so we evaluate version after it has been set
          tags = [version]
        }
      }
      ...
    }
    

    【讨论】:

    • version 哪里来的?项目版本?
    • 如果像我这样的人想知道 version 符合预期的项目版本
    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 2021-03-23
    • 2020-10-10
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多