Perforce
TeamCity 可以与 Perforce 集成,以构建存储在 Perforce Helix Core 中的源项目,并确保其持续集成和交付。 这里了解更多关于这个集成的信息 。
这篇文章描述了特定于 Perforce Helix Core VCS 根的设置。 常见的 VCS 根设置在 这里 描述。
P4 连接设置
设置 | 描述 |
---|---|
端口 | 将 Perforce 服务器地址定义为 对于特定环境,可以在工作区选项 以下 中设置 |
Stream / 客户端 / 客户端映射 | 选择连接模式。 查看详细信息 如下。 |
用户名 | 指定用户登录名。 |
密码或门票 | 可选,指定密码或票证。 如果您输入一个值,TeamCity 将会:
如果您将此字段留空,TeamCity 将依赖当前用户的现有 P4 票据(p4ticket.txt)。 如果该票证不在此文件中,但是Perforce的身份验证需要它,那么将会发生故障。 |
基于票据的身份验证 | 选择此选项以启用基于票证的身份验证。 这个选项默认是启用的,并且不显示。 |
使用 Perforce Streams
选择 Stream 选项以使用现有的 Perforce stream。 TeamCity 将使用此流来准备基于流的工作区,并调整其客户端映射。
关于使用此模式的注意事项:
Stream 字段格式:
支持深层结构规范,即像
//DEPOTNAME/1/2/n
这样的路径。支持 build parameters。
要使用
StreamAtChange
选项,您需要定义 Label / changelist to sync。当使用 代理端签出(agent-side checkout) 模式 时,支持简单的 checkout rules,如
. => sub / directory
。 排除检出规则、多重包含规则,或像aaa=>bbb
这样的规则,只有在启用“创建非流工作区”选项时才支持(参见下面的 下方)。当任务流用于功能分支时,TeamCity可能会遗漏一些任务流中的更改,直到进行了修改提交,这意味着,直到对任务流进行了真正的提交,父流中的合并提交才会被检测到(请参见工单 TW-44765)。
请注意,TeamCity 中的 Perforce 支持将检出规则视为区分大小写。 对基于 Perforce 的构建配置启用不区分大小写,可以在 版本控制设置 页面中通过在 编辑检出规则 表格中添加以下注释来实现:
##teamcity 忽略大小写
。
在“启用功能分支支持"选项中,您可以指定要监视的分支流,以便查看是否发生了更改,这是在默认分支流的基础上添加的。 阅读更多 关于这个功能的信息。
使用 Perforce 客户端
Client 选项允许您直接指定客户端工作区的名称。 工作区必须已经由 Perforce 客户端应用程序(如 P4V 或 P4Win)创建。 仅使用配置的客户端工作区的映射规则。 客户端名称被忽略。
关于使用此模式的注意事项:
当这个选项与 server-side checkout 一起使用时,服务器端的内部 TeamCity 源缓存将被禁用。 这可能会使 clean checkouts 的性能恶化。
如果构建配置具有配置参数
teamcity.perforce.agent.reuse.client=true
并使用默认的签出规则,TeamCity 将不会在代理上创建另一个 Perforce 工作区,并会尝试重用现有的 Perforce 客户端,名称在 Perforce VCS 根中指定。
将 Perforce Depot 映射到客户端
Client mapping 选项允许指定仓库到客户端机器的映射。
关于使用此模式的注意事项:
客户端映射 字段格式:
TeamCity 将根据运行构建的构建代理的 OS / 平台处理文件分隔符。 为了能在所有构建代理中使用特定的行分隔符,请选择 客户端 或 流 选项(在 Perforce 中指定
LineEnd
)。 或者,您可以添加一个 代理要求,以便只在特定平台上运行构建。在映射中使用
team-city-agent
而不是客户名称。
例如://depot/MPS/... //team-city-agent/... //depot/MPS/lib/tools/... //team-city-agent/tools/...
如果在两次构建之间更改了直接客户端映射,那么第二次构建 将会强制进行 清理检出,除非在服务器上设置了
teamcity.perforce.enable-no-clean-checkout
内部属性。当以下情况发生时,更改客户端映射 不会强制 代理端签出进行清理:
Perforce 客户端名称已被使用:更改客户端的 Perforce 客户端映射不会导致进行干净的检出。
使用了 Perforce 流:在保持相同的流根的同时更改流名称,不会导致干净的检出。
使用 ChangeView
要专注于特定的修订版本,请使用 ChangeView
规范:
//depot/... //team-city-agent/... ChangeView: //depot/dir1/…@90 //depot/dir2/…@automaticLabelWithRevision
其中 90 家
是 dir1
的确切版本号,而 automaticLabelWithRevision
则是 dir2
的标记版本。 这些目录的所有其他修订版本将不会受到此 VCS 根的监控。
代理检出设置
当使用 代理端检出 时,TeamCity 会为每个 检出目录 / VCS 根目录 创建一个 Perforce 工作区。 这些工作区会在需要时自动创建,并在超时后自动删除。 查看更多关于 Perforce 工作区处理 的详细信息。
设置 | 描述 |
---|---|
工作区选项 | 如有需要,可为 对于特定环境,定义 |
创建非流式工作空间 | 仅适用于 Streams 启用以便能够使用基于流规范的非流工作区检出源代码。 这允许使用 checkout rules,但会使在构建中提交到流成为不可能。 |
运行 'p4 clean' 进行清理 | 启用此选项可以在构建前清理工作区中的额外文件。 如果启用, |
跳过已有列表的更新 | 启用此选项,以在同步时不在 Perforce 服务器上跟踪文件(始终将所有文件传输到代理, |
额外同步选项 | 指定额外的 如果您需要指定应在
要指定应在
查看 |
Perforce 工作区参数
TeamCity 将每个 Perforce VCS 根的连接变量存储在以下参数中:
% \vcsRoot.extId.port %
% \vcsRoot.extId.user %
% \vcsRoot.extId.p4client %
在其中 extId
是 VCS 根的外部 ID,已在其设置中指定。
这样,您可以分别为每个根从脚本中访问它们。
在代理上进行检出时,TeamCity 提供了描述在检出过程中创建的 Perforce 工作区的环境变量
。如果用于检出的 Perforce VCS 根有多个,那么变量是为 第一个 VCS 根创建的。 变量是:
P4USER—— 和
vcsroot.<VCS_root_ID>.user
构建参数 相同。P4PORT — 同
vcsroot.<VCS_root_ID>.port
一样。P4CLIENT—— 同
vcsroot。<VCS root ID>。p4client
,这是在构建代理上生成的 P4 工作空间的名称。
这些变量可用于在签出后执行自定义的 p4
命令。
查看 更多详情
Perforce Proxy 设置
为了允许在 代理端检出 时使用 Perforce 代理,您需要在 构建代理 上指定 env.TEAMCITY_P4PORT
环境变量,代理将会把这个值当作 P4PORT
值。
其他设置
设置 | 描述 |
---|---|
在构建代理上的 P4 路径 | 指定到 Perforce 命令行客户端( 这只适用于代理端检出。 在代理端,如果在 对于服务器,应在 TeamCity 服务器机器的 |
同步的标签/更改列表 | 如果您希望不使用最新的修订版,而是使用特定的 Perforce 标签(带有选择性更改)来检出源代码,请指定标签。 例如,这对生成里程碑/发布构建可能很有用。 如果此字段为空,将使用最新的更改列表进行同步。 |
字符集 | 请选择客户端机器上使用的字符集。 |
支持 UTF-16 编码 | 如果您的项目中以 如果您使用 服务器端检出 并在您的仓库中有 Perforce 文件类型 的文件,您可能希望启用此选项。 启用它以保持在已检出文件中的 如果您将 |
P4 信任 | 如果您的项目的 VCS 根通过 SSL 连接到 Perforce,TeamCity 将自动建立与其的可信连接。 每次测试 Perforce 连接,或者构建代理从 Perforce 检出源时,都会发送 如果 Perforce 服务器上的 SSL 证书得到更新,那么需要通过一个特殊参数来配置代理以信任这个新的证书。 出于安全原因,所有代理检出源代码后,需要删除此参数。 将 |