java - Jib 插件无法访问由另一个 Gradle 插件更新的 project.version
问题描述
我的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
插件project.version
基于 GitFlow 分支策略进行更新。该publish
任务能够访问gitflowsemver
插件更新的版本,但是当我尝试使用 构建 docker 映像时jib
,它不会用更新的版本标记映像。它总是被标记为unspecified
。但是,如果我取消注释该行version = '0.1.0'
,jib
插件就可以获取该版本。我无法理解为什么。非常感谢任何帮助。
解决方案
更新:Jib 2.6.0现在支持后期评估jib.to.image
和jib.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]
}
}
...
}
推荐阅读
- ios - 无法将 Firebase 导入 Swift Playground
- javascript - 为什么 Promise.all 的错误?:TypeError:无法读取未定义的属性 'Symbol(Symbol.iterator)'
- c# - 使用后台任务启动备份文件夹 UWP
- amazon-web-services - AWS 指标:您的搜索 - 账单 - 与任何指标都不匹配
- apache-spark - 通过采用现有列的比率在 Pyspark DataFrame 中创建新列
- python - 如何使用来自另一个模型的词汇表初始化一个 gensim 模型?
- python - 如何在 Python 中创建 H2O 数据框?
- flutter - 升级后无法在 Flutter 1.12.13+hotfix.5 中构建我的应用
- android - c++ opengl ES 2.0 App在Nvidia shield tablet上仅渲染线框,但在其他设备上正确渲染
- c# - 单例模式在提交 .this 时完成的具体任务是什么?