Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022
在经典发布管道中使用变量是在整个管道中交换和传输数据的一种便捷方式。 每个变量都存储为字符串,其值可以在管道运行之间更改。
与仅在模板分析时可用的 运行时参数不同,经典发布管道中的变量可在整个部署过程中访问。
设置任务以在经典发布管道的每个阶段部署应用程序时,变量可帮助你:
简化自定义:定义一次通用部署管道,并轻松地针对不同的阶段对其进行调整。 例如,使用变量来表示 Web 部署的连接字符串,并根据需要为每个阶段调整其值。 这些变量称为 自定义变量。
利用上下文信息:访问有关发布上下文的详细信息,例如阶段、项目或运行部署的代理。 例如,脚本可能需要生成位置进行下载,或者需要代理的工作目录来创建临时文件。 这些变量称为 默认变量。
默认变量
默认变量为正在运行的任务和脚本提供有关执行上下文的基本信息。 这些变量允许你访问有关运行 它们的系统、 发布、 阶段或 代理 的详细信息。
除了 System.Debug 之外,默认变量是只读的,系统会自动设置其值。
下表描述了一些最重要的变量。 若要查看完整列表,请参阅查看所有变量的当前值。
系统变量
| 变量名称 | 说明 |
|---|---|
| System.TeamFoundationServerUri | Azure Pipelines 中服务连接的 URL。 在脚本或任务中使用此变量来调用 Azure Pipelines REST API。 示例: https://fabrikam.vsrm.visualstudio.com/ |
| System.TeamFoundationCollectionUri | Team Foundation 集合或 Azure Pipelines 的 URL。 在脚本或任务中使用此变量,在生成和版本控制等其他服务上调用 REST API。 示例: https://dev.azure.com/fabrikam/ |
| System.CollectionId | 此生成或发布所属的集合的 ID。 示例: 6c6f3423-1c84-4625-995a-f7f143a1e43d |
| System.DefinitionId | 当前发布所属的发布管道的 ID。 示例: 1 |
| System.TeamProject | 此生成或发布所属的项目的名称。 示例: Fabrikam |
| System.TeamProjectId | 此生成或发布所属的项目的 ID。 示例: 79f5c12e-3337-4151-be41-a268d2c73344 |
| System.ArtifactsDirectory | 管道在发布版本部署期间下载工件的目录。 如果管道需要将项目下载到代理,则会在每次部署之前清除目录。 与 Agent.ReleaseDirectory 和 System.DefaultWorkingDirectory 相同。示例: C:\agent\_work\r1\a |
| System.DefaultWorkingDirectory | 管道在一次版本发布的部署期间下载工件到的目录。 如果管道需要将项目下载到代理,则会在每次部署之前清除目录。 与 Agent.ReleaseDirectory 和 System.ArtifactsDirectory 相同。示例: C:\agent\_work\r1\a |
| System.WorkFolder | 该代理的工作目录,其中管道会为每个构建或发布创建子文件夹。 与 Agent.RootDirectory 和 Agent.WorkFolder 相同。示例: C:\agent\_work |
| System.Debug | 这是用户可以 设置的唯一系统变量。 将此变量设置为true在调试模式下运行发布,以帮助查找故障。示例: true |
发布变量
| 变量名称 | 说明 |
|---|---|
| Release.AttemptNumber | 此发布在此阶段中部署的次数。 示例: 1 |
| Release.DefinitionEnvironmentId | 相应发布管道中阶段的 ID。 示例: 1 |
| Release.DefinitionId | 当前发布所属的发布管道的 ID。 示例: 1 |
| Release.DefinitionName | 当前发布所属的发布管道的名称。 示例: fabrikam-cd |
| Release.Deployment.RequestedFor | 触发(启动)当前正在进行的部署的标识的显示名称。 示例: Mateo Escobedo |
| Release.Deployment.RequestedForEmail | 触发(启动)当前正在进行的部署的标识的电子邮件地址。 示例: mateo@fabrikam.com |
| Release.Deployment.RequestedForId | 触发(启动)当前正在进行的部署的标识的 ID。 示例: 2f435d07-769f-4e46-849d-10d1ab9ba6ab |
| Release.DeploymentID | 部署的 ID。 每个作业唯一。 示例: 254 |
| Release.DeployPhaseID | 运行部署的阶段的 ID。 示例: 127 |
| Release.EnvironmentId | 当前正在进行部署的发布中的阶段实例的 ID。 示例: 276 |
| Release.EnvironmentName | 当前正在进行部署的阶段的名称。 示例: Dev |
| Release.EnvironmentUri | 当前正在进行部署的发布中的阶段实例的 URI。 示例: vstfs://ReleaseManagement/Environment/276 |
| Release.Environments.{stage-name}.status | 阶段的部署状态。 示例: InProgress |
| Release.PrimaryArtifactSourceAlias | 主项目源的别名。 示例: fabrikam\_web |
| Release.Reason | 部署的原因。 支持的值是:ContinuousIntegration - 生成完成后,发布在持续部署中启动。Manual - 发布已手动启动。None - 未指定部署原因。Schedule - 发布从计划开始。 |
| Release.ReleaseDescription | 发布时提供的文本说明。 示例: Critical security patch |
| Release.ReleaseId | 当前发布记录的标识符。 示例: 118 |
| Release.ReleaseName | 当前发布的名称。 示例: Release-47 |
| Release.ReleaseUri | 当前发布的 URI。 示例: vstfs://ReleaseManagement/Release/118 |
| Release.ReleaseWebURL | 此发布的 URL。 示例: https://dev.azure.com/fabrikam/f3325c6c/_release?releaseId=392&_a=release-summary |
| Release.RequestedFor | 触发发布的标识的显示名称。 示例: Mateo Escobedo |
| Release.RequestedForEmail | 触发发布的标识的电子邮件地址。 示例: mateo@fabrikam.com |
| Release.RequestedForId | 触发发布的标识的 ID。 示例: 2f435d07-769f-4e46-849d-10d1ab9ba6ab |
| Release.SkipArtifactsDownload | 指定是否跳过将项目下载到代理的布尔值。 示例: FALSE |
| Release.TriggeringArtifact.Alias | 触发发布的项目的别名。 当计划或手动触发发布时,此值为空。 示例: fabrikam\_app |
发布阶段变量
| 变量名称 | 说明 |
|---|---|
| Release.Environments。{阶段名称}。地位 | 指定阶段内此发布的部署状态。 示例: NotStarted |
代理变量
| 变量名称 | 说明 |
|---|---|
| Agent.Name | 注册到代理池的代理的名称。 此名称可能不同于计算机名称。 示例: fabrikam-agent |
| Agent.MachineName | 配置代理的计算机的名称。 示例: fabrikam-agent |
| Agent.Version | 代理软件的版本。 示例: 2.109.1 |
| Agent.JobName | 运行作业的名称,例如“发布”或“生成”。 示例: Release |
| Agent.HomeDirectory | 安装代理的文件夹。 此文件夹包含代理的代码和资源。 示例: C:\agent |
| Agent.ReleaseDirectory | 发布下载工件的目录。 如果目录需要将项目下载到代理,则会在每次部署之前清除该目录。 它与 System.ArtifactsDirectory 和 System.DefaultWorkingDirectory 是相同的。示例: C:\agent\_work\r1\a |
| Agent.RootDirectory | 此代理的工作目录,在其中为每个生成或发布创建子文件夹。 它与 Agent.WorkFolder 和 System.WorkFolder 是一样的。示例: C:\agent\_work |
| Agent.WorkFolder | 此代理的工作目录,在其中为每个生成或发布创建子文件夹。 它与 Agent.RootDirectory 和 System.WorkFolder 相同。示例: C:\agent\_work |
| Agent.DeploymentGroupId | 代理注册的部署组的 ID。 此 ID 仅在部署组作业中可用。 示例: 1 |
发布产物变量
对于在发布中引用的每个项目,请使用以下项目变量。 请注意,并非所有变量都适用于每种项目类型。 下表列出了默认项目变量,并提供了基于项目类型的值的示例。 如果示例为空,则表示该变量不适用于该项目类型。
将 {alias} 占位符替换为为 项目源别名 指定的值或为发布管道生成的默认值。
| 变量名称 | 说明 |
|---|---|
| Release.Artifacts.{alias}.DefinitionId | 生成管道或存储库的标识符。示例: Azure Pipelines: 1GitHub: fabrikam/asp |
| Release.Artifacts.{alias}.DefinitionName | 生成管道或存储库的名称。示例: Azure Pipelines: fabrikam-ciTFVC: $/fabrikamGit: fabrikamGitHub: fabrikam/asp (main) |
| Release.Artifacts.{alias}.BuildNumber | 生成号或提交标识符。示例: Azure Pipelines: 20170112.1Jenkins: 20170112.1TFVC: Changeset 3Git: 38629c964GitHub: 38629c964 |
| Release.Artifacts.{alias}.BuildId | 生成标识符。示例: Azure Pipelines: 130Jenkins: 130GitHub: 38629c964d21fe405ef830b7d0220966b82c9e11 |
| Release.Artifacts.{alias}.BuildURI | 生成的 URL。示例: Azure Pipelines: vstfs://build-release/Build/130GitHub: https://github.com/fabrikam/asp |
| Release.Artifacts.{alias}.SourceBranch | 从中生成源的分支的完整路径和名称。示例: Azure Pipelines: refs/heads/main |
| Release.Artifacts.{alias}.SourceBranchName | 从中生成源的分支的唯一名称。示例: Azure Pipelines: main |
| Release.Artifacts.{alias}.SourceVersion | 生成的提交。示例: Azure Pipelines: bc0044458ba1d9298cdc649cb5dcf013180706f7 |
| Release.Artifacts.{alias}.Repository.Provider | 从中生成源的存储库的类型。示例: Azure Pipelines: Git |
| Release.Artifacts.{alias}.RequestedForID | 触发生成的帐户的标识符。示例: Azure Pipelines: 2f435d07-769f-4e46-849d-10d1ab9ba6ab |
| Release.Artifacts.{alias}.RequestedFor | 请求生成的帐户的名称。示例: Azure Pipelines: Mateo Escobedo |
| Release.Artifacts.{alias}.Type | 构件来源的类型,例如构建。 示例: Azure Pipelines: BuildJenkins: JenkinsAzure DevOps Services: TFVCGit: GitGitHub: GitHub |
| Release.Artifacts.{alias}.PullRequest.TargetBranch | 作为拉取请求目标的分支的完整路径和名称。 仅当发布由拉取请求流触发时,才会初始化此变量。示例: Azure Pipelines: refs/heads/main |
| Release.Artifacts.{alias}.PullRequest.TargetBranchName | 作为拉取请求目标的分支的唯一名称。 仅当发布由拉取请求流触发时,才会初始化此变量。示例: Azure Pipelines: main |
主工件变量
在经典发布管道中,如果使用多个项目,则可以将一个项目指定为主要项目。 然后,Azure Pipelines 为指定的主项目填充以下变量。
| 变量名称 | 与以下项相同 |
|---|---|
| Build.DefinitionId | Release.Artifacts。{主要项目别名}。DefinitionId |
| Build.DefinitionName | Release.Artifacts。{主要项目别名}。DefinitionName |
| Build.BuildNumber | Release.Artifacts。{主要项目别名}。BuildNumber |
| Build.BuildId | Release.Artifacts。{主要项目别名}。BuildId |
| Build.BuildURI | Release.Artifacts。{主要项目别名}。BuildURI |
| Build.SourceBranch | Release.Artifacts。{主要项目别名}。SourceBranch |
| Build.SourceBranchName | Release.Artifacts。{主要项目别名}。SourceBranchName |
| Build.SourceVersion | Release.Artifacts。{主要项目别名}。SourceVersion |
| Build.Repository.Provider | Release.Artifacts。{主要项目别名}。Repository.Provider |
| Build.RequestedForID | Release.Artifacts。{主要项目别名}。RequestedForID |
| Build.RequestedFor | Release.Artifacts。{主要项目别名}。RequestedFor |
| Build.Type | Release.Artifacts。{主要项目别名}。类型 |
| Build.PullRequest.TargetBranch | Release.Artifacts。{主要项目别名}。PullRequest.TargetBranch |
| Build.PullRequest.TargetBranchName | Release.Artifacts。{主要项目别名}。PullRequest.TargetBranchName |
使用默认变量
可以通过两种方式使用默认变量作为发布管道或脚本中任务的参数。
直接使用默认变量作为任务的输入。 例如,若要将 Release.Artifacts.{Artifact alias}.DefinitionName 作为参数传递给别名为 ASPNET4.CI 的工件的 PowerShell 任务,请使用 $(Release.Artifacts.ASPNET4.CI.DefinitionName)。
若要在脚本中使用默认变量,请将 . 默认变量名称替换为 _。 例如,若要在 PowerShell 脚本中输出 Release.Artifacts.{Artifact alias}.DefinitionName 作为其别名的项目的 的值,请使用$env:RELEASE_ARTIFACTS_ASPNET4_CI_DEFINITIONNAME。 原始别名 ASPNET4.CI 替换为 ASPNET4_CI。
自定义变量
可以在不同的范围内定义自定义变量。
变量组:使用变量组在项目中的所有定义之间共享值。 如果要在整个项目中的定义、阶段和任务中使用相同的值,并从单个位置管理它们,此方法非常有用。 在管道>库中定义和管理变量组。
发布管道变量:使用发布管道变量跨发布管道中的所有阶段共享值。 这种方法非常适合需要在各个阶段和任务中保持一致值的场景,而且可以在单一位置进行更新。 在发布管道的变量选项卡中定义和管理这些变量。 在“管道变量”页中,添加变量时,将范围下拉列表设置为发布。
阶段变量:使用阶段变量在发布管道的特定阶段共享值。 该方法适用于在每个阶段有所不同但在每个阶段中所有任务保持一致的值。 在发布管道的变量选项卡中定义和管理这些变量。 在“管道变量”页中,添加变量时,将范围下拉列表设置为适当的环境。
通过在项目、发布管道和阶段级别使用自定义变量,可以:
避免重复值,从而更容易通过一次更改更新所有引用。
通过防止用户查看或修改敏感值来保护它们。 若要将变量标记为安全(机密),请选择
变量旁边的图标。重要
隐藏变量(机密)的值安全地存储在服务器上,用户无法在保存后查看它们。 在部署期间,Azure Pipelines 会在任务引用这些值时解密这些值,并通过安全的 HTTPS 通道将其传递给代理。
注意
创建自定义变量可以覆盖标准变量。 例如,如果在 Windows 代理上定义自定义 Path 变量,它将覆盖 $env:Path 变量,并可能阻止 PowerShell 正常运行。
使用自定义变量
若要在任务中使用自定义变量,可将变量名称括在括号中,然后在前面加上 $ 字符。 例如,如果你有一个名为 adminUserName 的变量,则将其当前值作为任务 $(adminUserName)插入。
注意
链接到同一范围内的管道的不同组的变量(例如作业或阶段)可能会冲突并导致不可预知的结果。 若要避免此问题,请确保所有变量组中的变量都具有唯一的名称。
在脚本中定义和修改变量
若要定义或修改脚本中的变量,请使用 task.setvariable 日志记录命令。 更新的变量值的范围限定为正在执行的作业,并且不会跨作业或阶段持续存在。 请注意,变量名称将转换为大写,并将“.”和" "替换为“_”。
例如,Agent.WorkFolder 将变为 AGENT_WORKFOLDER。
- 在 Windows 上,以
%AGENT_WORKFOLDER%或$env:AGENT_WORKFOLDER的方式访问此变量。 - 在 Linux 和 macOS 上,使用
$AGENT_WORKFOLDER。
批处理脚本
设置 sauce 和 secret.Sauce 变量
@echo ##vso[task.setvariable variable=sauce]crushed tomatoes
@echo ##vso[task.setvariable variable=secret.Sauce;issecret=true]crushed tomatoes with garlic
读取变量
参数
"$(sauce)" "$(secret.Sauce)"
脚本
@echo off
set sauceArgument=%~1
set secretSauceArgument=%~2
@echo No problem reading %sauceArgument% or %SAUCE%
@echo But I cannot read %SECRET_SAUCE%
@echo But I can read %secretSauceArgument% (but the log is redacted so I do not spoil the secret)
从中读取变量的控制台输出:
No problem reading crushed tomatoes or crushed tomatoes
But I cannot read
But I can read ******** (but the log is redacted so I do not spoil the secret)
查看所有变量的当前值
选择“管道”>“发布”,然后选择发布管道。
打开发布的摘要视图,然后选择感兴趣的阶段。 在步骤列表中,选择“初始化作业”。
此步骤将打开日志。 向下滚动以查看代理用于此作业的值。
在调试模式下运行发布
在调试模式下运行发布有助于诊断和解决问题,方法是在发布执行期间显示额外信息。 可以打开整个版本的调试模式,也可以仅针对特定发布阶段中的任务启用调试模式。
若要为整个版本启用调试模式,请将名为值
System.Debug的true变量添加到发布管道的“变量”选项卡中。若要打开特定阶段的调试模式,请从阶段的快捷菜单中打开“配置阶段”对话框,并将名为“
System.Debug变量”的变量true添加到“变量”选项卡。或者,创建一个变量组,其中包含名为
System.Debug且值为true的变量,并将此变量组链接到发布管道。
提示
如果遇到与 Azure 资源管理器服务连接相关的错误,请参阅 “如何:排查 Azure 资源管理器服务连接 问题”以获取更多详细信息。
设置
设置