TFS/Azure DevOps 使用的 Powershell 子表达式语法



TFS/Azure DevOps 允许使用以下语法引用自定义变量和内置生成/发布变量:

$(variable_name)

例如,如果我想获取构建定义名称,我会从以下子表达式中获取值:

$(Build.DefinitionName)

但是,据我所知,上面的语法不是有效的 powershell 子表达式

如果"Build.DefinitionName"是一个变量,它需要看起来像:

$($Build.DefinitionName)

如果它是一个集合/哈希表,它将使用大括号:

${Build.DefinitionName}

如果它是一个具有静态属性的对象,它将是:

${Build::DefinitionName}

那么上面例子中的"构建"到底是什么?TFS/VSTS/Azure DevOps 是否在这里进行了一些魔术字符串替换或其他什么?

它不是Powershell语言元素,而是一个简单的TFS/VSTS占位符语法,就像SQLCMD使用的那样: https://learn.microsoft.com/en-us/sql/relational-databases/scripting/sqlcmd-use-with-scripting-variables?view=sql-server-2017

TFS/VSTS 在调用 Powershell 任务之前插入这些占位符的值。

构建/发布变量以环境变量的形式提供给在构建/发布范围内运行的进程。

例如,生成定义名称的可用方式与访问 PowerShell 中的任何其他环境变量的方式相同:$env:BUILD_DEFINITIONNAME。请注意,句点将替换为下划线。

机密除外。定义为机密的任何内容都必须显式传递到使用脚本,因为它们不会作为环境变量填充。

最新更新