TeamCity On-Premises 2024.03 Help

将 TeamCity 与 Perforce 集成

这篇文章描述了如何将 TeamCity 与 Perforce Helix Core 集成:

  • 构建存储在 Helix Core 仓库中的项目源代码。

  • 使用 Perforce 流作为功能分支,并独立于彼此构建它们的源代码。

  • 在搁置的变更列表中对预测试和预构建文件进行处理。

  • 将自动标签应用于数据源。

  • 向 Perforce Helix Swarm 中的代码审查报告构建状态。

前提条件

  • TeamCity 支持从 Helix Core 2017.1 开始的 Perforce Helix Core 服务器 / 客户端。

  • TeamCity 服务器机器上必须安装 Perforce Helix Core 客户端。

  • PATH 环境变量中添加 Perforce 客户端的路径。
    或者,可以通过 内部属性 teamcity.perforce.customP4Path 设置到 p4 的完整路径。 属性值必须包含 p4 文件名。

在 Perforce Helix Core 源上运行构建

为了能够在存储在 Perforce Helix Core 中的项目源码上运行构建,并使用本文中描述的所有功能,您需要执行两个程序:

  1. 在 TeamCity 中创建一个专用项目:

    1. 进入 Administration | Projects,然后点击 Create project
      请注意,这将会将项目直接添加到 Root project 下面。 或者,您可以将其添加到任何其他现有的项目中。

    2. 输入项目的 NameID

    3. 点击 Create

  2. 创建一个 Perforce VCS 根:

    1. 项目设置 中,前往 VCS 根目录

    2. 点击 Create VCS root

    3. 选择 Perforce Helix Core 作为 VCS 类型。

    4. 按照这篇文章中的说明配置根的设置。

在项目和 Perforce 根配置完成后,您可以继续进行 添加构建配置 并运行构建。

在 Perforce Streams 上运行构建

TeamCity可以监控Perforce streams中的提交,并像处理常规feature branches一样与之进行操作。

如果一个 Perforce root 被配置为使用 Stream 模式,您可以在 root 设置中启用功能分支支持。 在启用后,所有将指定主流作为父级的流都将被包含到由 TeamCity 处理的 功能分支 集合中。 为了只将特定的流包含到此集合中,请编辑分支规范以过滤这些流。 每个过滤规则应从新的一行开始。 语法是 +|-:stream_name。 例如,使用 +://stream-depot/* 仅监控位于 stream-depot 仓库中的流,其中, * (例如, master )是逻辑分支名称。 请注意,分支规格中使用的流应为主流的后代。

TeamCity可以处理任务流,但它只有在对任务流进行了非合并提交时才能检测到新的任务流。

在 IntelliJ IDE 中对 Streams 运行构建

您可以从 IntelliJ 平台的 IDE 启动一个 remote build run,但前提是 TeamCity 已经检测到了一个流。 TeamCity Remote Run 插件尝试根据 IDE 工作副本中的文件的 depot 路径推断出正确的流。
例如,如果工作副本中的文件路径以 //depot/stream1/some/path 开始,TeamCity 将尝试找到 //depot/stream1 流并从那里开始远程运行。 如果您已修改了从另一条流(导入到工作副本)中的文件,并且希望在特定流中强制执行构建,则需要在触发远程运行时指定一个 配置参数 teamcity.build.branch

清理 Stream 工作空间

为了正确处理任务流,TeamCity 需要在 Perforce 服务器上创建专用工作区。 为了节省服务器资源,您可以直接从 TeamCity 用户界面清理 TeamCity 创建的非活动工作空间

在 IntelliJ IDE 中运行个人构建

如果您在基于 IntelliJ 的 IDE 中编写代码,您可以在将更改提交到主 Perforce 仓库之前预先测试和构建本地修改:请参阅有关 远程运行远程调试预测试延迟提交 的常见说明。

远程运行/调试功能对所有类型的 VCS 都很常见,但 Perforce 具有特别的便利性:

在 Perforce 暂存文件上运行构建

TeamCity 允许您在 Perforce shelved files 上运行个人构建。 这样,您可以在将更改的源文件检入公共仓库之前尝试构建它们。

要在 Perforce 搁置的文件上手动运行自定义构建:

  1. 点击 Run 按钮旁边的上下文菜单,打开 custom run 对话框。

  2. 启用 以个人构建方式运行 选项。

  3. 输入包含暂存文件的变更列表的 ID。

    在 P4 搁置文件上运行自定义构建
  4. 选择目标 Perforce 根目录。

为 Perforce 悬置的更改列表配置 自动触发

  1. 前往 Build Configuration Settings | Trigger

  2. 添加一个新的 Perforce Shelve Trigger 类型的触发器。

  3. 按照 本文 中描述的方式配置其设置。

要使用 TeamCity REST API 建立目标上架更新列表,请向以下端点发送请求:

/app/perforce/runBuildForShelve?buildTypeId=<BUILD_TYPE_ID>&vcsRootId=<VCS_ROOT_ID>&shelvedChangelist=<SHELVED_CHANGELIST_ID>
  • BUILD_TYPE_ID - 您的构建配置的 ID。

  • VCS_ROOT_ID - 相关 VCS Root(VCS 根) 的外部 ID。

  • SHELVED_CHANGELIST_ID-所需更改列表的ID。

将构建状态发布到 Perforce Helix Swarm

如果您使用 Perforce Helix Swarm 对暂存的文件进行代码审查,您可以配置 TeamCity 将构建状态作为评论发布到您的审查中。

请参阅此帮助文章以获取更多信息:与 Perforce Helix Swarm 的集成

Perforce中的TeamCity工作区

为执行与 Perforce 相关的操作,TeamCity 服务器通常在无工作区上下文的情况下执行 Perforce 命令。 例如,对于追踪变更和大多数服务器端操作,工作区并非必需的。 然而,某些情况需要创建一个专用的工作区:

  • 默认情况下,TeamCity 使用 代理端检出模式 来检出构建的源代码。 在这种情况下,它会创建一个专用的 Perforce 工作区,并执行相应的 p4 sync 命令来获取源代码。

  • 使用 Perforce VCS 根目录来存储 版本化的项目设置

  • 使用 Perforce 流作为功能分支。 在这种情况下,TeamCity 在 Perforce 服务器上创建工作空间,以正确处理任务流。

了解 TeamCity 如何在 Perforce 中创建工作区并在 这篇文章中使用它们。

在 Perforce 服务器上配置 Post-Commit Hooks

默认情况下,TeamCity 使用轮询方法来检测 VCS 仓库中的变化。 它定期向 Perforce 服务器发送请求,以检测新的修订版本。 对于拥有数百个 VCS 根的大型安装,这可能会在 Perforce 服务器和 TeamCity 上产生显著的负载。 为了避免后台轮询,您可以在您的 Perforce 服务器上设置一个 post-commit 钩子。 这个钩子会在有更新时通知 TeamCity 开始检查变化。

TeamCity 提供了一个专用的钩子脚本,应保存在您的 Perforce 服务器上。 您可以在此处找到详细的说明 这里

标签 Perforce 资源

TeamCity 可以为 Perforce 项目源分配自定义标签。 应用的标签列表及其状态显示在 构建结果更改 标签页上。

为了配置构建配置的自动标记:

  1. 前往 Build Configuration Settings | Build Features

  2. 添加一种新的 VCS 标签 类型功能。

  3. 选择要标记的 Perforce VCS 根。

  4. 按照这里所描述的方式指定标签模式。

查看 Perforce 作业

如果构建包含与一个或多个 jobs 关联的更改列表,TeamCity 将在构建结果中的这个变动旁边显示一个扳手图标 wrench.png。 点击或悬停以查看相关工作的详细信息。

查看 Perforce 日志

所有 Perforce 插件的操作都会记录在带有类别 jetbrains.buildServer.VCS.P4teamcity-vcs.log 文件中(取决于操作模式,是在代理上还是在服务器上)。 详细的日志记录可以通过 TeamCity Server Logs (TeamCity 服务器日志)来启用。

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