使用预定义变量

Azure DevOps 服务 |Azure DevOps Server |Azure DevOps Server 2022

变量为你提供了一种简便方法,可以将关键数据位导入管道的各个部分。 这是可供使用的预定义变量的列表。 可能有一些其他预定义的变量,但它们大多供内部使用。

这些变量由系统自动设置,并且是只读的。 (例外情况是 Build.Clean 和 System.Debug。)

在 YAML 管道中,可以引用预定义的变量作为环境变量。 例如,变量 Build.ArtifactStagingDirectory 将成为变量 BUILD_ARTIFACTSTAGINGDIRECTORY。

对于经典管道,可以在部署任务中使用发布变量来共享常见信息(例如环境名称、资源组等)。

详细了解如何使用变量。

提示

可以请求 Copilot 获取有关变量的帮助。 若要了解详细信息,请参阅 Ask Copilot根据变量值生成具有条件的阶段。

Build.Clean

这是一个已弃用的变量,用于修改生成代理清理源的方式。 若要了解如何清理源,请参阅清理代理上的本地存储库。

System.AccessToken

System.AccessToken 是一个特殊变量,它携带了正在运行的生成所使用的安全令牌。

在 YAML 中,必须使用变量将 System.AccessToken 显式映射到管道中。 可以在步骤或任务级别执行此操作。 例如,可以使用 System.AccessToken 通过容器注册表进行身份验证。

steps:
- task: Docker@2
  inputs:
    command: login
    containerRegistry: '<docker connection>'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

可以使用System.AccessToken配置 的默认范围。

System.Debug

有关调试管道问题的更详细日志,请定义 System.Debug 并将其设置为 true。

  1. 编辑管道。

  2. 选择“变量”。

  3. 添加一个名为 System.Debug、值为 true 的新变量。

    将 System.Debug 设置为 true

  4. 保存新变量。

将 System.Debug 设置为 true 会为所有运行配置详细日志。 还可以使用“启用系统诊断”复选框为单个运行配置详细日志。

此外,还可以将 System.Debug 设置为 true,作为管道或模板中的变量。

variables:
  system.debug: 'true'

当 System.Debug 设置为 true 时,一个名为 Agent.Diagnostic 的额外变量将设置为 true。 当 Agent.Diagnostic 设置为 true 时,代理会收集更多日志,这些日志可用于排查自托管代理的网络问题。 有关详细信息,请参阅自托管代理的网络诊断。

注意

Agent.Diagnostic 变量可用于 Agent v2.200.0 及更高版本。

有关详细信息,请参阅查看日志以诊断管道问题。

代理变量 (DevOps Services)

注意

可以将代理变量用作脚本中的环境变量,并在生成任务中用作参数。 不能使用它们来自定义内部版本号或应用版本控制标签或标记。

变量 说明
Agent.BuildDirectory 代理上的本地路径,用于创建给定生成管道的所有文件夹。 此变量的值与 Pipeline.Workspace 相同。 例如:/home/vsts/work/1。 有关代理目录结构的详细信息,请参阅 代理目录结构。
Agent.ContainerMapping 在运行时从 YAML 中的容器资源名称到其 Docker ID 的映射。

示例如下表所示。
Agent.HomeDirectory 用于安装代理的目录。 此变量包含代理软件。 例如:c:\agent。 有关代理目录结构的详细信息,请参阅 代理目录结构。
Agent.Id 代理的 ID。
Agent.JobName 正在运行的作业的名称。 此名称通常 Job;或 __default,但在多配置方案中,它是配置。
Agent.JobStatus 生成的状态。
  • Canceled
  • Failed
  • Succeeded
  • SucceededWithIssues(部分成功)
  • Skipped(最后一个作业)
应将环境变量引用为 AGENT_JOBSTATUS。 较旧的 agent.jobstatus 可用于向后兼容。
Agent.MachineName 用于安装代理的计算机的名称。
Agent.Name 注册到池的代理的名称。

如果使用自承载代理,请指定名称。 请参阅代理。
Agent.OS 代理主机的操作系统。 有效值是:
  • Windows_NT
  • Darwin
  • Linux
如果在容器中运行,代理主机和容器可以运行不同的操作系统。
Agent.OSArchitecture 代理主机的操作系统处理器体系结构。 有效值是:
  • X86
  • X64
  • ARM
Agent.TempDirectory 在每个管道作业后清理的临时文件夹。 此目录由.NET核心 CLI 任务等任务用来在发布之前保存临时项(如测试结果)。

例如:对于 Ubuntu,该目录为 /home/vsts/work/_temp。
Agent.ToolsDirectory 任务(如 Node 工具安装程序和 使用 Python Version 等任务使用的目录,用于在多个版本的工具之间切换。

这些任务会将工具从此目录添加到 PATH,以便后续生成步骤可以使用这些工具。

了解如何在自托管代理上管理此目录。
Agent.WorkFolder 此代理的工作目录。

例如:c:\agent_work。

注意:不保证此目录可由管道任务写入(例如,映射到容器时)。 有关代理目录结构的详细信息,请参阅 代理目录结构。

Agent.ContainerMapping 的示例:

{
  "one_container": {
    "id": "bdbb357d73a0bd3550a1a5b778b62a4c88ed2051c7802a0659f1ff6e76910190"
  },
  "another_container": {
    "id": "82652975109ec494876a8ccbb875459c945982952e0a72ad74c91216707162bb"
  }
}

生成变量 (DevOps Services)

在模板中使用未标记为“可用”的模板中的变量时,该变量不会呈现。 变量不会呈现,因为它的值在模板的作用域内无法访问。

变量 说明 是否在模板中可用?
Build.ArtifactStagingDirectory 代理上的本地路径,在推送到目标之前,任何工件都复制到这里。 例如:c:\agent_work\1\a。

使用此文件夹的典型方法是使用复制文件和发布生成工件任务发布生成工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 可互换。 在每次生成之前,此目录都会被清除,因此无需你自行清理。

请参阅 Azure Pipelines 中的 Artifacts。 有关代理目录结构的详细信息,请参阅 代理目录结构。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BuildId 已完成的生成的记录 ID。 否
Build.BuildNumber 已完成的生成的名称,也称为运行编号。 可以指定此值中包含的内容。

此变量的典型用途是使其成为在“存储库”选项卡上指定的标签格式的一部分。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BuildUri 生成的 URI。 例如:vstfs:///Build/Build/1430。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BinariesDirectory 代理上的本地路径,可以用作已编译二进制文件的输出文件夹。

在自承载代理上,默认情况下不会设置新的生成管道来清理此目录。 可以在“存储库”选项卡上定义生成以进行清理。

例如:c:\agent_work\1\b。 有关代理目录结构的详细信息,请参阅 代理目录结构。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.ContainerId 工件的容器 ID。 在管道中上传项目时,该项目将添加到特定于该特定项目的容器中。 否
Build.CronSchedule.DisplayName 触发管道运行的 cron 计划的 displayName。 仅当 YAML 计划触发器触发管道运行时,才会设置此变量。 有关详细信息,请参阅 schedules.cron 定义 - Build.CronSchedule.DisplayName 变量 是
Build.DefinitionName 生成管道的名称。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.DefinitionVersion 生成管道的版本。 是
Build.QueuedBy 请参阅 如何设置标识变量?。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.QueuedById 请参阅 如何设置标识变量?。 是
Build.Reason 导致了生成运行的事件。
  • Manual:用户已手动将生成排入队列。
  • IndividualCI:持续集成(CI) 由 Git 推送或 Team Foundation 版本控制(TFVC)签入触发。
  • BatchedCI:持续集成 (CI) 由 Git 推送或 TFVC 签入触发,并且已选择“批处理更改”。
  • Schedule:计划触发器。
  • ValidateShelveset:用户已手动将特定 TFVC 搁置集的生成排入队列。
  • CheckInShelveset:封闭签入触发器。
  • PullRequest:需要生成的 Git 分支策略会触发生成。
  • BuildCompletion:另一个生成触发器 生成。
  • ResourceTrigger:资源触发器 或 另一个生成触发器 生成。
请参阅生成管道触发器、使用分支策略提高代码质量。
是
Build.Repository.Clean 在 源存储库设置中为 清理 选择的值。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.LocalPath 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s。

在自承载代理上,新的生成管道默认仅更新已更改的文件。 可以在“存储库”选项卡上修改文件的下载方式。

重要说明:如果仅签出一个 Git 存储库,则此路径是访问代码的确切路径。

如果签出多个存储库,则行为如下(可能与 Build.SourcesDirectory 变量的值不同):
  • 如果自(主)存储库的签出步骤未定义自定义签出路径,或者签出路径是自存储库的多签出默认路径 $(Pipeline.Workspace)/s/&<RepoName>,则此变量的值将还原为其默认值,即 $(Pipeline.Workspace)/s。
  • 如果自行(主)存储库的签出步骤定义了不是其多签出默认路径的自定义签出路径,则此变量包含自存储库的确切路径。
此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.ID 存储库的唯一标识符。

即使存储库的名称确实如此,此值也不会更改。
是
Build.Repository.Name 触发的存储库的名称。 是
Build.Repository.Provider 触发的存储库的类型。
此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Tfvc.Workspace 定义存储库是否是 Team Foundation 版本控制。 生成代理使用的 TFVC 工作区的名称。

例如,如果 Agent.BuildDirectory 为 c:\agent_work\12,Agent.Id 为 8,工作区名称可以是:ws_12_8

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Uri 触发的存储库的 URL。 例如:
此变量不能用作内部版本号的一部分,也不能用作版本控制标记。
是
Build.RequestedFor 请参阅 如何设置标识变量?。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.RequestedForEmail 请参阅 如何设置标识变量?。 是
Build.RequestedForId 请参阅 如何设置标识变量?。 是
Build.SourceBranch 生成排队等待的触发存储库的分支。 下面是一些示例:
  • Git 存储库分支:refs/heads/main
  • Git 存储库拉取请求:refs/pull/1/merge
  • TFVC 存储库分支:$/teamproject/main
  • TFVC 存储库封闭签入:Gated_2016-06-06_05.20.51.4369;username@live.com
  • TFVC 存储库搁置集生成:myshelveset;username@live.com
  • 当标记触发管道时:refs/tags/your-tag-name
以生成号格式使用此变量时,正斜杠字符 (/) 将替换为下划线字符 (_)。

注意:在 TFVC 中,如果运行封闭签入生成或手动生成搁置集,则不能以生成号格式使用此变量。
是
Build.SourceBranchName 生成排队等待的触发存储库的分支名称。
  • Git 存储库分支、拉取请求或标记:参考中的最后一个路径段。例如,在 refs/heads/main 中,此值为 main。 在 refs/heads/feature/tools中,此值 tools。 在 中 ,值为 .
  • TFVC 存储库分支:工作区根服务器路径中的最后一个路径段。 例如,在 $/teamproject/main 中,此值为 main。
  • TFVC 存储库封闭签入或搁置集生成是搁置集的名称。 例如,Gated_2016-06-06_05.20.51.4369;username@live.com 或 myshelveset;username@live.com。
注意:在 TFVC 中,如果运行封闭签入生成或手动生成搁置集,则不能以生成号格式使用此变量。
是
Build.SourcesDirectory 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s。

在自承载代理上,新的生成管道仅更新已更改的文件。 有关代理目录结构的详细信息,请参阅 代理目录结构。

重要说明:如果仅签出一个 Git 存储库,则此路径是访问代码的确切路径。 如果签出多个存储库,则它将还原为其默认值,即 $(Pipeline.Workspace)/s,即使自(主)存储库签出到不同于其多签出默认路径 $(Pipeline.Workspace)/s/<RepoName> 的自定义路径(在这方面,该变量与 Build.Repository.LocalPath 变量的行为不同)。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.SourceVersion 此版本中包含的触发存储库的最新版本控制更改。
此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
Build.SourceVersionMessage 触发存储库的提交或变更集的注释。 我们将消息截断到第一行或 200 个字符,以较短者为准。

Build.SourceVersionMessage 对应于 Build.SourceVersion 提交上的消息。 PR 生成的 Build.SourceVersion 提交是合并提交(而不是源分支上的提交)。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

此外,此变量仅在步骤级别可用,在作业或阶段级别中不可用。 也就是说,在作业启动并签出代码之前,不会提取消息。

注意:Build.SourceVersionMessage 变量不适用于 Bitbucket 存储库中的经典生成管道,在启用生成时批处理更改。
否
Build.StageRequestedBy 手动运行阶段时触发阶段的人员,否则Microsoft.VisualStudio.Services.TFS。

注意:此值可以包含空格或其他无效标签字符。
否
Build.StageRequestedForId 手动运行阶段时触发阶段的人员标识的 GUID, 00000002-0000-8888-8000-000000000000 否则为 GUID。 否
Build.StagingDirectory 代理上的本地路径,在推送到目标之前,任何工件都复制到这里。 例如:c:\agent_work\1\a。 有关代理目录结构的详细信息,请参阅 代理目录结构。

使用此文件夹的典型方法是使用复制文件和发布生成工件任务发布生成工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 可互换。 在每次生成之前,此目录都会被清除,因此无需你自行清理。

请参阅 Azure Pipelines 中的 Artifacts。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Git.SubmoduleCheckout 在“存储库”选项卡上 为 签出子模块选择的值。签出多个存储库后,此值将跟踪触发存储库的设置。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.SourceTfvcShelveset 定义存储库是否是 Team Foundation 版本控制。

如果要运行 封闭生成 或 架集生成,此变量将设置为要生成的 架 集的名称。

注意:此变量产生的值对于生成号格式的生成使用无效。
否
Build.TriggeredBy.BuildId 如果 另一个生成触发器 生成,则此变量将设置为触发生成的 BuildID。 在经典管道中,生成完成触发器触发此变量。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.DefinitionId 如果 另一个生成触发器 生成,则此变量将设置为触发生成的 DefinitionID。 在经典管道中,生成完成触发器触发此变量。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.DefinitionName 如果 另一个生成触发器 生成,则将此变量设置为触发生成管道的名称。 在经典管道中,生成完成触发器触发此变量。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.BuildNumber 如果 另一个生成触发器 生成,则此变量将设置为触发生成的数目。 在经典管道中,生成完成触发器触发此变量。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.ProjectID 如果 另一个生成触发器 生成,则此变量设置为包含触发生成的项目的 ID。 在经典管道中,生成完成触发器触发此变量。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Common.TestResultsDirectory 代理上创建测试结果的本地路径。 例如:c:\agent_work\1\TestResults。 有关代理目录结构的详细信息,请参阅 代理目录结构。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否

管道变量

变量 说明
Pipeline.Workspace 特定管道的工作区目录。 此变量的值与 Agent.BuildDirectory 相同。 例如,/home/vsts/work/1。 有关代理目录结构的详细信息,请参阅 代理目录结构。

提示

如果使用经典发布管道,可以使用 经典发布和项目变量 在整个管道中存储和访问数据。

部署作业变量

这些变量的范围限定为特定的 部署作业,并且仅在作业执行时解析。

变量 说明
Environment.Name 部署作业中用于运行部署步骤并记录部署历史记录的环境的名称。 例如,smarthotel-dev。
Environment.Id 部署作业中面向的环境的 ID。 例如,10。
Environment.ResourceName 部署作业中面向的环境中用于运行部署步骤并记录部署历史记录的特定资源的名称。 例如,bookings,它是作为资源添加到环境 smarthotel-dev的 Kubernetes 命名空间。
Environment.ResourceId 部署作业中面向的环境中用于运行部署步骤的特定资源的 ID。 例如,4。
Strategy.Name 部署策略的名称:canary、runOnce 或 rolling。
Strategy.CycleName 部署中的当前周期名称。 选项有 PreIteration、Iteration 或 PostIteration。

系统变量

在模板中使用未标记为“可用”的模板中的变量时,该变量不会呈现。 变量不会呈现,因为它的值在模板的作用域内无法访问。

变量 说明 是否在模板中可用?
System.AccessToken 使用 OAuth 令牌访问 REST API。

从 YAML 脚本使用 System.AccessToken。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.CollectionId Azure DevOps组织或集合的 GUID。 是
System.CollectionUri Azure DevOps组织或集合的 URI。 例如:https://dev.azure.com/fabrikamfiber/。 是
System.DefaultWorkingDirectory 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s 有关代理目录结构的详细信息,请参阅 代理目录结构。

在自承载代理上,新的生成管道默认仅更新已更改的文件。 可以在“存储库”选项卡上修改文件的下载方式。

此变量是代理范围的。 它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.DefinitionId 生成管道的 ID。 是
System.HostType 如果管道是生成,则设置为 build。 对于发布,值为 deployment(部署组作业)、gates(在入口评估期间)以及 release(其他代理和无代理作业)。 是
System.JobAttempt 首次尝试此作业时设置为 1,并在每次重试作业时递增。 否
System.JobDisplayName 为作业指定的可读名称。 否
System.JobId 单个作业的单次尝试的唯一标识符。 该值对于当前管道是唯一的。 否
System.JobName 作业的名称,通常用于表示依赖项和访问输出变量。 否
System.OidcRequestUri 使用 OpenID Connect (OIDC) 通过 Entra ID 生成 idToken。 了解详细信息。 是
System.PhaseAttempt 首次尝试此阶段时设置为 1,并在每次重试作业时递增。

注意:“阶段”是一个没什么实际意义的概念,它表示作业的设计时间(而作业是阶段的运行时版本)。 phase的概念大多从Azure Pipelines中删除。 矩阵和多配置作业是唯一一个阶段与作业不同的位置。 一个阶段可以实例化多个作业,而这些作业只在其输入方面有所不同。
否
System.PhaseDisplayName 为阶段指定的可读名称。 否
System.PhaseName 作业的基于字符串的标识符,通常用于表示依赖项和访问输出变量。 否
System.PlanId 单个管道运行的基于字符串的标识符。 否
System.PullRequest.IsFork 如果拉取请求来自存储库的分支,则此变量设置为 True。

否则,设置为 False。
是
System.PullRequest.PullRequestId 导致此生成的拉取请求的 ID。 例如:17。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 否
System.PullRequest.PullRequestNumber 导致此生成的拉取请求的编号。 对于具有不同拉取请求 ID 和拉取请求编号GitHub的拉取请求,将填充此变量。 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.PullRequest.targetBranchName 拉取请求的目标分支的名称。 此变量可以在管道中用于基于拉取请求的目标分支有条件地执行任务或步骤。 例如,你可能需要根据更改合并到的分支触发一组不同的测试或代码分析工具。 否
System.PullRequest.SourceBranch 正在拉取请求中查看的分支。 例如:Azure Repos的 refs/heads/users/raisa/new-feature。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.PullRequest.SourceCommitId 正在拉取请求中查看的提交。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。
System.PullRequest.SourceRepositoryUri 包含拉取请求的存储库的 URL。 例如:https://dev.azure.com/ouraccount/_git/OurProject。 否
System.PullRequest.TargetBranch 作为拉取请求目标的分支。 例如:当存储库处于Azure Repos时,refs/heads/main,当存储库处于GitHub时,main。 仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.StageAttempt 首次尝试此阶段时设置为 1,并在每次重试阶段时递增。 否
System.StageDisplayName 为阶段提供的用户可读名称。 否
System.StageName 阶段的基于字符串的标识符,通常用于表示依赖项和访问输出变量。 否
System.TeamFoundationCollectionUri Azure DevOps组织或集合的 URI。 例如:https://dev.azure.com/fabrikamfiber/。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.TeamProject 包含此生成的项目的名称。 是
System.TeamProjectId 此生成所属项目的 ID。 是
System.TimelineId 单个管道运行的执行详细信息和日志的基于字符串的标识符。 否
TF_BUILD 如果生成任务运行脚本,则设置为 True。

此变量是代理范围的,可用作脚本中的环境变量,并在生成任务中用作参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否

检查变量 (DevOps Services)

变量 说明
Checks.StageAttempt 首次尝试此阶段时设置为 1,并在每次重试阶段时递增。

此变量只能在环境的审批或检查中使用。 例如,可以在$(Checks.StageAttempt)中使用 。

添加阶段尝试作为参数。

代理变量(Azure DevOps Server)

注意

可以将代理变量用作脚本中的环境变量,并在生成任务中用作参数。 不能使用它们来自定义内部版本号或应用版本控制标签或标记。

变量 说明
Agent.BuildDirectory 代理上的本地路径,用于创建给定生成管道的所有文件夹。 此变量的值与 Pipeline.Workspace 相同。 例如:/home/vsts/work/1。 有关代理目录结构的详细信息,请参阅 代理目录结构。
Agent.ContainerMapping 在运行时从 YAML 中的容器资源名称到其 Docker ID 的映射。 示例如下表所示。
Agent.HomeDirectory 代理安装到并包含代理软件的目录。 例如:c:\agent。 有关代理目录结构的详细信息,请参阅 代理目录结构。
Agent.Id 代理的 ID。
Agent.JobName 正在运行的作业的名称。 名称通常 Job 或 __default,但在多配置方案中,它是配置。
Agent.JobStatus 生成的状态。
  • Canceled
  • Failed
  • Succeeded
  • SucceededWithIssues(部分成功)
  • Skipped(最后一个作业)
应将环境变量引用为 AGENT_JOBSTATUS。 较旧的 agent.jobstatus 可用于向后兼容。
Agent.MachineName 用于安装代理的计算机的名称。
Agent.Name 注册到池的代理的名称。

如果使用的是自承载代理,则此值是指定的名称。 请参阅代理。
Agent.OS 代理主机的操作系统。 有效值是:
  • Windows_NT
  • Darwin
  • Linux
如果是在容器中运行,则代理主机和容器可能运行不同的操作系统。
Agent.OSArchitecture 代理主机的操作系统处理器体系结构。 有效值是:
  • X86
  • X64
  • ARM
Agent.TempDirectory 在每个管道作业后清理的临时文件夹。 此目录由.NET核心 CLI 任务等任务用来在发布之前保存临时项(如测试结果)。

例如:对于 Ubuntu,该目录为 /home/vsts/work/_temp。
Agent.ToolsDirectory 任务(如 Node 工具安装程序和 使用 Python Version 等任务使用的目录,用于在多个版本的工具之间切换。

这些任务会将工具从此目录添加到 PATH,以便后续生成步骤可以使用这些工具。

了解如何在自托管代理上管理此目录。
Agent.WorkFolder 此代理的工作目录。 例如:c:\agent_work。

注意:不保证此目录可由管道任务写入(例如,映射到容器时)。 有关代理目录结构的详细信息,请参阅 代理目录结构。

Agent.ContainerMapping 的示例:

{
  "one_container": {
    "id": "bdbb357d73a0bd3550a1a5b778b62a4c88ed2051c7802a0659f1ff6e76910190"
  },
  "another_container": {
    "id": "82652975109ec494876a8ccbb875459c945982952e0a72ad74c91216707162bb"
  }
}

生成变量 (Azure DevOps Server)

在模板中使用未标记为“可用”的模板中的变量时,该变量不会呈现。 变量不会呈现,因为它的值在模板的作用域内无法访问。

变量 说明 是否在模板中可用?
Build.ArtifactStagingDirectory 代理上的本地路径,在推送到目标之前,任何工件都复制到这里。 例如:c:\agent_work\1\a。 有关代理目录结构的详细信息,请参阅 代理目录结构。

使用此文件夹的典型方法是使用复制文件和发布生成工件任务发布生成工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 可互换。 在每次生成之前,此目录都会被清除,因此无需你自行清理。

请参阅 Azure Pipelines 中的 Artifacts。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BuildId 已完成的生成的记录 ID。 否
Build.BuildNumber 已完成的生成的名称,也称为运行编号。 可以指定此值中包含的内容。

此变量的典型用途是使其成为在“存储库”选项卡上指定的标签格式的一部分。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BuildUri 生成的 URI。 例如:vstfs:///Build/Build/1430。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BinariesDirectory 代理上的本地路径,可以用作已编译二进制文件的输出文件夹。 例如:c:\agent_work\1\b。 有关代理目录结构的详细信息,请参阅 代理目录结构。

默认情况下,不会设置新的生成管道来清理此目录。 可以在“存储库”选项卡上定义生成以进行清理。



它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.ContainerId 工件的容器 ID。 在管道中上传项目时,该项目将添加到特定于该特定项目的容器中。 否
Build.CronSchedule.DisplayName 触发管道运行的 cron 计划的 displayName。 仅当 YAML 计划触发器触发管道运行时,才会设置此变量。 有关详细信息,请参阅 schedules.cron 定义 - Build.CronSchedule.DisplayName 变量。 此变量在 Azure DevOps Server 2022.1 及更高版本中可用。 是
Build.DefinitionName 生成管道的名称。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.DefinitionVersion 生成管道的版本。 是
Build.QueuedBy 请参阅 如何设置标识变量?。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.QueuedById 请参阅 如何设置标识变量?。 是
Build.Reason 导致了生成运行的事件。
  • Manual:用户已手动将生成排入队列。
  • IndividualCI:持续集成 (CI) 由 Git 推送或 TFVC 签入触发。
  • BatchedCI:持续集成 (CI) 由 Git 推送或 TFVC 签入触发,并且已选择“批处理更改”。
  • Schedule:计划触发器。
  • ValidateShelveset:用户已手动将特定 TFVC 搁置集的生成排入队列。
  • CheckInShelveset:封闭签入触发器。
  • PullRequest:需要生成的 Git 分支策略会触发生成。
  • BuildCompletion:另一个生成 触发生成
  • ResourceTrigger:资源触发器 或 另一个生成 触发生成。
请参阅生成管道触发器、使用分支策略提高代码质量。
是
Build.Repository.Clean 在 源存储库设置中为 清理 选择的值。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.LocalPath 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s。

默认情况下,新的生成管道仅更新已更改的文件。 可以在“存储库”选项卡上修改文件的下载方式。

重要说明:如果仅签出一个 Git 存储库,则此路径是访问代码的确切路径。 如果签出多个存储库,则行为如下(可能与 Build.SourcesDirectory 变量的值不同):
  • 如果自(主)存储库的签出步骤未定义自定义签出路径,或者签出路径是自存储库的多签出默认路径 $(Pipeline.Workspace)/s/<RepoName>,则此变量的值将还原为其默认值,即 $(Pipeline.Workspace)/s。
  • 如果自行(主)存储库的签出步骤定义了自定义签出路径,并且不是其多签出默认路径,则此变量包含自存储库的确切路径。
它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.ID 存储库的唯一标识符。 是
Build.Repository.Name 触发的存储库的名称。 是
Build.Repository.Provider 触发的存储库的类型。
它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Tfvc.Workspace 定义存储库是否是 Team Foundation 版本控制。 生成代理使用的 TFVC 工作区的名称。

例如,如果 Agent.BuildDirectory 为 c:\agent_work\12,Agent.Id 为 8,工作区名称可以是:ws_12_8。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Uri 触发的存储库的 URL。 例如:此变量不能用作内部版本号的一部分,也不能用作版本控制标记。 是
Build.RequestedFor 请参阅如何设置标识变量?。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.RequestedForEmail 请参阅如何设置标识变量?。 是
Build.RequestedForId 请参阅如何设置标识变量?。 是
Build.SourceBranch 生成排队等待的触发存储库的分支。 下面是一些示例:
  • Git 存储库分支:refs/heads/main
  • Git 存储库拉取请求:refs/pull/1/merge
  • TFVC 存储库分支:$/teamproject/main
  • TFVC 存储库封闭签入:Gated_2016-06-06_05.20.51.4369;username@live.com
  • TFVC 存储库搁置集生成:myshelveset;username@live.com
  • 当标记触发管道时:refs/tags/your-tag-name
以生成号格式使用此变量时,正斜杠字符 (/) 将替换为下划线字符 (_)。

注意:在 TFVC 中,如果运行封闭签入生成或手动生成搁置集,则不能以生成号格式使用此变量。
是
Build.SourceBranchName 生成排队等待的触发存储库的分支名称。
  • Git 存储库分支、拉取请求或标记:ref 中的最后一个路径段。例如,在 refs/heads/main中,此值 main。 在 refs/heads/feature/tools中,此值 tools。 在 refs/tags/your-tag-name中,此值 your-tag-name。
  • TFVC 存储库分支:工作区根服务器路径中的最后一个路径段。 例如,在 $/teamproject/main中,此值 main。
  • TFVC 存储库封闭签入或搁置集生成是搁置集的名称。 例如,Gated_2016-06-06_05.20.51.4369;username@live.com 或 myshelveset;username@live.com。
注意:在 TFVC 中,如果运行封闭签入生成或手动生成搁置集,则不能以生成号格式使用此变量。
是
Build.SourcesDirectory 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s。 有关代理目录结构的详细信息,请参阅 代理目录结构。

默认情况下,新的生成管道仅更新已更改的文件。

重要说明:如果仅签出一个 Git 存储库,则此路径是访问代码的确切路径。 如果签出多个存储库,则它将还原为其默认值,即 $(Pipeline.Workspace)/s,即使自(主)存储库签出到不同于其多签出默认路径 $(Pipeline.Workspace)/s/<RepoName> 的自定义路径(在这方面,该变量与 Build.Repository.LocalPath 变量的行为不同)。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.SourceVersion 此版本中包含的触发存储库的最新版本控制更改。
它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
Build.SourceVersionMessage 触发存储库的提交或变更集的注释。 我们将消息截断到第一行或 200 个字符,以较短者为准。

Build.SourceVersionMessage 对应于 Build.SourceVersion 提交上的消息。 PR 生成的 Build.SourceVersion 提交是合并提交(而不是源分支上的提交)。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

此外,此变量仅在步骤级别可用。 它在作业或阶段级别不可用。 也就是说,在作业启动并签出代码之前,不会提取消息。

>注意:启用 生成时,Build.SourceVersionMessage 变量不适用于 Bitbucket 存储库中的经典生成管道。
否
Build.StagingDirectory 代理上的本地路径,在推送到目标之前,任何工件都复制到这里。 例如:c:\agent_work\1\a。 有关代理目录结构的详细信息,请参阅 代理目录结构。

使用此文件夹的典型方法是使用复制文件和发布生成工件任务发布生成工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 可互换。 在每次生成之前,此目录都会被清除,因此无需你自行清理。

请参阅 Azure Pipelines 中的 Artifacts。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Git.SubmoduleCheckout 在“存储库”选项卡上为“签出”子模块选择的值。签出多个存储库后,此值将跟踪触发存储库的设置。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.SourceTfvcShelveset 定义存储库是否是 Team Foundation 版本控制。

如果要运行 封闭生成 或 架集生成,此变量将设置为要生成的 架 集的名称。

注意:此变量产生的值对于生成号格式的生成使用无效。
否
Build.TriggeredBy.BuildId 如果 另一个生成触发器 生成,则此变量将设置为触发生成的 BuildID。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.DefinitionId 如果 另一个生成触发器 生成,则此变量将设置为触发生成的 DefinitionID。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.DefinitionName 如果 另一个生成触发器 生成,则将此变量设置为触发生成管道的名称。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.BuildNumber 如果 另一个生成触发器 生成,则此变量将设置为触发生成的数目。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.ProjectID 如果 另一个生成触发器 生成,则此变量设置为包含触发生成的项目的 ID。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Common.TestResultsDirectory 代理上创建测试结果的本地路径。 例如:c:\agent_work\1\TestResults。 有关代理目录结构的详细信息,请参阅 代理目录结构。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否

管道变量(Azure DevOps Server)

变量 说明
Pipeline.Workspace 特定管道的工作区目录。 此变量的值与 Agent.BuildDirectory 相同。 例如,/home/vsts/work/1。 有关代理目录结构的详细信息,请参阅 代理目录结构。

提示

如果使用经典发布管道,可以使用 经典发布和项目变量 在整个管道中存储和访问数据。

部署作业变量(Azure DevOps Server)

这些变量的范围限定为特定的 部署作业,并且仅在作业执行时解析。

变量 说明
Environment.Name 部署作业中用于运行部署步骤并记录部署历史记录的环境的名称。 例如,smarthotel-dev。
Environment.Id 部署作业中面向的环境的 ID。 例如,10。
Environment.ResourceName 部署作业中面向的环境中用于运行部署步骤并记录部署历史记录的特定资源的名称。 例如,bookings,它是作为资源添加到环境 smarthotel-dev的 Kubernetes 命名空间。
Environment.ResourceId 部署作业中面向的环境中用于运行部署步骤的特定资源的 ID。 例如,4。
Strategy.Name 部署策略的名称:canary、runOnce 或 rolling。
Strategy.CycleName 部署中的当前周期名称。 选项有 PreIteration、Iteration 或 PostIteration。

系统变量(Azure DevOps Server)

在模板中使用未标记为“可用”的模板中的变量时,该变量不会呈现。 变量不会呈现,因为它的值在模板的作用域内无法访问。

变量 说明 是否在模板中可用?
System.AccessToken 使用 OAuth 令牌访问 REST API。

从 YAML 脚本使用 System.AccessToken。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.CollectionId Azure DevOps组织或集合的 GUID。 是
System.CollectionUri Azure DevOps组织或集合的 URI。 例如:https://dev.azure.com/fabrikamfiber/。 是
System.DefaultWorkingDirectory 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s 有关代理目录结构的详细信息,请参阅 代理目录结构。

在自承载代理上,新的生成管道默认仅更新已更改的文件。 可以在“存储库”选项卡上修改文件的下载方式。

此变量是代理范围的。 它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.DefinitionId 生成管道的 ID。 是
System.HostType 如果管道是生成,则设置为 build。 对于发布,值为 deployment(部署组作业)、gates(在入口评估期间)以及 release(其他代理和无代理作业)。 是
System.JobAttempt 首次尝试此作业时设置为 1,并在每次重试作业时递增。 否
System.JobDisplayName 为作业指定的可读名称。 否
System.JobId 单个作业的单次尝试的唯一标识符。 该值对于当前管道是唯一的。 否
System.JobName 作业的名称,通常用于表示依赖项和访问输出变量。 否
System.PhaseAttempt 首次尝试此阶段时设置为 1,并在每次重试作业时递增。

注意:阶段 是一个大部分冗余的概念,它表示作业的设计时(而作业是阶段的运行时版本)。 阶段的概念主要从Azure Pipelines中删除。 矩阵和多配置作业是唯一一个阶段与作业不同的位置。 一个阶段可以实例化多个作业,而这些作业只在其输入方面有所不同。
否
System.PhaseDisplayName 为阶段指定的可读名称。 否
System.PhaseName 作业的基于字符串的标识符,通常用于表示依赖项和访问输出变量。 否
System.PlanId 单个管道运行的基于字符串的标识符。 否
System.PullRequest.IsFork 如果拉取请求来自存储库的分支,则此变量设置为 True。 否则,设置为 False。 是
System.PullRequest.PullRequestId 导致此生成的拉取请求的 ID。 例如:17。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 否
System.PullRequest.PullRequestNumber 导致此生成的拉取请求的编号。 对于具有不同拉取请求 ID 和拉取请求编号GitHub的拉取请求,将填充此变量。 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.PullRequest.targetBranchName 拉取请求的目标分支的名称。 此变量可以在管道中用于基于拉取请求的目标分支有条件地执行任务或步骤。 例如,你可能需要根据更改合并到的分支触发一组不同的测试或代码分析工具。 否
System.PullRequest.SourceBranch 正在拉取请求中查看的分支。 例如:Azure Repos的 refs/heads/users/raisa/new-feature。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.PullRequest.SourceRepositoryUri 包含拉取请求的存储库的 URL。 例如:https://dev.azure.com/ouraccount/_git/OurProject。 否
System.PullRequest.TargetBranch 作为拉取请求目标的分支。 例如:当存储库处于Azure Repos时,refs/heads/main,当存储库处于GitHub时,main。 仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.StageAttempt 首次尝试此阶段时设置为 1,并在每次重试阶段时递增。 否
System.StageDisplayName 为阶段提供的用户可读名称。 否
System.StageName 阶段的基于字符串的标识符,通常用于表示依赖项和访问输出变量。 否
System.TeamFoundationCollectionUri Azure DevOps组织或集合的 URI。 例如:https://dev.azure.com/fabrikamfiber/。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.TeamProject 包含此生成的项目的名称。 是
System.TeamProjectId 此生成所属项目的 ID。 是
System.TimelineId 单个管道运行的执行详细信息和日志的基于字符串的标识符。 否
TF_BUILD 如果生成任务运行脚本,则设置为 True。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否

检查变量(Azure DevOps Server)

变量 说明
Checks.StageAttempt 首次尝试此阶段时设置为 1,并在每次重试阶段时递增。
此变量只能在环境的审批或检查中使用。 例如,可以在$(Checks.StageAttempt)中使用 。
添加阶段尝试作为参数。

代理变量 (Azure DevOps Server 2022)

注意

可以将代理变量用作脚本中的环境变量,并在生成任务中用作参数。 不能使用它们来自定义内部版本号或应用版本控制标签或标记。

变量 说明
Agent.BuildDirectory 代理上的本地路径,用于创建给定生成管道的所有文件夹。 此变量的值与 Pipeline.Workspace 相同。 例如:/home/vsts/work/1。 有关代理目录结构的详细信息,请参阅 代理目录结构。
Agent.ContainerMapping 在运行时从 YAML 中的容器资源名称到其 Docker ID 的映射。 示例如下表所示。
Agent.HomeDirectory 代理安装到并包含代理软件的目录。 例如:c:\agent。 有关代理目录结构的详细信息,请参阅 代理目录结构。
Agent.Id 代理的 ID。
Agent.JobName 正在运行的作业的名称。 名称通常 Job 或 __default,但在多配置方案中,它是配置。
Agent.JobStatus 生成的状态。
  • Canceled
  • Failed
  • Succeeded
  • SucceededWithIssues(部分成功)
  • Skipped(最后一个作业)
应将环境变量引用为 AGENT_JOBSTATUS。 较旧的 agent.jobstatus 可用于向后兼容。
Agent.MachineName 用于安装代理的计算机的名称。
Agent.Name 注册到池的代理的名称。

如果使用的是自承载代理,则此值是指定的名称。 请参阅代理。
Agent.OS 代理主机的操作系统。 有效值是:
  • Windows_NT
  • Darwin
  • Linux
如果是在容器中运行,则代理主机和容器可能运行不同的操作系统。
Agent.OSArchitecture 代理主机的操作系统处理器体系结构。 有效值是:
  • X86
  • X64
  • ARM
Agent.TempDirectory 在每个管道作业后清理的临时文件夹。 此目录由.NET核心 CLI 任务等任务用来在发布之前保存临时项(如测试结果)。

例如:对于 Ubuntu,该目录为 /home/vsts/work/_temp。
Agent.ToolsDirectory 任务(如 Node 工具安装程序和 使用 Python Version 等任务使用的目录,用于在多个版本的工具之间切换。

这些任务会将工具从此目录添加到 PATH,以便后续生成步骤可以使用这些工具。

了解如何在自托管代理上管理此目录。
Agent.WorkFolder 此代理的工作目录。 例如:c:\agent_work。

注意:不保证此目录可由管道任务写入(例如,映射到容器时)。 有关代理目录结构的详细信息,请参阅 代理目录结构。

Agent.ContainerMapping 的示例:

{
  "one_container": {
    "id": "bdbb357d73a0bd3550a1a5b778b62a4c88ed2051c7802a0659f1ff6e76910190"
  },
  "another_container": {
    "id": "82652975109ec494876a8ccbb875459c945982952e0a72ad74c91216707162bb"
  }
}

生成变量(Azure DevOps Server 2022)

在模板中使用未标记为“可用”的模板中的变量时,该变量不会呈现。 变量不会呈现,因为它的值在模板的作用域内无法访问。

变量 说明 是否在模板中可用?
Build.ArtifactStagingDirectory 代理上的本地路径,在推送到目标之前,任何工件都复制到这里。 例如:c:\agent_work\1\a。 有关代理目录结构的详细信息,请参阅 代理目录结构。

使用此文件夹的典型方法是使用复制文件和发布生成工件任务发布生成工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 可互换。 在每次生成之前,此目录都会被清除,因此无需你自行清理。

请参阅 Azure Pipelines 中的 Artifacts。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BuildId 已完成的生成的记录 ID。 否
Build.BuildNumber 已完成的生成的名称,也称为运行编号。 可以指定此值中包含的内容。

此变量的典型用途是使其成为在“存储库”选项卡上指定的标签格式的一部分。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BuildUri 生成的 URI。 例如:vstfs:///Build/Build/1430。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.BinariesDirectory 代理上的本地路径,可以用作已编译二进制文件的输出文件夹。 例如:c:\agent_work\1\b。 有关代理目录结构的详细信息,请参阅 代理目录结构。

默认情况下,不会设置新的生成管道来清理此目录。 可以在“存储库”选项卡上定义生成以进行清理。



它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.ContainerId 工件的容器 ID。 在管道中上传项目时,该项目将添加到特定于该特定项目的容器中。 否
Build.CronSchedule.DisplayName 触发管道运行的 cron 计划的 displayName。 仅当 YAML 计划触发器触发管道运行时,才会设置此变量。 有关详细信息,请参阅 schedules.cron 定义 - Build.CronSchedule.DisplayName 变量。 此变量在 Azure DevOps Server 2022.1 及更高版本中可用。 是
Build.DefinitionName 生成管道的名称。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.DefinitionVersion 生成管道的版本。 是
Build.QueuedBy 请参阅 如何设置标识变量?。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.QueuedById 请参阅 如何设置标识变量?。 是
Build.Reason 导致了生成运行的事件。
  • Manual:用户已手动将生成排入队列。
  • IndividualCI:持续集成 (CI) 由 Git 推送或 TFVC 签入触发。
  • BatchedCI:持续集成 (CI) 由 Git 推送或 TFVC 签入触发,并且已选择“批处理更改”。
  • Schedule:计划触发器。
  • ValidateShelveset:用户已手动将特定 TFVC 搁置集的生成排入队列。
  • CheckInShelveset:封闭签入触发器。
  • PullRequest:需要生成的 Git 分支策略会触发生成。
  • BuildCompletion:另一个生成 触发生成
  • ResourceTrigger:资源触发器 或 另一个生成 触发生成。
请参阅生成管道触发器、使用分支策略提高代码质量。
是
Build.Repository.Clean 在 源存储库设置中为 清理 选择的值。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.LocalPath 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s。

默认情况下,新的生成管道仅更新已更改的文件。 可以在“存储库”选项卡上修改文件的下载方式。

重要说明:如果仅签出一个 Git 存储库,则此路径是访问代码的确切路径。 如果签出多个存储库,则行为如下(可能与 Build.SourcesDirectory 变量的值不同):
  • 如果自(主)存储库的签出步骤未定义自定义签出路径,或者签出路径是自存储库的多签出默认路径 $(Pipeline.Workspace)/s/<RepoName>,则此变量的值将还原为其默认值,即 $(Pipeline.Workspace)/s。
  • 如果自行(主)存储库的签出步骤定义了自定义签出路径,并且不是其多签出默认路径,则此变量包含自存储库的确切路径。
它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.ID 存储库的唯一标识符。 是
Build.Repository.Name 触发的存储库的名称。 是
Build.Repository.Provider 触发的存储库的类型。
它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Tfvc.Workspace 定义存储库是否是 Team Foundation 版本控制。 生成代理使用的 TFVC 工作区的名称。

例如,如果 Agent.BuildDirectory 为 c:\agent_work\12,Agent.Id 为 8,工作区名称可以是:ws_12_8。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Uri 触发的存储库的 URL。 例如:此变量不能用作内部版本号的一部分,也不能用作版本控制标记。 是
Build.RequestedFor 请参阅如何设置标识变量?。

注意:此值可以包含空格或其他无效标签字符。 在这些情况下,标签格式会失败。
是
Build.RequestedForEmail 请参阅如何设置标识变量?。 是
Build.RequestedForId 请参阅如何设置标识变量?。 是
Build.SourceBranch 生成排队等待的触发存储库的分支。 下面是一些示例:
  • Git 存储库分支:refs/heads/main
  • Git 存储库拉取请求:refs/pull/1/merge
  • TFVC 存储库分支:$/teamproject/main
  • TFVC 存储库封闭签入:Gated_2016-06-06_05.20.51.4369;username@live.com
  • TFVC 存储库搁置集生成:myshelveset;username@live.com
  • 当标记触发管道时:refs/tags/your-tag-name
以生成号格式使用此变量时,正斜杠字符 (/) 将替换为下划线字符 (_)。

注意:在 TFVC 中,如果运行封闭签入生成或手动生成搁置集,则不能以生成号格式使用此变量。
是
Build.SourceBranchName 生成排队等待的触发存储库的分支名称。
  • Git 存储库分支、拉取请求或标记:ref 中的最后一个路径段。例如,在 refs/heads/main中,此值 main。 在 refs/heads/feature/tools中,此值 tools。 在 refs/tags/your-tag-name中,此值 your-tag-name。
  • TFVC 存储库分支:工作区根服务器路径中的最后一个路径段。 例如,在 $/teamproject/main中,此值 main。
  • TFVC 存储库封闭签入或搁置集生成是搁置集的名称。 例如,Gated_2016-06-06_05.20.51.4369;username@live.com 或 myshelveset;username@live.com。
注意:在 TFVC 中,如果运行封闭签入生成或手动生成搁置集,则不能以生成号格式使用此变量。
是
Build.SourcesDirectory 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s。 有关代理目录结构的详细信息,请参阅 代理目录结构。

默认情况下,新的生成管道仅更新已更改的文件。

重要说明:如果仅签出一个 Git 存储库,则此路径是访问代码的确切路径。 如果签出多个存储库,则它将还原为其默认值,即 $(Pipeline.Workspace)/s,即使自(主)存储库签出到不同于其多签出默认路径 $(Pipeline.Workspace)/s/<RepoName> 的自定义路径(在这方面,该变量与 Build.Repository.LocalPath 变量的行为不同)。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.SourceVersion 此版本中包含的触发存储库的最新版本控制更改。
它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
Build.SourceVersionMessage 触发存储库的提交或变更集的注释。 我们将消息截断到第一行或 200 个字符,以较短者为准。

Build.SourceVersionMessage 对应于 Build.SourceVersion 提交上的消息。 PR 生成的 Build.SourceVersion 提交是合并提交(而不是源分支上的提交)。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

此外,此变量仅在步骤级别可用。 它在作业或阶段级别不可用。 也就是说,在作业启动并签出代码之前,不会提取消息。

>注意:启用 生成时,Build.SourceVersionMessage 变量不适用于 Bitbucket 存储库中的经典生成管道。
否
Build.StagingDirectory 代理上的本地路径,在推送到目标之前,任何工件都复制到这里。 例如:c:\agent_work\1\a。 有关代理目录结构的详细信息,请参阅 代理目录结构。

使用此文件夹的典型方法是使用复制文件和发布生成工件任务发布生成工件。

注意:Build.ArtifactStagingDirectory 和 Build.StagingDirectory 可互换。 在每次生成之前,此目录都会被清除,因此无需你自行清理。

请参阅 Azure Pipelines 中的 Artifacts。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.Repository.Git.SubmoduleCheckout 在“存储库”选项卡上为“签出”子模块选择的值。签出多个存储库后,此值将跟踪触发存储库的设置。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否
Build.SourceTfvcShelveset 定义存储库是否是 Team Foundation 版本控制。

如果要运行 封闭生成 或 架集生成,此变量将设置为要生成的 架 集的名称。

注意:此变量产生的值对于生成号格式的生成使用无效。
否
Build.TriggeredBy.BuildId 如果 另一个生成触发器 生成,则此变量将设置为触发生成的 BuildID。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.DefinitionId 如果 另一个生成触发器 生成,则此变量将设置为触发生成的 DefinitionID。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.DefinitionName 如果 另一个生成触发器 生成,则将此变量设置为触发生成管道的名称。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.BuildNumber 如果 另一个生成触发器 生成,则此变量将设置为触发生成的数目。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Build.TriggeredBy.ProjectID 如果 另一个生成触发器 生成,则此变量设置为包含触发生成的项目的 ID。 在经典管道中,生成完成触发器触发此变量。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。

如果使用 resources 触发 YAML 管道,则应改用资源变量。
否
Common.TestResultsDirectory 代理上创建测试结果的本地路径。 例如:c:\agent_work\1\TestResults。 有关代理目录结构的详细信息,请参阅 代理目录结构。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否

管道变量(Azure DevOps Server 2022)

变量 说明
Pipeline.Workspace 特定管道的工作区目录。 此变量的值与 Agent.BuildDirectory 相同。 例如,/home/vsts/work/1。 有关代理目录结构的详细信息,请参阅 代理目录结构。

提示

如果使用经典发布管道,可以使用 经典发布和项目变量 在整个管道中存储和访问数据。

部署作业变量(Azure DevOps Server 2022)

这些变量的范围限定为特定的 部署作业,并且仅在作业执行时解析。

变量 说明
Environment.Name 部署作业中用于运行部署步骤并记录部署历史记录的环境的名称。 例如,smarthotel-dev。
Environment.Id 部署作业中面向的环境的 ID。 例如,10。
Environment.ResourceName 部署作业中面向的环境中用于运行部署步骤并记录部署历史记录的特定资源的名称。 例如,bookings,它是作为资源添加到环境 smarthotel-dev的 Kubernetes 命名空间。
Environment.ResourceId 部署作业中面向的环境中用于运行部署步骤的特定资源的 ID。 例如,4。
Strategy.Name 部署策略的名称:canary、runOnce 或 rolling。
Strategy.CycleName 部署中的当前周期名称。 选项有 PreIteration、Iteration 或 PostIteration。

系统变量(Azure DevOps Server 2022)

在模板中使用未标记为“可用”的模板中的变量时,该变量不会呈现。 变量不会呈现,因为它的值在模板的作用域内无法访问。

变量 说明 是否在模板中可用?
System.AccessToken 使用 OAuth 令牌访问 REST API。

从 YAML 脚本使用 System.AccessToken。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.CollectionId Azure DevOps组织或集合的 GUID。 是
System.CollectionUri Azure DevOps组织或集合的 URI。 例如:https://dev.azure.com/fabrikamfiber/。 是
System.DefaultWorkingDirectory 下载源代码文件的代理上的本地路径。 例如:c:\agent_work\1\s 有关代理目录结构的详细信息,请参阅 代理目录结构。

在自承载代理上,新的生成管道默认仅更新已更改的文件。 可以在“存储库”选项卡上修改文件的下载方式。

此变量是代理范围的。 它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.DefinitionId 生成管道的 ID。 是
System.HostType 如果管道是生成,则设置为 build。 对于发布,值为 deployment(部署组作业)、gates(在入口评估期间)以及 release(其他代理和无代理作业)。 是
System.JobAttempt 首次尝试此作业时设置为 1,并在每次重试作业时递增。 否
System.JobDisplayName 为作业指定的可读名称。 否
System.JobId 单个作业的单次尝试的唯一标识符。 该值对于当前管道是唯一的。 否
System.JobName 作业的名称,通常用于表示依赖项和访问输出变量。 否
System.PhaseAttempt 首次尝试此阶段时设置为 1,并在每次重试作业时递增。

注意:阶段 是一个大部分冗余的概念,它表示作业的设计时(而作业是阶段的运行时版本)。 阶段的概念主要从Azure Pipelines中删除。 矩阵和多配置作业是唯一一个阶段与作业不同的位置。 一个阶段可以实例化多个作业,而这些作业只在其输入方面有所不同。
否
System.PhaseDisplayName 为阶段指定的可读名称。 否
System.PhaseName 作业的基于字符串的标识符,通常用于表示依赖项和访问输出变量。 否
System.PlanId 单个管道运行的基于字符串的标识符。 否
System.PullRequest.IsFork 如果拉取请求来自存储库的分支,则此变量设置为 True。 否则,设置为 False。 是
System.PullRequest.PullRequestId 导致此生成的拉取请求的 ID。 例如:17。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 否
System.PullRequest.PullRequestNumber 导致此生成的拉取请求的编号。 对于具有不同拉取请求 ID 和拉取请求编号GitHub的拉取请求,将填充此变量。 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.PullRequest.targetBranchName 拉取请求的目标分支的名称。 此变量可以在管道中用于基于拉取请求的目标分支有条件地执行任务或步骤。 例如,你可能需要根据更改合并到的分支触发一组不同的测试或代码分析工具。 否
System.PullRequest.SourceBranch 正在拉取请求中查看的分支。 例如:Azure Repos的 refs/heads/users/raisa/new-feature。 (仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。) 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.PullRequest.SourceRepositoryUri 包含拉取请求的存储库的 URL。 例如:https://dev.azure.com/ouraccount/_git/OurProject。 否
System.PullRequest.TargetBranch 作为拉取请求目标的分支。 例如:当存储库处于Azure Repos时,refs/heads/main,当存储库处于GitHub时,main。 仅当由于受分支策略影响的 Git 拉取请求而运行生成时,才会初始化此变量。 仅当分支策略影响 PR 时,此变量才可在 YAML 管道中使用。 否
System.StageAttempt 首次尝试此阶段时设置为 1,并在每次重试阶段时递增。 否
System.StageDisplayName 为阶段提供的用户可读名称。 否
System.StageName 阶段的基于字符串的标识符,通常用于表示依赖项和访问输出变量。 否
System.TeamFoundationCollectionUri Azure DevOps组织或集合的 URI。 例如:https://dev.azure.com/fabrikamfiber/。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
是
System.TeamProject 包含此生成的项目的名称。 是
System.TeamProjectId 此生成所属项目的 ID。 是
System.TimelineId 单个管道运行的执行详细信息和日志的基于字符串的标识符。 否
TF_BUILD 如果生成任务运行脚本,则设置为 True。

它可以用作脚本中的环境变量和生成任务中的参数。 它不能用作内部版本号的一部分,也不能用作版本控制标记。
否

检查变量(Azure DevOps Server 2022)

变量 说明
Checks.StageAttempt 首次尝试此阶段时设置为 1,并在每次重试阶段时递增。
此变量只能在环境的审批或检查中使用。 例如,可以在$(Checks.StageAttempt)中使用 。
添加阶段尝试作为参数。

如何设置标识变量?

该值取决于生成的原因,特定于Azure Repos存储库。

如果生成通过以下方式触发... Build.QueuedBy 和 Build.QueuedById 值基于... Build.RequestedFor 和 Build.RequestedForId 值基于...
在 Git 中,由持续集成 (CI) 触发器触发 系统标识,例如:[DefaultCollection]\Project Collection Service Accounts 推送或签入更改的人员。
在 Git 中或由分支策略生成触发。 系统标识,例如:[DefaultCollection]\Project Collection Service Accounts 签入更改的人员。
在 TFVC 中,由封闭签入触发器触发 签入更改的人员。 签入更改的人员。
在 Git 或 TFVC 中由计划触发器触发 系统标识,例如:[DefaultCollection]\Project Collection Service Accounts 系统标识,例如:[DefaultCollection]\Project Collection Service Accounts
由于单击了“队列生成”按钮而触发 你 你

Ask Copilot基于变量值生成具有条件的阶段

使用 Copilot 生成由变量值确定的条件的阶段。

此示例提示定义 Agent.JobStatus 指示上一阶段成功运行时运行的阶段:

创建仅在 Agent.JobStatus 为 Succeeded 或 SucceededWithIssues 时运行的新Azure DevOps阶段。

可以自定义提示以使用满足要求的值。 例如,可以请求帮助创建仅当管道失败时运行的阶段。

注意

GitHub Copilot由 AI 提供支持,因此可能会带来惊喜和错误。 请确保验证任何生成的代码或建议。 有关一般使用GitHub Copilot、产品影响、人工监督和隐私的详细信息,请参阅 GitHub Copilot 常见问题解答。