TeamCity 2021.1 中的新功能
Kotlin 脚本构建运行程序
由 JetBrains 开发的 Kotlin 是一种被广泛采用且简洁的编程语言。 它适用于 TeamCity 支持的所有平台,非常适合编写构建任务的脚本。 为了满足 TeamCity 高需求对此类工具的需求,我们设计了一种新的 Kotlin Script 构建运行程序。
您可以使用它来自动化重复的例程,例如自定义检查,发送 服务消息,或通过 HTTP 下载文件。 如果您使用 Ant 或 Command Line 构建步骤,并且渴望尝试 Kotlin,那么新的运行器为此提供了绝佳的机会。 您可以使用 Kotlin 重写任务,并将现有的构建步骤切换到新的运行器。
要配置 Kotlin Script 构建步骤,请输入脚本代码或提供其路径。 默认情况下,TeamCity 会使用 Kotlin 1.5.0 运行它,但您可以在 管理 | 工具 中安装任何其他编译器版本。
阅读这篇文章以获取更多详情。
Node.js 构建运行程序
为了提升您在 TeamCity 中构建 JavaScript 项目的体验,我们推出了专用于 Node.js 的构建运行程序。 它允许在您的构建中运行 npm
、yarn
和 节点
命令,并报告详细的测试结果。
您可以手动添加 Node.js 步骤,或让 TeamCity 扫描您的项目仓库。 扫描时,TeamCity 将解析 package.json
文件,以查看项目中使用了哪些框架。 根据这个信息,它将建议添加相应的构建步骤:例如,安装必要的依赖项或运行测试。 您可以随后根据您的喜好调整这些步骤。
如果您的项目中有 ESlint、Jest 或 Mocha 的依赖项,那么 TeamCity 将会在构建概览中直接显示相应的测试结果。
要配置 Node.js 构建步骤,只需输入一个包含必要 Shell 命令的脚本即可:
目前,所有 Node.js 步骤都在 Docker/LXC 容器内运行,这意味着需要在构建代理上安装 Docker 或 Podman。 TeamCity 默认使用 node:lts
版本;但是,如果您的项目中有一个 .nvmrc
文件,它将在那里搜索镜像规范。
阅读这篇文章以获取更多详情。
自定义自动触发的构建
构建触发器现在支持自定义参数。 此功能已经得到了我们用户的期待,因为它使得自动触发的构建与在自定义运行模式中启动的构建一样灵活。
您可以使用此工具以无限种组合在同一配置中自动运行不同的构建。 最重要的是,现在相同的脚本可以根据诸如源分支或启动时间等预设条件,将触发构建部署到不同的目标。
在构建触发器的设置中,您可以找到新的 构建定制 选项卡,其中包含以下选项:
常规设置:如果您需要以干净的源文件开始每次触发的构建,请选择删除 签出目录 中的所有文件。
构建参数:自定义当前构建配置中使用的任何 参数 的值。 或者,添加一个新的参数,它仅在由此触发器启动的构建中可用。 您甚至可以使用它来覆盖依赖构建配置的参数:为此,您可以使用
reverse.dep.<dependencyBuildID>.<property>
语法。
如果您将此功能与我们的 构建步骤执行条件 结合使用,此功能将变得更加有效。 您只需向步骤添加一个基于参数的条件,然后配置两个触发器:一个将运行包含此步骤的构建(条件满足时),另一个则会运行不包含此步骤的构建。 一种常见的用例是,在使用 retry trigger 重新启动失败的构建时运行额外的清理步骤:即使不涉及用户,这也可以帮助解决许多构建问题。
多节点设置改进
TeamCity 的首要任务之一就是为您的构建过程提供高可用性的解决方案。 在此版本中,我们推出了多项更新,使配置高性能且稳定的集群设置变得更加简单。
在运行时将节点从次要切换到主要
现在,如果主节点由于任何原因停止运行,其主要角色和所有相应的责任可以迅速分配给另一台服务器。
默认情况下,新的 "Main TeamCity node " 的责任属于当前主服务器,但如果此服务器变得不可用,它将变得空闲。 您可以将其分配给Administration | Nodes Configuration中的任何次级服务器。
分配的服务器成为主节点,并自动接收其所有其他责任(处理构建,管理代理等)。 这个新的主节点保留了所有正在运行的构建,如果在您的设置中配置了 代理,代理会自动重新连接到它。
当先前的主服务器再次启动时,它将变为次要节点,因为 "Main TeamCity node" 的职责已经被另一台服务器占据。 如有必要,您可以重复上述程序以在这些服务器之间切换角色。
外部代理作为负载均衡器
在 TeamCity 的早期版本中,构建代理需要将所有请求发送到主节点,然后主节点才会将这些请求重定向到合适的辅助节点。 如果主节点发生故障,代理将无法与其指定的次要节点进行通信。 从2021.1版本开始,TeamCity支持一种新的方法 —— 使用代理作为所有客户端(构建代理和 TeamCity 用户)和节点之间的请求负载均衡器。
这种方法允许将所有代理路由到代理服务器,而不是主服务器。 这将使服务器 - 代理通信减少对主节点的依赖,并使您的设置更接近 100% 的可用性。 此外,由于代理不会直接连接到节点,您可以在一个地方 —— 代理级别上配置并维护 HTTPS 设置。
请参见 这篇文章中的更多详细内容和代理配置示例。
管理次级节点上的最大构建数量
如果一个辅助节点被分配用于处理构建,现在可以限制它可以运行的并行构建的数量。 以前,如果启用了节点的 "处理运行构建产生的数据" 功能,它会处理所有构建。 现在,您可以将负载分配到多个节点,甚至保持一些构建分配给主节点。
要配置限制,请转到 Administration | Nodes configuration,在列表中找到所需的节点,并点击其“处理运行构建产生的数据”责任旁边的 编辑。 在 限制构建 对话框中,输入允许在此节点上运行的构建的相对限制。 我们建议您根据节点的硬件能力来设置限制。
如果所有辅助节点上的允许构建的最大限制都已达到,TeamCity 将在主节点上启动新的构建 —— 直到某个辅助节点完成其构建。
基于 Elastic 的新搜索模式
作为一种替代方案,相较于本地基于 Lucene 的搜索,TeamCity 现在提供了一种基于 Elasticsearch 的搜索模式。 两种模式均允许通过编号、标签和许多其他参数搜索构建。 主要区别在于搜索索引的位置:它可以存储在 TeamCity 服务器旁边,或者在您的 Elastic 主机上。
新模式具有两个优点:(1)它可以节省 TeamCity 服务器机器的磁盘空间,(2)它对 TeamCity 的性能更有益。 对于多节点安装,它尤其有效,因为节点在维护单个远程索引上的资源消耗比在多个本地索引上要少。
对于相对较小的安装,您可以继续使用 Lucene 搜索,无需重新配置任何内容。
您可以在 Root 项目级别上选择搜索模式,在 项目设置 | 构建搜索 中进行选择。 要连接到您的 Elastic 主机或集群,请输入其 URL 和凭证。
在您保存新的设置后,TeamCity 将会花费一些时间重新索引构建。 确切的持续时间取决于您的服务器的大小。 您可以在 Diagnostics 表格中跟踪或控制进度。
只读项目设置
版本化项目设置 是 TeamCity 最受欢迎的功能之一。 我们根据您的反馈不断增加更多控制到这个功能:自这个版本以来,您可以在 TeamCity UI 中将项目设置设置为只读。
当启用项目设置的同步时,所有在用户界面中做出的更改都将提交到设置仓库,反之亦然。 但在某些情况下,禁止通过用户界面编辑设置可能会更方便。 例如,如果您将项目设置存储在与其源代码相同的存储库中,您可能希望通过 VCS 的手段完全跟踪并批准所有更改。 或者,如果您从只读分支导入设置,然后在 UI 中更改它们,那么 TeamCity 将无法提交回存储库,因此,无法应用在 VCS 中所做的新更改。
为了解决这些以及类似的情况,我们添加了一个新选项:允许通过 UI 编辑项目设置。 如果您在项目中禁用它,这将使该项目的设置在用户界面中变为只读,并阻止 TeamCity 向设置的仓库提交。
要切换新选项,请转到 Project Settings | Versioned Settings | Configuration:
阅读这篇文章以获取更多详情。
限制访问令牌的权限
您现在可以创建具有有限权限的访问令牌,并使用这些令牌进行 REST API 请求。 这使您可以更好地控制脚本如何与 TeamCity 集成。 例如,如果与超时设置结合使用,这可以生成针对特定任务的短期令牌。
默认情况下,一个令牌的 权限范围 被设置为“与当前用户相同”。 这意味着创建的令牌将授予与当前用户相同的权限。 您可以使用此类令牌进行 UI 认证和进行 REST API 请求。
如果您将范围更改为“每个项目限制”,您将能够限制令牌对特定项目的访问,并且甚至可以为其选择特定权限。 可用项目和权限的列表取决于您的用户角色。 仅可将作用域有限的令牌用于 REST API 请求。
Perforce 支持改进
这个版本为在 Perforce 中的版本化项目带来了多项改进。
在 Linux Docker 镜像中的 Perforce 客户端
现在,TeamCity 代理和服务器的 Linux Docker 镜像附带了 Perforce 客户端。
简化 post-commit 钩子的设置
提交后钩子可以减少轮询操作的数量,并卸载 TeamCity 和 VCS 服务器。 在之前的版本中,需要为 Perforce 维护几个钩子。 现在,您可以轻松为整个 Perforce 仓库配置单个 post-commit 钩子。 要执行此操作,请按照我们文档中的 此说明 进行。
支持 ChangeView 规格
TeamCity 现在支持在 Perforce 客户端中的 ChangeView 规范,并理解流定义的导入语句中的 @修订
语法。
更进一步,如果一个 Perforce VCS 根目录 被设定为 客户端映射模式,您可以使用 ChangeView
规格来限制根目录的范围到特定的修订版或多个修订版。 为了实现这个,打开 Perforce VCS 根的设置,选择客户端映射连接模式,并输入客户端映射。 例如:
其中 90 家
是 dir1
的确切版本号,而 automaticLabelWithRevision
则是 dir2
的标记版本。 这些目录的所有其他修订版本将不会受到此 VCS 根的监控。
在 Perforce 服务器上清理流工作区
TeamCity 允许使用 Perforce 流作为功能分支。 为了最优地处理此类流中的更改,需要在 Perforce 服务器上创建和维护专用工作区。 随着时间的推移,这些工作区可能会消耗 Perforce 服务器机器上的大量资源。 此外,如果您想关闭一个任务流,如果有与其关联的工作区,那么您将无法做到这一点。 这两个问题都可以通过删除不再需要的工作空间来解决。 以前,没有自动清理它们的方法,任何手动清理都需要涉及到 Perforce 服务器管理员。 使用新的 Perforce 管理员访问 连接,项目管理员可以直接从 TeamCity UI 清理工作区。
要配置此项,前往您的 TeamCity 中的项目设定,在 连接 下,添加一种新的 Perforce 管理员访问 类型的连接。 输入用于访问 Perforce 服务器的主机和用户凭证(用户必须具有 admin permission),然后 TeamCity 将连接到它。
在每次 清理 过程中,TeamCity 将会检测并删除超过 7 天未活动的工作区。 或者,您可以随时通过点击连接设置中的“删除这些工作区”来进行删除。 请注意,工作空间只在服务器上删除 —— 不在构建代理上删除 —— 并且只有在 TeamCity 创建的情况下才会删除。
如果在 Perforce 根中启用了对功能分支的支持,也可以删除与此根可用流相关联的工作区。 转到 构建配置主页,打开操作菜单,并点击删除 Perforce 流工作区。 默认情况下,拥有项目开发者角色的所有用户都可以使用此操作。 在此菜单中,您可以指定到流的路径,TeamCity 将在 Perforce 服务器上删除相关的工作区。
入门 UI 助手
TeamCity 具有丰富的用户界面,对于初学者来说,其众多便利功能可能并不明显。 为了帮助我们的新用户在界面中导航,我们推出了新手启动 UI 助手。
要启用它,打开屏幕右上角的 帮助 菜单,然后点击 显示提示。 您可以随时通过关闭助手菜单来隐藏它们。
要查看某个元素的提示,将鼠标悬停在助手菜单中的其名称上。 一些提示名称还提供了一个 链接,以指向相关文档。
对于 实验性 Project Home、Build Configuration Home 和 Build Overview,以及一些 Settings 页面,都可以获取提示。
实验性的用户界面改进
我们的实验性用户界面仍在开发中:我们在开发的初期阶段就引入了它的特性,以便您已经可以从中受益。 在每个版本中,我们都会优化已有的页面,并在新的用户界面中再现所有重要的经典功能。
实验性用户界面的发展路线图在很大程度上依赖于我们用户的反馈。 在 2021.1 版本中,我们专注于改进“构建概览”页面:请以下文阅读有关测试的树形模式以及新的代码覆盖可视化的内容。 我们还根据您的要求对 调整了设计 的 项目首页 进行了调整。
在构建概览中以树状模式显示测试
测试结果通常是您在打开构建详细信息时寻求的最重要信息。 我们一直在改进实验性用户界面中测试的表示方式:我们的目标是复制经典用户界面中的所有工具,并使它们对您更加方便。 现在,新的 UI 支持在 构建概览 中的测试树模式。
在 Tests 区块内,点击 显示分组测试,TeamCity 将按照 项目 → 构建配置 → 测试套件 → 测试包 → 测试类 的方式,将它们展示在树结构模式中。 您可以根据当前的任务随时在树状结构和平面结构之间切换。
由于同一组内的测试具有相似的目的,您可能希望快速选择所有测试,或者暂时折叠它们以便专注于其他组。 树形模式对此非常有效,特别是在您的构建配置中有很多测试时,它会特别有帮助。 当选择了一个组时,您可以一次性对其所有测试应用 Investigate 或 Mute 等操作。
如果您更偏爱键盘导航,使用 上 和 下 键来导航树结构,以及使用 空格 键来收起或展开所选的分组或测试。
新的代码覆盖率预览
TeamCity 可以为 多个构建运行程序 提供代码覆盖率。 在这个版本中,Build Overview 中的代码覆盖预览变得更加直观。
如果构建配置有可用的覆盖率,您可以快速预览构建测试的可视化统计信息,并查看与前一次构建相比有何变化:
精细化项目首页
在收集了您对实验性的 Project Home 页面的反馈后,我们专注于两项任务:更有效地利用这个页面上的空间,以及使项目树更易于导航。 我们希望精心设计的页面能为您服务,作为预览和运行同一项目的所有构建版本的便利仪表板:
限制使用个人补丁自定义构建
TeamCity 允许您使用本地更改运行自定义构建 - 而无需实际更改存储在 VCS 中的公共项目的代码。 要运行此类构建,您需要将带有更改的补丁发送到 TeamCity 服务器:可以通过在 IDE 中使用 远程运行,或者通过 UI 或 REST API 来上传。 这个补丁将被送到构建代理机器,并仅在自定义构建中使用。 然而,由于补丁存储在代理文件系统上,最好确保它只包含可信的更改,这些更改不会对在此代理上运行的下一个构建造成潜在的伤害。
为此,我们创建了一个新的用户权限——使用自定义补丁更改构建源代码。 在升级到 2021.1 版本后,将会为默认的项目开发者角色和其他具有 自定义构建权限 的角色自动启用。 通过切换此权限,您可以精细控制谁可以修补构建,或者在重要项目中完全限制此功能。
定制将工件多部分上传至 Amazon S3
如果您在 Amazon S3 中存储构建工件,现在您可以控制它们的上传方式。 TeamCity 默认使用 multipart upload 来上传大型文件,但现在可以自定义其参数:上传阈值和上传部分大小。 这可以帮助更有效地使用网络带宽并提高吞吐量。
在构建配置中添加多个 VCS 触发器
现在,您可以在构建配置中添加多个 VCS 触发器。 如果您想在相同的配置中触发构建,但根据不同的触发规则和不同的分支过滤器,这将非常方便。 这使您可以为所有分支设置一个静默期,除了一个分支 - 在这个分支中,只要有新的更改提交,就会立即开始构建。 或者,您可以配置一个触发器,在给定的一个分支中,每次检入时都开始构建。
选择 Git 根的检出策略
Git VCS 根目录有一个新的 Checkout 策略 选项。 您可以在四种策略中选择,并根据您的构建代理的生命周期获得不同的优势。
默认策略是 AUTO,这意味着决策始终由 TeamCity 决定。 但是,您可以通过选择其他选项之一来为 VCS 根强制执行某项策略:
使用镜像:非常适合运行大量构建的长期代理。 代理上保留有一个仓库镜像,这加快了后续构建的速度。
不要使用镜像:只需在构建检出目录中获取存储库,无需创建镜像。 在磁盘使用方面较不理想,并保留了与现有构建配置的向后兼容性。
Shallow clone:对于短期代理(例如,云中的一次性代理)来说最好。 只获取对一次构建必要的单个修订版。 这可以使构建开始的速度显著提升,尤其是如果项目仓库有着长期的修订历史。
阅读这篇文章以获取更多详情。
查看在容器内运行的进程的线程转储
TeamCity 允许在构建结果中直接查看在构建代理机器上运行的进程的线程转储。 现在,即使进程在容器内运行(例如,使用我们的 容器包装器 或 Docker Compose 功能),您也可以查看它。 对于 Windows 容器,TeamCity 显示 Java 进程及其线程转储。 对于 Linux 容器,它显示所有正在运行的进程和 Java 进程的线程转储。
在构建运行时,点击其 概述 中的 查看线程转储。
TeamCity 将显示有关代理进程的结构化信息:
快速访问构建状态小部件
我们的 build status widget 显示配置中最后一次构建的状态。 由于小部件不需要身份验证,您可以在 TeamCity 以外的任何地方展示构建状态图标:例如,在 GitHub 上。 现在,您可以快速访问此小工具,方法是从 Build Overview 进行访问。
要从 构建配置首页 访问部件菜单,打开 操作 菜单并点击 获取构建状态图标:
Status Image 菜单显示图标预览,并允许以其中一个支持的格式复制其代码:
您可以将此代码嵌入到外部页面中,并在不打开 TeamCity 的情况下查看构建状态。
其他改进
跨平台 ReSharper 检查和重复项查找器
ReSharper 检查和重复项查找器现在支持跨平台模式,并可在 Docker 中运行。为构建代理设置 .NET SDK 的要求
现在,.NET 构建运行程序允许对安装在构建代理上的 SDK 设置要求。 在配置 .NET 步骤时,您可以输入预期的 SDK 版本列表,TeamCity 将自动创建代理需求:当前构建只会在拥有所有必需 SDK 的代理上运行。Python 运行器更新
Marketplace 插件验证
TeamCity 将检查从 JetBrains Marketplace 安装的每一个新插件是否使用有效证书签名。 这将确保已安装的插件安全可用,其源代码完整无损。
已解决的问题
升级说明
在升级之前,我们强烈建议您阅读有关 2021.1 版本相对于 2020.2.x 的重要变化的内容。
以前的版本
路线图
参阅 TeamCity 路线图,了解未来的更新。