Maven
Maven 构建运行程序允许使用 Apache Maven 自动化构建。
请注意,如果某个特定的 Maven 工件已更改,您可以从 URL 自动创建新的基于 Maven 的构建配置,并设置依赖构建触发器。
这个 视频指南 解释了 如何充分利用特定平台的构建运行程序:它以 Maven 为例。
Maven 运行器设置
选项 | 描述 |
---|---|
目标 | 指定您希望 TeamCity 执行的由空格分隔的 Maven 目标序列。 某些 Maven 目标可能会使用版本控制系统,因此它们可能与某些 VCS 检出模式不兼容。 |
POM 文件的路径 | 指定相对于 构建工作目录 的 POM 文件路径。 |
额外的 Maven 命令行参数 | 指定命令行参数的列表。 |
工作目录 | 如果 build working directory 与 build checkout directory 不同,请指定它。 |
Maven 设置
请选择您想要使用的 Maven 版本。 您也可以管理已安装的版本。
设置 | 描述 |
---|---|
<自动> | Maven 的安装路径是从 |
<默认> | 捆绑版本被默认为使用。 查看如何 更改默认设置。 |
<自定义> | 提供一个通往自定义 Maven 版本的路径。 |
用户设置
在此指定要使用哪种用户设置。 这等同于Maven命令行选项 -s
或 --设置
。 可用选项如下:
选项 | 描述 |
---|---|
<默认> | 设置是从代理上的默认 Maven 位置获取的。 对于服务器逻辑,请查看 Maven 服务器端设置。 |
<自定义> | 输入到替代用户设置文件的路径。 路径应在代理和服务器上都有效,请参阅 Maven 服务器端设置。 |
预设设置 | 如果已经通过管理界面将设置文件上传到 TeamCity 服务器,您可以在此处选择一个可用的选项。 要将设置文件上传到 TeamCity ,请点击 管理设置文件。 Maven 设置是在项目级别上定义的。 您可以在当前项目中查看已定义的设置文件,或者在 项目设置 页面上使用 Maven 设置 上传文件。 文件将在项目及其子项目中可用。 上传的文件存储在 |
Java 参数
选项 | 描述 |
---|---|
JDK | 选择一个 JDK。 本节详述了可用的选项。 默认值为 |
JDK 主目录路径 | 当上方选择了 <Custom> 时,此选项便可用。使用此字段来指定用于运行构建的自定义 JDK 的路径。 如果该字段为空,则会从代理机器的 |
JVM 命令行参数 | 附加的 JVM 命令行参数允许您设置初始和最大堆大小,启用额外的日志记录,选择所需的字节码验证器模式等等。 您可以指定标准的(例如以 要指定多个命令行参数,使用空格作为分隔符。 例如: -verbose:gc -Xdiag -Xcomp -Xmx512m -Xms256m |
本地工件库设置
请选择以下选项之一:
选项 | 描述 |
---|---|
按代理(默认) | 使用一个单独的仓库来存储由代理运行的所有构建所生成的工件,这些工件位于代理系统目录下。 |
按构建配置 | 使用一个单独的仓库来存储由当前构建配置的所有构建生成的工件。 |
Maven 默认 | 使用默认的 Maven 仓库位置。 该仓库在机器上的所有构建配置和所有代理间共享。 运行器将使用附加命令行参数 |
增量构建
选择仅构建受更改影响的模块复选框以启用 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 设置中:
在 Perforce VCS 根设置中启用 使用基于票证的身份验证。
确保您的构建代理环境中没有任何偶尔出现的 P4 变量,这可能会干扰 Maven Release Plugin 的执行。
在 Maven 构建步骤的 Goals 字段中指定
release:prepare
,然后运行构建。
使用 Maven Release 配合 Git VCS
要在 Git 中使用此插件,需要在您的 pom.xml
中将 Git SSH URL 设置为 SCM URL。
在 TeamCity 代理上:
确保代理已安装 Git 并已将其添加到 Unix-like OS 的代理的
$PATH
,以及 Windows 的% \PATH%
环境变量中。在代理上,通过执行设置您的帐户的身份
git config --system user.email "buildserver@example.com" git config --system user.name "TeamCity Server"确保您的 Git VCS 已添加到代理的已知主机数据库中。
在 TeamCity 服务器上:
将 Git SSH key 上传到您的 TeamCity 服务器。
在 Build Configuration Settings | Version Control Settings 页面上,启用代理上的检出功能。
在您的 Git VCS 根目录中,启用 Private Key 认证。
将 SSH Agent 构建功能添加到您的配置中。
在 Maven 构建步骤的 Goals 字段中指定
release:prepare
,然后运行构建。
远程运行限制
与 Maven 运行器相关的远程运行限制:
作为一项规定,TeamCity 中的个人构建不会影响在 TeamCity 服务器上运行的任何“常规”构建,而且其结果只对其发起人可见。 然而,如果使用 Maven runner,这种行为可能会有所不同。
TeamCity 不会以任何方式干扰 Maven 依赖模型。 因此,如果您的 Maven 配置将工件部署到远程存储库,即使您运行个人构建,它们也将被部署到那里。 因此,个人构建可能会影响依赖于您的配置的构建。
例如,您有一个配置A,它将工件部署到远程仓库,而这些工件由配置B使用。 当 A 的个人构建完成后,您的个人构建工件将出现在 B 中。 如果配置A用于生成发布版本的工件,这可能会特别有害,因为正确的工件将被开发者的工件替换,由于Maven的版本控制模型,这将很难进行调查。 另外,这些构建工件不仅会对 TeamCity 管理的依赖构建开放,而且向所有依赖的构建开放。
为了避免这种情况,我们建议不要在执行构建工件部署的构建配置中使用远程运行。