TeamCity On-Premises 2024.03 Help

Maven

Maven 构建运行程序允许使用 Apache Maven 自动化构建。

请注意,如果某个特定的 Maven 工件已更改,您可以从 URL 自动创建新的基于 Maven 的构建配置,并设置依赖构建触发器

这个 视频指南 解释了 如何充分利用特定平台的构建运行程序:它以 Maven 为例。

Maven 运行器设置

选项

描述

目标

指定您希望 TeamCity 执行的由空格分隔的 Maven 目标序列。 某些 Maven 目标可能会使用版本控制系统,因此它们可能与某些 VCS 检出模式不兼容。
要执行此类目标,请在 VCS 检出模式 下拉菜单中选择 "在代理上自动",该菜单位于 版本控制设置 页面。 这使得版本控制系统可以被目标执行软件所使用。 关于如何将 release:prepare 目标与 Perforce Helix Core 一起使用,请参阅 本节

POM 文件的路径

指定相对于 构建工作目录 的 POM 文件路径。
默认情况下,此属性包含一个 pom.xml 文件。 如果您不填写此字段,此字段将自动填入相同的值。 路径也可能指向一个子目录,因此使用了 <子目录>/pom.xml

额外的 Maven 命令行参数

指定命令行参数的列表。

工作目录

如果 build working directorybuild checkout directory 不同,请指定它。

Maven 设置

请选择您想要使用的 Maven 版本。 您也可以管理已安装的版本

设置

描述

<自动>

Maven 的安装路径是从 M2_HOME 环境变量获取的,否则将使用当前的默认版本。

<默认>

捆绑版本被默认为使用。 查看如何 更改默认设置

<自定义>

提供一个通往自定义 Maven 版本的路径。

用户设置

在此指定要使用哪种用户设置。 这等同于Maven命令行选项 -s--设置。 可用选项如下:

选项

描述

<默认>

设置是从代理上的默认 Maven 位置获取的。 对于服务器逻辑,请查看 Maven 服务器端设置

<自定义>

输入到替代用户设置文件的路径。 路径应在代理和服务器上都有效,请参阅 Maven 服务器端设置

预设设置

如果已经通过管理界面将设置文件上传到 TeamCity 服务器,您可以在此处选择一个可用的选项。 要将设置文件上传到 TeamCity ,请点击 管理设置文件。 Maven 设置是在项目级别上定义的。 您可以在当前项目中查看已定义的设置文件,或者在 项目设置 页面上使用 Maven 设置 上传文件。 文件将在项目及其子项目中可用。 上传的文件存储在 <TeamCity 数据目录>/config/projects/%projectID%/pluginData/mavenSettings 目录中。 如果有必要,他们可以在那里直接进行编辑。 上传的文件既用于代理端,也用于服务器端 Maven 功能。
如果使用了自定义或预设的设置,那么在 maven 进程中,可以使用 teamcity.maven.userSettings.path 系统属性来获取有效用户设置文件的路径。

Java 参数

选项

描述

JDK

选择一个 JDK。 本节详述了可用的选项。 默认值为 JAVA_HOME 环境变量或代理自身的 Java。

JDK 主目录路径

当上方选择了 <Custom> 时,此选项便可用。使用此字段来指定用于运行构建的自定义 JDK 的路径。 如果该字段为空,则会从代理机器的 JAVA_HOME 环境变量或在 构建代理配置 文件( buildAgent.properties )中指定的 env.JAVA_HOME 属性读取JDK Home的路径。 如果这些值未被指定,TeamCity 将使用构建代理进程本身的 Java home。

JVM 命令行参数

附加的 JVM 命令行参数允许您设置初始和最大堆大小,启用额外的日志记录,选择所需的字节码验证器模式等等。

您可以指定标准的(例如以 - 开始,例如 -verbose:[class|module|gc|jni]--dry-run )和非标准的(例如以 -X 开始,例如 -Xmx<size>-XstartOnFirstThread )JVM 选项。

要指定多个命令行参数,使用空格作为分隔符。 例如:

-verbose:gc -Xdiag -Xcomp -Xmx512m -Xms256m

本地工件库设置

请选择以下选项之一:

选项

描述

按代理(默认)

使用一个单独的仓库来存储由代理运行的所有构建所生成的工件,这些工件位于代理系统目录下。

按构建配置

使用一个单独的仓库来存储由当前构建配置的所有构建生成的工件。

Maven 默认

使用默认的 Maven 仓库位置。 该仓库在机器上的所有构建配置和所有代理间共享。

运行器将使用附加命令行参数 -Dmaven.repo.local 中指定的位置。 如果未指定参数,它将在 settings.xml 中搜索设置的值。

增量构建

选择仅构建受更改影响的模块复选框以启用 Maven 模块的增量构建。
增量构建的一般概念是只处理更改过的模块,而不花时间重新处理其所关联的未更改模块。 TeamCity 使用此方法仅针对已更改的 Maven 模块运行测试,从而在重新运行构建或构建链时节省时间。

由于 Maven 本身对增量构建的支持非常有限,TeamCity 使用自己的变更影响分析算法来确定受影响模块的集合,并使用一个特殊的预备阶段来制定受影响模块的依赖关系。

首先,TeamCity 执行自身的变更影响分析,考虑到父子关系和不同的依赖范围,并确定受影响的模块。 然后,构建被分为两个顺序的 Maven 执行。

第一个叫做准备阶段的 Maven 执行旨在构建受影响模块的依赖项。 准备阶段的目的是确保在第二次执行过程中,由于依赖类的缺失或不一致,不会出现编译器或其他错误。

第二次 Maven 执行称为主阶段,执行主要目标(例如, test ),因此只执行受更改影响的那些测试。

另外,查看有关此主题的相关 博客文章

Docker 设置

在这个部分,您可以指定一个将被 用于运行构建步骤 的 Docker 镜像。

Code Coverage(代码覆盖率)

Maven 构建运行程序支持基于 IDEA 覆盖引擎的代码覆盖率。 要了解如何配置代码覆盖率选项,请参阅 配置 Java 代码覆盖率 页面。

如果您在同一台机器上安装了多个构建代理,默认情况下它们使用相同的本地仓库。 然而,有两种方法可以为每个构建代理分配自定义本地存储库:

  • teamcity-agent/conf/buildAgent.properties 中指定以下属性:

    system.maven.repo.local=%system.agent.work.dir%/<subdirectory_name>

    例如, %system.agent.work.dir%/m2-repository

  • 在不同的用户帐户下运行每一个构建代理。

Maven 发布与不同的 VCSs

要在 TeamCity 支持的不同 VCS 上运行 release:prepare Maven 任务,请确保您使用的至少是 Maven Release 插件 的 2.0 版本。

使用 Maven Release 配合 Perforce

Maven Release 插件需要一个 ticket 才能在 Perforce 中进行身份验证。

在您的 TeamCity 构建配置中的 Perforce VCS root 设置中:

  1. 启用 checkout on agent

  2. 在 Perforce VCS 根设置中启用 使用基于票证的身份验证

  3. 确保您的构建代理环境中没有任何偶尔出现的 P4 变量,这可能会干扰 Maven Release Plugin 的执行。

  4. 在 Maven 构建步骤的 Goals 字段中指定 release:prepare ,然后运行构建。

使用 Maven Release 配合 Git VCS

要在 Git 中使用此插件,需要在您的 pom.xml 中将 Git SSH URL 设置为 SCM URL

在 TeamCity 代理上:

  1. 确保代理已安装 Git 并已将其添加到 Unix-like OS 的代理的 $PATH ,以及 Windows 的 % \PATH% 环境变量中。

  2. 在代理上,通过执行设置您的帐户的身份

    git config --system user.email "buildserver@example.com" git config --system user.name "TeamCity Server"
  3. 确保您的 Git VCS 已添加到代理的已知主机数据库中。

在 TeamCity 服务器上:

  1. Git SSH key 上传到您的 TeamCity 服务器。

  2. Build Configuration Settings | Version Control Settings 页面上,启用代理上的检出功能。

  3. 在您的 Git VCS 根目录中,启用 Private Key 认证。

  4. SSH Agent 构建功能添加到您的配置中。

  5. 在 Maven 构建步骤的 Goals 字段中指定 release:prepare ,然后运行构建。

远程运行限制

与 Maven 运行器相关的远程运行限制:

作为一项规定,TeamCity 中的个人构建不会影响在 TeamCity 服务器上运行的任何“常规”构建,而且其结果只对其发起人可见。 然而,如果使用 Maven runner,这种行为可能会有所不同。

TeamCity 不会以任何方式干扰 Maven 依赖模型。 因此,如果您的 Maven 配置将工件部署到远程存储库,即使您运行个人构建,它们也将被部署到那里。 因此,个人构建可能会影响依赖于您的配置的构建。
例如,您有一个配置A,它将工件部署到远程仓库,而这些工件由配置B使用。 当 A 的个人构建完成后,您的个人构建工件将出现在 B 中。 如果配置A用于生成发布版本的工件,这可能会特别有害,因为正确的工件将被开发者的工件替换,由于Maven的版本控制模型,这将很难进行调查。 另外,这些构建工件不仅会对 TeamCity 管理的依赖构建开放,而且向所有依赖的构建开放。
为了避免这种情况,我们建议不要在执行构建工件部署的构建配置中使用远程运行。

最后修改日期: 16日 7月 2024年