在 Gradle 中,如何将 Jenkins 内部版本号附加到 Jenkins 管道中的工件版本?

In Gradle, how can I append Jenkins build number to artifact version in a Jenkins pipeline?

Gradle v7.3.3

在我的 gradle.properties 文件中,我将工件版本设置为 2.0

gradle.properties
-----------------

version=2.0

现在,当我进行 Jenkins 构建时,我想将构建号附加到该版本,并发布后续工件。也就是说,我希望神器是

com.company.com:myproject:2.0.<build_number>

我试过了

sh "./gradlew :myproject:clean :myproject:build -x test -PartifactBuildNumber=$env.BUILD_NUMBER -p myproject"
sh "./gradlew publish -x build -x test -PartifactBuildNumber=$env.BUILD_NUMBER -p myproject"

但当然在工件版本中只有 Jenkins 内部版本号,而不是所需的 2.0.<BUILD_NUMBER>。有没有一种优雅的方法可以做到这一点

您有两个简单的选择来实现您想要的:
第一个选项是将 gradle.properties(使用 readProperties)读取到管道中的本地映射中,将版本更新为新值,然后写回文件。
例如:

// Read the properties file and update the version
def props = readProperties file: 'gradle.properties'
props.version = "${props.version}.${env.BUILD_NUMBER}"

// Write back the updated properties file
def content = props.collect{ "${it.key}=${it.value}".join('\n')
writeFile file: 'gradle.properties', text: content

// Run your commands

您现在可以 运行 所有常规 shell 命令,并且将使用更新版本。

第二个选项是读取 gradle.properties,从中提取版本并在您的管道中构建一个新的版本变量,该变量将传递给 shell 命令。
例如:

// Read the properties file and update the version
def props = readProperties file: 'gradle.properties'
def newVersion =  "${props.version}.${env.BUILD_NUMBER}"

// Use the newVersion parameter in your shell steps
sh "./gradlew :myproject:clean :myproject:build -x test -PartifactBuildNumber=${newVersion} -p myproject"
sh "./gradlew publish -x build -x test -PartifactBuildNumber=${newVersion} -p myproject"

如果您有其他步骤依赖于您无法通过更新版本的版本,那么第一个选项可能会适合您,但是如果您可以通过该版本,则第二个选项更容易并且不会'不需要对文件进行任何回火。