如何为 JetBrains Space 配置 CI/CD
JetBrains Space 是一个面向软件开发团队的全周期协作解决方案。 这份指南解释了如何通过将 JetBrains Space 项目与 TeamCity 集成,以实现持续的集成和交付。
将 TeamCity 集成进 JetBrains Space 可为用户带来以下优势:
在同一环境中编译、测试和部署项目。
构建合并请求的源代码,并在成功构建后自动合并它们。
详细的构建概览:差异和构件,实时详细测试报告,代码覆盖率,检查,以及各种其他指标。 构建状态和代码审查的状态在系统间进行交叉共享,以便更容易监控。
灵活的管道,其中的构建彼此依赖并共享设置和结果。
配置构建为代码的能力,在 Kotlin DSL 中。
在两个系统中使用单一帐户进行身份验证:VCS(JetBrains Space)和 CI/CD(TeamCity)。
这份指南包含了集成每个组件所需的常见 预设设置 和可选流程。
要执行本指南中描述的所有步骤,您需要具备:
项目管理权限 在您的组织的 JetBrains Space 实例中。
项目管理权限在您的组织的 TeamCity Cloud 实例或 TeamCity On-Premises 服务器中的任何一个上。
要在 TeamCity 中通过 JetBrains Space 启用身份验证,需要在 TeamCity 中具有 系统管理员权限。
您可以使用两种不同的技术将 TeamCity 连接到 JetBrains Space。 传统的方法包括两个步骤:
在您的 Space 实例中为 TeamCity 认证创建一个服务应用程序;
创建到 Space 的连接预设。
从2023.11版本开始,您可以利用半自动的 Space 连接,跳过手动设置 Space 应用程序的步骤。 反之,您应指定组织 URL(适用于 Space On-Premises)或选择所需的 Cloud 实例(适用于 Space Cloud),TeamCity 将自动创建并安装具有所有必需权限的 Space 应用程序。
这个教程解释了如何手动设置 TeamCity-Space 集成。 有关如何使用较新的半自动方法实现 Space 集成的详细说明,请参阅以下章节: 配置连接,JetBrains Space。
在您的 JetBrains Space 实例中:
在导航栏中,单击 扩展 并选择 已安装到组织。
单击 新应用程序。
输入一个方便的名称(例如,
Space-to-TeamCity
),保存应用程序,然后单击 转到应用程序设置。配置 In-context Authorization:
在 身份验证 选项卡上,单击 在新上下文中授权。
输入您即将从 TeamCity 访问的 Space 项目的名称,然后单击 授权。
tip
当您在 JetBrains Space 中创建一个项目时,它并不会自动将您添加到此项目作为成员 —— 这需要手动完成。 TeamCity 只能查看您被列为成员的那些项目。
(可选 )如果您希望 TeamCity 能够将提交状态发布到 Space,您需要添加相应的权限。
单击 配置 并启用 Git Repositories | Report external check status。 此请求必须由项目管理员接受。
配置 全局授权:
在 身份验证 选项卡上,单击 配置。
要从 TeamCity 到 Space 建立通用访问权限,请启用 Members | View member profile 权限并单击 保存。 此请求必须由服务器管理员接受。
配置 Authentication Mode:
返回应用程序的 概述 并打开 身份验证 选项卡。
启用 Client Credentials Flow。
为了能够通过 Space 在 TeamCity 中进行身份验证或者/以及从 Space 仓库创建项目/配置,请同时启用 Authorization Code Flow。 输入您的 TeamCity 服务器的重定向 URI (
https://<server>:<port>/oauth/space/accessToken.html
)。tip
为确保您的 TeamCity 服务器始终可以连接到 JetBrains Space,指定服务器所有其它可能的端点地址非常重要。 在大多数情况下,指定在 TeamCity 中 全局设置 设置的 Server URL 即可。 然而,如果您为您的 TeamCity 服务器使用了 代理 ,但是直接访问此服务器,除非此处也指定了服务器的 IP 地址,否则身份验证可能无法工作。
复制应用程序的 Client ID 和 Client secret。 您将需要它们来进行 TeamCity 端的配置。
现在,您可以返回到 TeamCity 并添加一个到 JetBrains Space 的连接。
tip
TeamCity 允许您在一个地方配置您的 连接 到服务的所有设置,然后在不同的项目和构建配置中重复使用这些设置。 如果您在 Root project 级别添加了这样的 connection ,这将允许使用其设置连接服务器上的任何其他项目。 为了使连接仅在特定项目中可用,您需要在此项目中添加它。
要创建与您的 JetBrains Space 实例的连接:
转到 项目设置 | 连接 并单击 添加连接。
选择 JetBrains Space 连接类型。
按照以下设置进行输入:
Space URL :您的 Space 实例的 URL (
<company_name>.jetbrains.space
)。Client ID :从 Space 应用程序的 身份验证 选项卡复制的客户端 ID 值。
Client secret :从 Space 应用程序的 身份验证 选项卡复制的客户端密钥值。
保存连接。
在这个阶段,您可以根据需要从当前项目或其任何子项目中访问您的 JetBrains Space 实例。
有三种方法可以将 VCS 仓库与 TeamCity 集成:
基于仓库创建一个 TeamCity 项目。
在现有的 TeamCity 项目中,基于仓库创建一个 构建配置。
基于现有 TeamCity 项目中的存储库创建一个 VCS root。
我们将描述第一种方法,因为它最受欢迎且自给自足。 然而,您总是可以在现有项目中添加一个更多的 Space root 或 build configuration—— 此过程相似。
让我们创建一个子项目,即您在进行 初步设置 期间添加了 Space 连接的项目的子项目。 如果是 Root project ,请转到 管理 | 项目 并单击 创建项目。
您会注意到新按钮: 来自 JetBrains Space。 它的名称取决于您给连接的 显示名称 ,但您总是可以通过 Space 徽标来区分 Space 连接和其他连接。 创建新的项目:
单击 来自 JetBrains Space。
由于这是您首次将此服务器连接到您的 Space 实例,您必须通过您的用户资料在 Space 中进行身份验证。 单击 登录 Space 并接受访问请求。 下次,除非您退出登录或更改密码,否则无需再次确认。
tip
如果您收到了 OAuth 2.0 Error ,这可能意味着在初步设置的步骤 1 中, Redirect URI未被正确配置。 请务必 修订它。 请注意,Space 仅支持 HTTPS 连接。
项目创建向导将显示您的用户可以访问的所有 Space 项目的列表。 选择一个仓库,等待 TeamCity 验证连接设置。
现在是时候配置新项目的主要设置和它的 VCS root 了。 您随时都可以进行调整。
项目名称以及其首个 构建配置的名称。
VCS 根 :(只读)与您在步骤 3 中选择的存储库的 URL 匹配。
默认分支:
refs/heads/main
,或者您选择的其他分支。 请记住保留refs/heads
,只更改分支名称。分支规范 :如果您想要在默认分支之外的其他分支上运行构建,此设置允许扩大 VCS 根的监控范围以覆盖这些分支。 TeamCity 使用一种 特殊格式或分支规格规则 进行此操作。 要监控整个存储库,请使用
refs/heads/*
规则。
tip
我们的样本项目包含了在 TeamCity Kotlin DSL 格式中指定的项目设置。 如果 TeamCity 在您的仓库中检测到它们,它可以自动将规格应用于新项目。
单击 继续。
TeamCity 将尝试在您的项目中 自动检测构建步骤。 您可以确认或拒绝建议的步骤,并进一步探索项目设置。
如果您像我们刚才所做的那样自动从仓库创建一个项目,TeamCity 会自动添加一个 VCS 触发器。 这个触发器将监视您的 Space 仓库,并在每个新的提交上运行构建。 您可以编辑其设置或 添加其他类型的触发器。
TeamCity 会在构建的 概述 选项卡上显示进入构建的提交。 点击位于提交对面的 Space 图标以在 JetBrains Space 中打开其详细信息:

如果提交中提到了 Space 代码审查标签(例如, JETBRAINS-DEMO-CR-3
)或 Space 合并请求标签,您可以点击该标签,直接跳转到 Space 中相应的代码审查或合并请求。 特别的是,来自 Space 的合并提交始终会附带一个链接,返回到相应的合并请求。
在进行了这些基本设置之后,您可以按照下面的指示进一步开展 Space 集成,或者学习如何 创建更复杂的构建配置并充分利用 TeamCity 的强大功能。
构建的检出范围通常包括以下项目:默认分支的 VCS 根 + 项目的 分支规格 + 构建配置的 检出规则。 通过在此构建配置中添加 Pull Request 构建功能,您可以在这个公式中添加一个项目——合并请求的分支。 这将允许 TeamCity 监控合并请求中的更改,并在其上运行构建。 这种最常见的使用情况是,在功能分支合并到默认分支之前,预先构建和预先测试源代码。
要添加此功能:
打开 配置设置并导航到 构建功能设置选项卡。
单击 添加构建功能 并选择 Pull Requests。
选择最近创建的 VCS 根。
选择 JetBrains Space 作为 VCS 托管类型,并按照以下方式指定设置:
保存设置。
warning
请注意,您在此功能中定义的分支范围不应与 VCS 根的分支规范重叠。 此措施将确保在开始合并请求时不会发生冲突。
现在,TeamCity 将会监控您仓库源分支提交的合并请求。 如果在合并请求上运行构建,TeamCity 将显示请求的详细信息,并向 Space 中的代码审查报告构建状态:

tip
为了保护 JetBrains Space 分支不受未经验证的合并请求影响,您也可以在仓库设置中配置 Quality Gates。 如果您将 TeamCity 构建设置为外部检查,那么在允许合并此请求之前,JetBrains Space 将要求合并请求上的构建成功完成。
阅读更多关于 Pull Requests 构建功能的内容,请参见 此文章。
如果相应的构建成功完成,TeamCity 可以自动将请求合并到目标分支中。 为了实现这一点:
打开 配置设置并导航到 构建功能设置选项卡。
单击 添加构建功能 并选择 Automatic Merge。
指定要监控和合并的分支。
选择一个合并策略。 您可以在此处 这里 找到有关此功能高级设置的更多信息。
保存设置。
每当构建满足所选合并策略的条件时,TeamCity 将把它合并到指定的目标分支。
TeamCity 可以将构建的状态报告到 JetBrains Space。 为了实现这一点:
打开 配置设置并导航到 构建功能设置选项卡。
单击 添加构建功能 并选择 Commit Status Publisher。
选择 JetBrains Space 出版商和 连接到 Space。
指定将在 Space 中为此服务显示的名称。
保存设置。
现在,每当您在此配置中运行构建时,TeamCity 将会向 JetBrains Space 报告构建状态。

您的 JetBrains Space 实例的用户可以使用他们的 Space 帐户在 TeamCity 中进行身份验证。 请注意,此功能需要在根项目级别添加 JetBrains Space connection。
要进行配置:
转到 管理 | 身份验证。
单击 添加模块 并选择 JetBrains Space 类型。
选择是否允许在首次登录时创建新用户,如果他们的电子邮件未被 TeamCity 识别。 如果您使用的是公开可用的 TeamCity 服务器并希望限制对其的访问,那么禁用此选项可能会有所帮助。
保存该模块。
要登录 TeamCity,点击 TeamCity 登录表单上方的 JetBrains Space 图标,然后在重定向后,批准 TeamCity 的请求。

Thanks for your feedback!