如何在 UI 上使用 TFS 将构建版本注入 pom.xml?

Posted

技术标签:

【中文标题】如何在 UI 上使用 TFS 将构建版本注入 pom.xml?【英文标题】:How do I inject build version into pom.xml using TFS on UI? 【发布时间】:2019-02-11 19:25:36 【问题描述】:

我有一个 TFS 构建定义,它处理使用 Maven 构建的 java spring 后端应用程序。我有一个名为“Maven pom.xml”的构建步骤,显然可以在其中设置 pom.xml 的一些选项。

我需要在构建时使用 TFS 更改 pom.xml 中的“版本”标签,以便执行器中的“信息”端点提供正确的版本号,包括 TFS 内部版本号。

1) 这完全可以使用 TFS UI 吗?

2) 如果是,我应该更改“选项”文本框内容还是“MAVEN_OPTS”以及如何在其中提供参数,更改 pom.xml 中的<version>

【问题讨论】:

我想知道负面的观点是什么。 【参考方案1】:

“Maven”构建任务无法实现。但是还有其他一些方法可以做到这一点。例如,您可以使用一些构建任务,如 Replace Tokens 或 Tokenization 将 pom.xml 中的值替换为构建版本。或者您可以在构建定义中添加一个 Powershell 脚本任务来更新 pom.xml。

【讨论】:

我相信可以,如果我证明可行,我会发布解决方案。【参考方案2】:

是的,这是可能的。请按以下步骤操作:

1) 在以“包”为目标的 Maven 构建任务之前创建另一个 Maven 构建步骤。

2) 将“目标”设置为:

versions:set -DnewVersion=[VersionInformation] -DskipTests

[VersionInformation] 可以是表示所需版本的任何字符串。您可以在此处使用 TFS 变量。此字符串的示例可能是:2.3.5.$(Build.BuildNumber)-RELEASE,因此您的版本目标:设置 maven 构建任务如下所示:

versions:set -DnewVersion=2.3.5.$(Build.BuildNumber)-RELEASE -DskipTests

保存您的更改。这样,/target/classes/META-INF 文件夹下的 build-info.properties 文件将包含您将通过“info”执行器提供的版本号。

3) 如果您需要将构建输出复制到另一个位置,请确保您也复制了 META-INF 文件夹。如果您当前的复制步骤没有将该文件夹复制到您的最终放置位置;

一个。在构建步骤之后创建一个“复制文件”构建步骤。

b.将“$(build.sourcesdirectory)/target/classes/META-INF”写入“源文件夹”文本框。

c。将 * 写入内容文本框。这将复制 META-INF 中的所有文件以防万一。

d。将“/classes/META-INF”附加到目标文件夹文本框中的正常放置位置,以便将 META-INF 文件复制到正确的位置。

e。保存您的更改。

这样,您的构建定义会正确设置版本信息并将必要的文件复制到您的放置位置。要访问您的版本信息,请使用您的“信息”执行器端点。

【讨论】:

以上是关于如何在 UI 上使用 TFS 将构建版本注入 pom.xml?的主要内容,如果未能解决你的问题,请参考以下文章

在 TFS 构建配置上缺少 Visual Studio 的最新版本 2019 [重复]

如何在不使用 assemblyinfo 的情况下使用 TFS 构建自动增加版本号?

使用 vNext 构建后将内部版本号与 TFS 工作项相关联

NUnit3 测试不在 TFS 构建上运行

TFS 2015:如何排除某些文件夹触发使用 Git 构建

TFS 构建定义将构建定义转换为脚本或版本