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
。请注意,句点将替换为下划线。
机密除外。定义为机密的任何内容都必须显式传递到使用脚本,因为它们不会作为环境变量填充。