【问题标题】:Azure DevOps predefined variablesAzure DevOps 预定义变量
【发布时间】:2020-07-19 15:54:41
【问题描述】:

我需要在发布管道中使用预定义的 Azure DevOps 变量。 我正在处理几个工件,我需要从每个工件中获取项目名称。

因此,在 Inline PowerShell 步骤中,我尝试使用

RELEASE_ARTIFACTS_{ARTEFACTNAME}_PROJECTNAME

但是插值不能按预期工作.. 我尝试了以下但没有成功:

$ProjectName = $("RELEASE.ARTIFACTS.$($var.name).PROJECTNAME")

不幸的是,结果总是

“RELEASE.ARTIFACTS.varname.PROJECTNAME”而不是 ADO 项目名称

【问题讨论】:

  • IIRC,这些变量被引用$(var.name)。这不是子表达式。
  • 让我更详细一点:$($var.name) = "REPOS1" $(RELEASE.ARTIFACTS.REPOS1.PROJECTNAME) = PROJECT1 但是,当我尝试通过执行$("RELEASE.ARTIFACTS.$($var.name).PROJECTNAME") 从脚本中获取值“PROJECT1”时,我得到的结果等于“RELEASE.ARTIFACTS.varname .PROJECTNAME”而不是“PROJECT1”

标签: powershell variables syntax azure-devops


【解决方案1】:

您可能必须在表达式中硬编码工件别名。

#REPOS1 is the artifacts alias defined in release pipeline Artifacts-->Source alias

$ProjectName = $(Release.Artifacts.REPOS1.ProjectName) 

您不能在 azure 管道中像 $(a.$(b).c) 这样将另一个 $() 包裹在 $() 中。 Azure 管道无法解析此类表达式 $($())。

以下表达式无效:

$alias = "Artifacts1"
$ProjectName = $(Release.Artifacts.$($alias).ProjectName)

$ProjectName = $(Release.Artifacts.$(arifactName).ProjectName)

【讨论】:

  • 我的问题是我有几个工件,这就是为什么我必须在 PowerShell 中构建它。
  • 工件是如何添加到您的发布管道中的。它们是单独添加还是在一个工件中添加。添加工件时,您可以在 Source alias 字段中定义其别名,您可以使用它来识别它们。可以分享截图吗?
  • 是不是必须通过powershell任务中的某种条件来决定别名?
  • @gerem 即使您有多个工件,如果您不动态添加它们,那么它们的数量也是固定的。我知道这不是最好的方法,但从我们在这里看到的情况来看,这是我们可以拥有的最好的方法。我也试图找到更好的方法,但它必须像 Levi Ls-MSFT 所说的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
相关资源
最近更新 更多