将 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 中的项目源码上运行构建,并使用本文中描述的所有功能,您需要执行两个程序:
在 TeamCity 中创建一个专用项目:
进入 Administration | Projects,然后点击 Create project。
请注意,这将会将项目直接添加到 Root project 下面。 或者,您可以将其添加到任何其他现有的项目中。输入项目的 Name 和 ID。
点击 Create。
创建一个 Perforce VCS 根:
在 项目设置 中,前往 VCS 根目录。
点击 Create VCS root。
选择 Perforce Helix Core 作为 VCS 类型。
按照这篇文章中的说明配置根的设置。
在项目和 Perforce 根配置完成后,您可以继续进行 添加构建配置 并运行构建。
TeamCity可以监控Perforce streams中的提交,并像处理常规feature branches一样与之进行操作。
如果一个 Perforce root 被配置为使用 Stream 模式,您可以在 root 设置中启用功能分支支持。 在启用后,所有将指定主流作为父级的流都将被包含到由 TeamCity 处理的 功能分支 集合中。 为了只将特定的流包含到此集合中,请编辑分支规范以过滤这些流。 每个过滤规则应从新的一行开始。 语法是 +|-:stream_name
。 例如,使用 +://stream-depot/*
仅监控位于 stream-depot
仓库中的流,其中, *
(例如, master
)是逻辑分支名称。 请注意,分支规格中使用的流应为主流的后代。
tip
在这里,管道 符号
|
代表了 或 命令,如同在正则表达式中:使用+
表示包含,或-
表示排除。
TeamCity可以处理任务流,但它只有在对任务流进行了非合并提交时才能检测到新的任务流。
您可以从 IntelliJ 平台的 IDE 启动一个 remote build run,但前提是 TeamCity 已经检测到了一个流。 TeamCity Remote Run 插件尝试根据 IDE 工作副本中的文件的 depot 路径推断出正确的流。
例如,如果工作副本中的文件路径以 //depot/stream1/some/path
开始,TeamCity 将尝试找到 //depot/stream1
流并从那里开始远程运行。 如果您已修改了从另一条流(导入到工作副本)中的文件,并且希望在特定流中强制执行构建,则需要在触发远程运行时指定一个 配置参数 teamcity.build.branch
。
为了正确处理任务流,TeamCity 需要在 Perforce 服务器上创建专用工作区。 为了节省服务器资源,您可以直接从 TeamCity 用户界面清理 TeamCity 创建的非活动工作空间。
如果您在基于 IntelliJ 的 IDE 中编写代码,您可以在将更改提交到主 Perforce 仓库之前预先测试和构建本地修改:请参阅有关 远程运行、远程调试 和 预测试延迟提交 的常见说明。
远程运行/调试功能对所有类型的 VCS 都很常见,但 Perforce 具有特别的便利性:
TeamCity 允许您在 Perforce shelved files 上运行个人构建。 这样,您可以在将更改的源文件检入公共仓库之前尝试构建它们。
要在 Perforce 搁置的文件上手动运行自定义构建:
点击 Run 按钮旁边的上下文菜单,打开 custom run 对话框。
启用 以个人构建方式运行 选项。
输入包含暂存文件的变更列表的 ID。
选择目标 Perforce 根目录。
为 Perforce 悬置的更改列表配置 自动触发:
前往 Build Configuration Settings | Trigger。
添加一个新的 Perforce Shelve Trigger 类型的触发器。
按照 本文 中描述的方式配置其设置。
要使用 TeamCity REST API 建立目标上架更新列表,请向以下端点发送请求:
POST/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 对暂存的文件进行代码审查,您可以配置 TeamCity 将构建状态作为评论发布到您的审查中。
请参阅此帮助文章以获取更多信息:与 Perforce Helix Swarm 的集成。
为执行与 Perforce 相关的操作,TeamCity 服务器通常在无工作区上下文的情况下执行 Perforce 命令。 例如,对于追踪变更和大多数服务器端操作,工作区并非必需的。 然而,某些情况需要创建一个专用的工作区:
默认情况下,TeamCity 使用 代理端检出模式 来检出构建的源代码。 在这种情况下,它会创建一个专用的 Perforce 工作区,并执行相应的
p4 sync
命令来获取源代码。使用 Perforce VCS 根目录来存储 版本化的项目设置。
使用 Perforce 流作为功能分支。 在这种情况下,TeamCity 在 Perforce 服务器上创建工作空间,以正确处理任务流。
了解 TeamCity 如何在 Perforce 中创建工作区并在 这篇文章中使用它们。
默认情况下,TeamCity 使用轮询方法来检测 VCS 仓库中的变化。 它定期向 Perforce 服务器发送请求,以检测新的修订版本。 对于拥有数百个 VCS 根的大型安装,这可能会在 Perforce 服务器和 TeamCity 上产生显著的负载。 为了避免后台轮询,您可以在您的 Perforce 服务器上设置一个 post-commit 钩子。 这个钩子会在有更新时通知 TeamCity 开始检查变化。
TeamCity 提供了一个专用的钩子脚本,应保存在您的 Perforce 服务器上。 您可以在此处找到详细的说明 这里。
TeamCity 可以为 Perforce 项目源分配自定义标签。 应用的标签列表及其状态显示在 构建结果 的 更改 标签页上。
为了配置构建配置的自动标记:
前往 Build Configuration Settings | Build Features。
添加一种新的 VCS 标签 类型功能。
选择要标记的 Perforce VCS 根。
按照这里所描述的方式指定标签模式。
如果构建包含与一个或多个 jobs 关联的更改列表,TeamCity 将在构建结果中的这个变动旁边显示一个扳手图标 。 点击或悬停以查看相关工作的详细信息。
所有 Perforce 插件的操作都会记录在带有类别 jetbrains.buildServer.VCS.P4
的 teamcity-vcs.log
文件中(取决于操作模式,是在代理上还是在服务器上)。 详细的日志记录可以通过 TeamCity Server Logs (TeamCity 服务器日志)来启用。
感谢您的反馈!