TeamCity On-Premises 2026.1 Help

作业设置

作业包含依次运行的各个构建步骤。本文介绍用于控制执行顺序的常用设置。 本文介绍用于控制执行顺序的常用设置。

编辑作业设置

要查看和编辑作业设置,请点击右上角的 设置切换 ,然后点击任意作业图块(或点击“添加”图块以创建新作业)。

打开作业设置

您还可以从可视化编辑器切换到代码,直接编辑标记。

步数

使用本节可以定义作业所执行的操作,例如构建与测试项目、运行自定义脚本、上传 Docker 镜像等。

目前,管道支持四种类型的可添加步骤。 这些都是对应 经典构建配置步骤的轻量版本。

脚本

这是一个通用步骤,可直接在代理机器终端中执行命令。 因此,您可以与安装在代理上的任何工具进行交互:cURL、Python、MSBuild、Homebrew 等。

例如,以下步骤会下载由目标构建配置生成的工件:

jobs: Job1: name: Job 1 steps: - type: script script-content: >- curl --location 'https://example.com/app/rest/builds/buildType:BuildConfigID/artifacts/archived/?locator=pattern%3A*.zip' \ --header 'Content-Type: application/zip' \ --header 'Accept: application/zip' \ --header 'Authorization: Bearer %bearer-token%' \ --output output.zip \ --data '' files-publication: - path: output.zip share-with-jobs: true publish-artifact: true secrets: bearer-token: credentialsJSON:12e5c38b-16a1-4201-a913-5b5411bd7bfe

Gradle

此步骤专为与 Gradle 构建工具交互而构建,可以用于构建、测试和打包 Java、Kotlin、Groovy、Scala、Swift 等项目。

name: Gradle Project jobs: Job1: name: 'Job 1: Gradle Build' steps: - type: gradle tasks: clean build -x test use-gradle-wrapper: 'true' Job1_2: name: 'Job 2: Test Suite 1' runs-on: Linux-Medium steps: - type: gradle working-directory: test1 tasks: clean test build-file: build.gradle use-gradle-wrapper: 'true' dependencies: - Job1

Maven

Maven 构建步骤旨在使用 Apache Maven处理 Java、Kotlin、Groovy 等项目。

jobs: Job1: name: Job 1 steps: - type: maven maven-version: bundled_3_6 pom-location: pom.xml goals: '-B -DskipTests clean package' jdk-home: '%env.JDK_21_0%'

构建功能

与步骤类似,构建功能执行特定操作。 不过,功能会在构建生命周期的预定点运行,而步骤更灵活,可以按需安排。

例如:

  • 脚本 是一个执行终端命令的构建步骤。 其行为取决于您的设置:可以运行单条命令或完整脚本,使用内联或基于文件的脚本,并可以在流水线的任意点执行。

  • Swabra 是一个构建功能,在特定时间(构建前或构建后)执行一项特定操作——清理构建过程中产生的文件。

目前,流水线仅支持构建配置中部分可用的 构建功能

构建文件清理器(Swabra)

跟踪在构建期间创建、修改或删除的文件。 新文件会在构建结束后或下次构建启动时被移除,而被修改或删除的文件则会在构建日志中报告。 您还可以将跟踪范围限定为特定文件和目录。

了解更多: 构建文件清理器 (Swabra)

构建缓存

通过复用之前运行中生成的文件,如已下载的 npm 软件包或 Maven 本地仓库工件 ,提升构建性能。

了解更多: 构建缓存

可用磁盘空间

自动清理代理磁盘,确保新构建有足够的可用空间。

了解更多: 释放磁盘空间功能

XML 报告处理

允许 TeamCity 使用由外部工具生成的报告文件。 支持的格式包括测试框架报告,如 JUnit、Maven Surefire/Failsafe、TRX 和 Google Test,以及来自 SpotBugs、PMD、Checkstyle 等工具的代码分析报告。

了解更多: XML 报告处理

优化

本节介绍可显著加快 Pipeline 运行速度的设置,从而节省时间、资源,对于云代理还能节省基础架构成本。

  • 并行测试 — 允许 Maven 和 Gradle 步骤将测试套件拆分为多个批次,在不同构建代理上并行启动 N 个虚拟构建。

  • 重用作业结果 — 如果所有启用的 仓库中没有新更改,TeamCity 将跳过重新运行该作业,并重用先前运行中的工件、状态和结果。 这样可确保仅执行受最近更改影响的作业。

    重用的作业将在 UI 中明确标记,以避免混淆。

    Pipeline 运行重用

    请注意上方的“优化”图块:TeamCity 此次运行速度几乎比上次快 5 倍,重用运行节省了约 80% 的时间。

Agent Requirements(代理要求)

TeamCity 会自动跟踪代理软件,以确保仅将排队的运行分配给兼容的代理。 例如,如果 Maven 步骤必须在容器中运行,则不安装 Docker 或 Podman 的代理将被标记为不兼容。

同样,如果作业使用了未在项目、 流水线作业参数 部分定义的参数,TeamCity 最后会在代理机器上查找该参数值。 例如,如果命令行步骤运行 echo %myParam% 时引用了未知参数,则仅参数 "myParam" 不为空的代理可以运行该作业。

Pipeline 中的隐式要求

代理要求 部分允许您为符合条件的代理定义附加条件,如名称、硬件规格或已安装的工具。

TeamCity 会显示适用于大多数基本代理硬件要求的预设选项:CPU 核心数、代理内存总量及 CPU 架构。

Pipeline 代理要求

点击 添加自定义要求 以定义您自己的要求。 每个要求都是一个 <agent.parameter> <运算符> [值] 表达式。 TeamCity 会针对每个已授权代理计算这些表达式,并将返回 "true" 的代理标记为符合条件,其他代理标记为不兼容。

代理参数

代理计算机报告的一个参数,其值必须符合所需条件。 以下是一些常见代理参数示例:

  • teamcity.agent.jvm.os.arch — 报告代理计算机的架构。 例如,对于在 Apple ARM 设备上运行的 macOS 代理,结果为 aarch64

  • env.ANDROID_SDK_HOME — 返回代理计算机上 Android SDK 的安装路径。 例如, /home/builduser/android-sdk-linux

  • teamcity.agent.jvm.user.timezone — 存储代理计算机的时区。 例如, Etc/UTC

  • MonoVersion — 返回 Mono 平台的版本信息。 例如, 6.12.0.200

导航至 代理 | <TeamCity_Agent> | 代理参数 选项卡,查看代理报告的参数,并查找存储硬件和软件数据的参数。

TeamCity 代理参数

另见: 预定义构建参数列表

运算符

用于将实际代理参数值与给定值进行比较的逻辑运算符。 例如,“小于”、“以...开头”、“包含”等。

另请参阅: 需求条件

价值

要与代理参数值进行比较的自定义值。 唯一不需要值的运算符是 exists ,用于检查代理是否报告了所需的参数,无论其实际值为何。

以下 YAML 示例定义了三个要求:16 GB 的 RAM、至少 10 GB 的可用磁盘空间,以及已安装的 Python 3。 标准 TeamCity 要求使用较简洁的 别名:值 语法,自定义要求则使用完整的 <参数> <运算符> [值] 表达式(并带有用于公共标题的额外 名称 参数)。

jobs: Job1: name: Sample job steps: - type: script script-content: cat artifact.txt runs-on: self-hosted: - ram: 16GB - requirement: more-than name: Free disk space parameter: teamcity.agent.work.dir.freeSpaceMb value: '10240' - requirement: exists name: Python parameter: python3.executable

参数

参数是名称-值对,用于将原始值替换为引用。 当 TeamCity 遇到参数引用(%\形参名称% )时,会将其替换为实际的参数值。

TeamCity 支持两种参数层级:pipeline 参数和 job 参数。 流水线参数同时可作为输入参数和输出参数。

  • 作业参数​​},{ 通常仅在其所属父作业中可用。 默认情况下,它们包含 env. 前缀。 要从 下游 作业访问作业参数,请使用 job.<source_job_ID>.<parameter_name> 语法。 下方示例展示包含一个参数的作业。 下游作业通过引用该参数来指定自身的 ParamJobB

    jobs: Job1: name: Job 1 steps: - type: script script-content: |- echo "Print Job1 parameter: %env.ParamJobA%" # prints 'foo' parameters: env.ParamJobA: foo Job2: name: Job 2 dependencies: - Job1 parameters: env.ParamJobB: '%job.Job1.env.ParamJobA% bar' steps: - type: script script-content: |- echo "Print parameter from upstream Job: %job.Job1.env.ParamJobA%" # prints 'foo' echo "Print modified parameter: %env.ParamJobB%" # prints 'foo bar'

  • 管道输入参数 会在本流水线的所有作业间共享。 请参阅 流水线参数 了解详情。

  • 管道输出参数 无法在同一流水线中使用。 而是传递给同链路下游的流水线和配置。 请参阅 管道依赖项 了解详情。

作业步骤还可以发送 setParameter 服务消息 ,以动态编辑参数值(或创建新参数)。 请注意,修改后的值仅在发送该消息的步骤结束后才可用。

parameters: env.JobParam: foo jobs: Job1: name: Job 1 steps: - type: script name: Print original value script-content: echo %env.JobParam% # prints 'foo' - type: script name: Change param value script-content: |- echo "##teamcity[setParameter name='env.JobParam' value='bar']" echo %env.JobParam% # prints 'foo', the step is still running - type: script name: Print modified value script-content: echo %env.JobParam% # prints 'bar'

输出文件

作业共享的文件可以作为工件、供下游作业使用的内部文件,或者两者兼而有之。

工件

工件是在运行结果页面的 工件 选项卡中显示的文件。 具有查看项目权限的用户可以将这些文件下载到本地存储。

您可以通过两种方式查看工件:

  • 在运行结果页,打开 工件 选项卡,可查看流水线中各作业发布的所有工件。

  • 在同一页面,选择某个作业以打开其侧边栏,然后切换至 工件 选项卡以查看该作业生成的工件。

作业工件选项卡
共享文件

共享文件将沿 pipeline 向下传递到后续作业。 这些通常是内部文件或尚未完成的文件。

与工件不同,共享文件不会在构建结果页的主 工件 选项卡中显示。 不过,它们会显示在作业侧栏的 工件 选项卡中,打包为隐藏的 .shared_files.zip 压缩包。

在工件选项卡中可见的共享文件

下面的 YAML 示例展示了一个作业创建并修改文件,然后另一个作业导入该文件并打印其内容。 “作业 2” 接着将该文件发布为工件。

jobs: Job1: name: Create file steps: - type: script script-content: |- touch sample.txt echo "File created by Job 1, build #%tc.build.number%" >> sample.txt files-publication: - path: sample.txt share-with-jobs: true publish-artifact: false Job2: name: Print file contents dependencies: - Job1 steps: - type: script script-content: cat sample.txt files-publication: - path: sample.txt share-with-jobs: false publish-artifact: true

这两种类型并不互斥:添加输出文件时,您可以同时勾选 共享文件工件 复选框。

已发布的工件

请注意,共享文件会保留其父目录层次结构,而工件不会。 下例展示了一个作业生成两个文件,均位于各自的文件夹中。

jobs: Job1: name: Job 1 steps: - type: script script-content: |- mkdir ./artifacts cd artifacts touch artifact.txt echo "This file is published as artifact" >> artifact.txt - type: script script-content: |- mkdir ./sharedfiles cd sharedfiles touch shared.txt echo "This is a shared file" >> shared.txt files-publication: - path: sharedfiles/shared.txt share-with-jobs: true publish-artifact: false - path: artifacts/artifact.txt share-with-jobs: false publish-artifact: true

尽管步进脚本和 files-publication 规则几乎相同,结果却略有不同。 共享文件会与其父文件夹一起打包进隐藏的 ".shared_files.zip" 压缩包,而工件则原样归类于 "publish" 目录下。

工件和共享文件的文件夹保留策略

存储库

本节允许您选择该作业应签出哪些远程仓库。 要添加仓库,请在 仓库 部分中创建一个新条目,位于 pipeline settings 中。

默认情况下,源代码将签出至代理工作目录的一个子文件夹中。 为确保代理在运行其他作业时不会频繁丢失某个作业的源代码,该子文件夹的名称是自动生成的,并对每个作业唯一(例如, /mnt/agent/work/6fa95896c6cadf54)。

您可以通过 存储库 部分项的相应选项,指定用于签出源代码的自定义目录。 签出目录的路径可以是绝对路径,但强烈建议使用相对路径(MyCustomFolder )或引入预定义 TeamCity 参数的路径(%teamcity.agent.work.dir%/MyCustomFolder)。

jobs: Job1: name: Job 1 steps: [] repositories: - https://github.com/Johndoe/MySampleApp: # Repository from URL path: ''' # Default value, will use a directory that matches the repository name enabled: true - Root_MyRoot: # Repository from an existing VCS root path: sample-java-app-maven.git enabled: true - main: # Main repository path: Athanor # Custom checkout directory (relative path) enabled: false

下图概述了构建过程中涉及的核心目录之间的关系。

代理和构建目录

请参阅以下文章以了解更多信息:

集成

pipeline 和作业设置面板都包含一个 集成 部分,用于连接私有 Docker 和 NPM 注册表。

  • 在 pipeline 设置中,您可以管理作业可用集成的完整列表。

  • 在作业设置中,开关允许您选择该作业应自动登录哪些注册表,从而确保构建步骤能够访问所需数据。

传统 TeamCity 构建配置通过“连接 + 构建功能”组合支持此功能:

如果某个项目中已有 Docker 或 NPM 连接,则该 pipeline 会在其“集成”部分下显示该连接。

继承的集成

这些继承的集成无法直接通过 pipelines 设置面板编辑,您需要在项目设置中修改其源连接。

2026年 8月 6日