提交状态发布器
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 都得到了支持。
特定供应商的配置
GitHub
提交状态发布器支持以下格式的 GitHub URL:
对于 GitHub.com :
https://api.github.com
对于 GitHub Enterprise :
http[s]://<主机>[:<端口>]/api/v3
为了进行连接,请选择一个可用的认证类型:
Access Token — 使用个人访问令牌或通过 OAuth 连接获取令牌。 令牌必须具有以下范围:
对于公开仓库:
public_repo
和repo:status
对于私有仓库:
仓库
如果您有一个已配置的 OAuth 连接 到 GitHub,您可以点击魔术棒按钮让 TeamCity 自动获取相应的访问令牌。
GitHub App访问令牌—— 如果此项目或任何父项目具有有效的 GitHub App连接,那么Commit Status Publisher就可以使用通过此连接发出的令牌。 Acquire new按钮允许您立即重新发行访问令牌。 这个选项只有在 VCS Root 设置指向通过 GitHub App 连接配置的特定 VCS root 时才可用。
使用 VCS 根目录的凭据 — TeamCity 将尝试从 VCS 根设置中提取凭据。 这个选项是为使用令牌(无论是静态/个人还是可刷新/OAuth)通过身份验证并使用HTTP(S)获取URL来获取仓库的VCS根设计的。 如果相关的 VCS 根使用匿名或标准的用户名-密码认证,或者使用 SSH 获取 URL,请选择其他选项。
Password — 提供 GitHub 用户名和密码。 请注意,如果连接到 GitHub Enterprise 存储库,或者用户的 GitHub 帐户受到两步验证保护,密码认证将无法工作。 在这些情况下,您应该使用访问令牌代替。
GitLab
认证类型选项允许您选择构建功能应使用哪种认证方法来访问 GitLab 仓库。
个人访问令牌或 PATs 是您可以在 您的 GitLab 个人资料页面上发行的静态身份验证令牌。
可刷新访问令牌是通过配置的GitLab OAuth 2.0连接发出的短期令牌。 点击旁边的 Acquire 按钮获取所需连接的访问令牌。
使用 VCS 根证书—— TeamCity 将尝试从 VCS 根设置中提取证书。 这个选项是为使用令牌(无论是静态/个人还是可刷新/OAuth)通过身份验证并使用HTTP(S)获取URL来获取仓库的VCS根设计的。 如果相关的 VCS 根使用匿名或标准的用户名-密码认证,或者使用 SSH 获取 URL,请选择其他选项。
GitLab API URL 字段接受 http[s]://<主机名>[:<端口>]/api/v4
格式的 URL。 此字段为可选项:如果留空,TeamCity 将使用一个与 VCS 根设置中指定的获取 URL 相对应的值。
Bitbucket Cloud
要连接到 Bitbucket Cloud ,请确保 TeamCity 服务器 URL 是一个完全合格的域名(FQDN):例如,http://myteamcity.domain.com:8111
。 短名称,如 http://myteamcity:8111
,会被 Bitbucket API 拒绝。
对于 Authentication Type,您有以下选项:
使用 VCS 根证书—— TeamCity 将尝试从 VCS 根设置中提取证书。 这个选项是为使用令牌(无论是静态/个人还是可刷新/OAuth)通过身份验证并使用HTTP(S)获取URL来获取仓库的VCS根设计的。 如果相关的 VCS 根使用匿名或标准的用户名-密码认证,或者使用 SSH 获取 URL,请选择其他选项。
用户名/密码 — 指定一个用户名和密码以连接到 Bitbucket Cloud。 对于 Bitbucket Cloud 团队帐户,可以使用团队名称作为用户名,而 API 密钥作为密码。 我们建议您使用带有 Pull Requests | Read 权限范围的 app 密码。
可刷新的访问令牌 — 展示已配置的 Bitbucket Cloud OAuth 连接列表。 点击连接旁边的 Acquire 按钮,该连接将用于发出短期有效的 OAuth 令牌。
Bitbucket Server
以下参数适用于 Bitbucket Server/Data Center 托管类型:
形参 | 描述 |
---|---|
Bitbucket Server 基础 URL | 指定 Bitbucket 服务器的基础 URL,格式如下: 如果留空,URL 将从 VCS 根获取 URL 中提取。 |
身份验证类型 |
|
当您选择 可刷新的访问令牌 认证类型时,TeamCity 会显示一个由项目中配置的、对所有项目用户开放的 Bitbucket 服务器 / 数据中心的 配置过的 OAuth 连接 的列表。 如果一个令牌已经配置,TeamCity 会显示获取该令牌的用户信息和提供该令牌的连接信息。
要保护一个分支,并确保只有经过验证的拉取请求才能合并到其中,您可以在您的 Bitbucket 仓库设置中指定 必需的构建。 要将 TeamCity 构建设置为 必须构建,请打开 Bitbucket 中的 添加必须构建 页,并在 添加构建 字段中指定一个构建配置 ID 作为构建键。 在这种情况下,Bitbucket 不会允许合并拉取请求,直到请求更改的构建成功完成。
Azure DevOps
为了设置 Azure DevOps 的 Commit Status Publisher,指定您的 Azure 服务器 URL 并选择首选的身份验证方法。
个人访问令牌 或 PAT 是您可以在 Azure DevOps 帐户设置 中发行的静态身份验证令牌。 您的发布令牌应具有
代码(状态)
和代码(读取)
权限范围,以允许 Commit Status Publisher 发布状态更新。 对于 VSTS connections,可以从连接设置中自动获取令牌。可刷新的访问令牌是通过配置的Azure OAuth 2.0 连接发布的短期令牌。 点击旁边的 Acquire 按钮获取所需连接的访问令牌。
JetBrains Space
从2023.11版本开始,通过预设的Space connections设置的 TeamCity 构建配置不再需要配置 Commit Status Publisher 来发布构建状态。
使用 Space 连接设置项目,TeamCity 将自动在 Space 的 自动化 部分下,提交 和 分支 标签下发布与构建相关的评论。
也可以手动设置 Commit Status Publisher 功能。 如果满足以下条件,您可以选择手动设置:
您希望设置自定义发布者名称和 / 或 Space 项目密钥;
TeamCity 无法自动发布构建状态(例如,如果您使用具有自定义配置的 JetBrains Space 的本地实例,可能会发生这种情况)。
要手动设置 Commit Status Publisher,您需要预定义的 Space connection。 如果您没有合适的连接,且您的项目是手动创建的或者来自存储库 URL,那么请前往 Project Settings | Connections 并创建一个新的连接。
然后,在构建配置的设置中:
打开 构建功能 并添加 提交状态发布器 构建功能。
选择 JetBrains Space 发行商和已创建的连接。
指定将在 Space 中为此服务显示的名称。
保存设置。
Perforce Helix Swarm
如果在 Perforce 的 shelved files 中运行构建,TeamCity 可以将其状态以评论形式报告给 Perforce Helix Swarm 中的相应代码审查。
请参阅此帮助文章以获取更多信息:与 Perforce Helix Swarm 的集成。
Gerrit
Commit Status Publisher 支持 Gerrit 版本 2.6+。 若要配置与早期 Gerrit 版本的集成,请联系我们的支持。
使用 Commit Status Publisher
将构建功能添加到您的构建配置中。
如果您希望 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 中打开构建结果页面。 这些信息也可以在您的拉取请求细节的 Commits 标签页中找到。
与上一页相似,点击构建状态图标将在 TeamCity UI 中打开 build results 页面:
使用 Commit Status Publisher 与 VCS 检出规则
如果构建的 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 级别的事件。