提交状态发布器
Commit Status Publisher 是一个 构建功能 ,允许 TeamCity 自动将您的提交的构建状态发送到外部系统。 该功能已作为一个与 TeamCity 一同捆绑的 开源插件 实现。
支持的系统:
GitHub (也支持拉取请求的构建状态)
Azure DevOps (支持的状态:Pending、Succeeded、Failed、Error)
Gerrit Code Review 工具 2.6+
Perforce Helix Swarm
从 2022.04 版本开始,Commit Status Publisher 会在构建被添加到队列时立即更新版本控制系统中的提交状态,为您提供最新的信息。 GitHub,GitLab,Space,Bitbucket Server 和 Bitbucket Cloud,Perforce Helix Swarm,以及 Azure DevOps 都得到了支持。
tip
请参阅我们的 视频指南 ,了解如何 将构建信息发送到外部系统。
提交状态发布器支持以下格式的 GitHub URL:
对于 GitHub.com :
https://api.github.com
对于 GitHub Enterprise :
http[s]://<主机>[:<端口>]/api/v3
为了进行连接,请选择一个可用的认证类型:
访问令牌 — 使用个人访问令牌或通过 OAuth 连接获取令牌。 令牌必须具有以下范围:
对于公开仓库:
public_repo
和repo:status
对于私有仓库:
仓库
如果您有一个已配置的 OAuth 连接 到 GitHub,您可以点击魔术棒按钮让 TeamCity 自动获取相应的访问令牌。
GitHub 应用程序访问令牌 — 如果此项目或任何父项目具有有效的 GitHub App 连接 ,Commit Status Publisher 可以使用可刷新访问令牌。 可刷新访问令牌是由 TeamCity 通过现有的 OAuth 连接从所需的 VCS 提供程序获取的短期令牌(与用户在 VCS 托管端手动生成的静态 PAT 令牌不同)。 有关生成和使用可刷新令牌的更多信息,请参阅以下文章: 管理可刷新访问令牌。
使用 VCS 根凭据 — TeamCity 将尝试从 VCS 根设置中提取凭据。 这个选项是为使用令牌(无论是静态/个人还是可刷新/OAuth)通过身份验证并使用HTTP(S)获取URL来获取仓库的VCS根设计的。 如果相关的 VCS 根使用匿名或标准的用户名-密码认证,或者使用 SSH 获取 URL,请选择其他选项。
密码 — 提供 GitHub 用户名和密码。 请注意,如果连接到 GitHub Enterprise 存储库,或者用户的 GitHub 帐户受到两步验证保护,密码认证将无法工作。 在这些情况下,您应该使用访问令牌代替。
note
为了保护一个分支并确保只有经过验证的 pull 请求才能合并到其中,您可以在 GitHub 仓库设置中创建一个 分支保护规则。 如果您将 TeamCity 构建设置为必需的状态检查,那么在请求的更改的构建成功完成之前,GitHub 不允许合并拉取请求。
tip
如果您的 VCS 根目录使用 App Token 连接到 GitHub,您可以利用 GitHub Checks API 在无需设置 Commit Status Publisher 功能的情况下,自动发布 Markdown 格式的构建状态。 请参阅此文章获取更多信息: GitHub Checks Webhook 触发器。
身份验证类型 选项允许您选择构建功能应使用哪种身份验证方法来访问 GitLab 存储库。
个人访问令牌 或 PAT 是静态身份验证令牌,您可以在 您的 GitLab 个人资料页面中生成。
可刷新访问令牌是由 TeamCity 通过现有的 OAuth 连接从所需的 VCS 提供商获取的短期令牌(与用户在 VCS 托管端手动颁发的静态 PAT 令牌不同)。 有关生成和使用可刷新令牌的更多信息,请参阅以下文章: 管理可刷新访问令牌。
使用 VCS 根证书 — TeamCity 将尝试从 VCS 根设置中提取凭据。 这个选项是为使用令牌(无论是静态/个人还是可刷新/OAuth)通过身份验证并使用HTTP(S)获取URL来获取仓库的VCS根设计的。 如果相关的 VCS 根使用匿名或标准的用户名-密码认证,或者使用 SSH 获取 URL,请选择其他选项。
note
GitLab 凭证和 GitLab 项目必须按照以下步骤进行设置:
凭据必须属于具有开发者、维护者或项目所有者角色的用户。
GitLab 用户必须包含在 允许推送 列表中,以便能够更改受保护分支上的提交状态。
在 GitLab 项目的 项目可见性 设置中,请确保启用 CI/CD 选项(或者在旧版本的 GitLab 中启用 Pipelines 选项)。
GitLab API URL 字段接受 http[s]://<主机名>[:<端口>]/api/v4
格式的 URL。 此字段为可选项:如果留空,TeamCity 将使用一个与 VCS 根设置中指定的获取 URL 相对应的值。
要连接到 Bitbucket Cloud ,请确保 TeamCity 服务器 URL 是一个完全合格的域名(FQDN):例如, http://myteamcity.domain.com:8111
。 短名称,如 http://myteamcity:8111
,会被 Bitbucket API 拒绝。
对于 身份验证类型 ,您有以下选项:
使用 VCS 根证书 — TeamCity 将尝试从 VCS 根设置中提取凭据。 这个选项是为使用令牌(无论是静态/个人还是可刷新/OAuth)通过身份验证并使用HTTP(S)获取URL来获取仓库的VCS根设计的。 如果相关的 VCS 根使用匿名或标准的用户名-密码认证,或者使用 SSH 获取 URL,请选择其他选项。
用户名/密码 — 指定用于连接到 Bitbucket Cloud 的用户名和密码。 对于 Bitbucket Cloud 团队帐户,可以使用团队名称作为用户名,而 API 密钥作为密码。 我们建议您使用带有 Pull Requests | Read 权限范围的 app 密码。
可刷新访问令牌是由 TeamCity 通过现有的 OAuth 连接从所需的 VCS 提供商获取的短期令牌(与用户在 VCS 托管端手动颁发的静态 PAT 令牌不同)。 有关生成和使用可刷新令牌的更多信息,请参阅以下文章: 管理可刷新访问令牌。
以下参数适用于 Bitbucket Server/Data Center 托管类型:
形参 | 描述 |
---|---|
Bitbucket Server 基础 URL | 指定 Bitbucket 服务器的基础 URL,格式如下: 如果留空,URL 将从 VCS 根获取 URL 中提取。 |
身份验证类型 |
|
要保护一个分支,并确保只有经过验证的拉取请求才能合并到其中,您可以在您的 Bitbucket 仓库设置中指定 必需的构建。 要将 TeamCity 构建设置为 必需构建 ,请打开 Bitbucket 中的 添加所需的构建 页面,并在 添加构建 字段中指定构建配置 ID 作为构建键。 在这种情况下,Bitbucket 不会允许合并拉取请求,直到请求更改的构建成功完成。
note
由 Stiltsoft 制造的 TeamCity Integration for Bitbucket 应用程序为您在 Bitbucket 用户界面中提供了更详细的 TeamCity 构建预览,您无需切换到 TeamCity 就可以运行它们。 在 这篇文章 中阅读有关该应用的更多详细信息。
为了设置 Azure DevOps 的 Commit Status Publisher,指定您的 Azure 服务器 URL 并选择首选的身份验证方法。
个人访问令牌 或 PAT 是静态身份验证令牌,您可以在 您的 Azure DevOps 帐户设置中生成。 您的发布令牌应具有
代码(状态)
和代码(读取)
权限范围,以允许 Commit Status Publisher 发布状态更新。 对于 VSTS connections ,可以从连接设置中自动获取令牌。可刷新访问令牌是由 TeamCity 通过现有的 OAuth 连接从所需的 VCS 提供商获取的短期令牌(与用户在 VCS 托管端手动颁发的静态 PAT 令牌不同)。 有关生成和使用可刷新令牌的更多信息,请参阅以下文章: 管理可刷新访问令牌。
从2023.11版本开始,通过预设的 Space connections设置的 TeamCity 构建配置不再需要配置 Commit Status Publisher 来发布构建状态。
使用 Space 连接设置项目后,TeamCity 将自动在 Space 的 自动化 部分以及 提交 和 分支 选项卡下发布与构建相关的评论。

也可以手动设置 Commit Status Publisher 功能。 如果满足以下条件,您可以选择手动设置:
您希望设置自定义发布者名称和 / 或 Space 项目密钥;
TeamCity 无法自动发布构建状态(例如,如果您使用具有自定义配置的 JetBrains Space 的本地实例,可能会发生这种情况)。
要手动设置 Commit Status Publisher,您需要预定义的 Space connection。 如果您没有合适的连接,并且您的项目是手动创建的或来自存储库 URL,请转到 项目设置 | 连接 并创建一个新连接。
然后,在构建配置的设置中:
打开 构建功能 并添加 Commit Status Publisher构建功能。
选择 JetBrains Space 发行商和已创建的连接。
指定将在 Space 中为此服务显示的名称。
保存设置。
如果在 Perforce 的 shelved files 中运行构建,TeamCity 可以将其状态以评论形式报告给 Perforce Helix Swarm 中的相应代码审查。

请参阅此帮助文章以获取更多信息: 与 Perforce Helix Swarm 的集成。
Commit Status Publisher 支持 Gerrit 版本 2.6+。 若要配置与早期 Gerrit 版本的集成,请联系我们的 支持。
将构建功能添加到您的构建配置中。
如果您希望 Commit Status Publisher 尝试为所有已连接的 VCS 根发布提交状态,使用默认的 所有已连接的 VCS 根 选项,或选择一个单一的储存库来发布构建状态。
选择您的系统作为发布者,并指定其连接详细信息和凭证。
测试连接
保存您的设置。
示例:配置 Pull Requests 状态发布至 GitHub
以下示例演示了如何配置从 TeamCity 向 GitHub 发送包含在您的拉取请求中的构建状态更改。
使用 pull requests build feature 来配置 pull requests 分支。 您也可以通过在您的 VCS Root 中配置 分支规范 来使分支可用,同时确保它包括拉取请求分支(也可以参见相关的 博客文章)。
添加 Commit Status Publisher 构建功能:
使用默认的 所有附加的 VCS 根 选项为所有附加的 VCS 根中的提交发布状态。
选择 GitHub 作为发布者,并指定其连接详细信息和凭据,然后测试连接:
保存您的设置。
将源代码的更改提交并在 GitHub 中创建拉取请求,然后在 TeamCity 中使用您的更改运行构建。 Commit Status Publisher 将会向您通报与您的拉取请求更改相关的构建状态:
它将向您展示检查是否为:
进行中
失败
成功
将鼠标悬停在提交状态上会显示构建摘要
点击构建状态图标或 详情链接,将在 TeamCity 中打开 构建结果页面。 此信息也可在您的拉取请求详情的 提交 选项卡中找到。
与上一页面类似,单击构建状态图标会在 TeamCity UI 中打开 构建结果页面:
如果构建的 VCS 根设置了 检出规则 ,那么 Commit Status Publisher 将只考虑符合这些规则的提交。 也就是说,如果构建开始前的最后一次提交不符合检出规则,它将不会被标记为构建状态;状态将显示在最后一次满足提交的旁边。
如果您需要在构建的最后一次提交旁边显示构建状态(例如,在拉取请求中),您可以调整检出规则,以便将此提交纳入 VCS 根的范围内。 或者,如果这是一个经常出现的问题,您可以考虑按照以下方式重新安排您的构建链:
配置主构建的签出规则。
配置一个实用工具 composite build ,不包含构建步骤和检出规则,但包含 Commit Status Publisher 功能。
在复合构建中,为主构建配置一个 快照依赖。
在这种链的范围内,Commit Status Publisher 将不受检出规则的约束,而构建状态将显示在最后一个提交旁边。
TeamCity 写入事件与 Commit Status Publisher 构建功能相关到 teamcity-commit-status.log
文件。 将 "debug-commit-status" 预设应用于此日志,以包含 DEBUG 级别的事件。