PowerShell任务不会使用VSTS任务组变量但是 - 为什么?

问题描述 投票:1回答:1

我们正在使用Slack通知我们的开发团队有关生产代码的发布。我们发现这样做的方式允许我们最灵活的是通过POST到我们的Slack应用程序。在请求的正文中,我传递了4个值,如下所示,它们被设置为任务组的参数。

在任务组中,我使用默认值设置了3个参数,它们是:名称值

  • applicationname $(Release.DefinitionName)
  • 环境$(环境)
  • team $(System.TeamProject)

Task Group Setup

我设置了一个PowerShell脚本任务来内联运行。它没有传递参数的选项。现在我只是将值写入控制台以查看正在发生的事情。

  • 写输出“env $ env:environment”
  • 写输出“releaseurl $ env:releaseurl”
  • 写输出“团队$ env:团队”
  • 写输出“application $ env:applicationname”

PowerShell Task

使用我的Bash脚本,我使用echo做同样的事情,它看起来像这样:

  • echo env $(环境)
  • echo releaseurl $(Release.ReleaseWebURL)
  • echo团队$(团队)
  • echo应用程序$(applicationname)

Bash Task

当我运行这些脚本时,PowerShell将只打印环境值(在发布工作流中定义)。它甚至无法使用默认的版本变量。

  • 2019-04-11T13:23:58.6833137Z env制作
  • 2019-04-11T13:23:58.6987109Z释放
  • 2019-04-11T13:23:58.6997009Z团队
  • 2019-04-11T13:23:58.6999878Z申请

但是,Bash按预期执行。

  • 2019-04-11T13:24:17.3299022Z环境生产
  • 2019-04-11T13:24:17.3404876Z团队应用服务
  • 2019-04-11T13:24:17.3405018Z应用发布通知试点
  • 2019-04-11T13:24:17.3838219Z releaseurl https://thereleaseurl

Bash使用System / Release变量没有问题。 PowerShell将仅使用它在VSTS版本变量中明确定义的变量。我希望它使用任务组参数的值,这将允许团队使用默认值或自定义值。

因此,PowerShell脚本将使用applicationname变量,该变量默认为$(Release.DefinitionName)。在发布工作流程中,团队可以保留原样,或者如果定义名称对于警报中报告的名称不够清晰或不合适,则使用自定义值。我可以使用它的唯一方法是在发布变量中定义applicationname,并将其默认值设置为$(Release.DefinitionName)。

再一次,bash脚本运行得很好。 powershell脚本似乎不喜欢这样。有谁知道为什么?很乐意尝试任何事情。

powershell azure-devops
1个回答
0
投票

$env:variable语法使powershell在运行时从环境变量中检索值。 $(variable)语法在将脚本交给PowerShell之前执行变量内联。

因此,$env:variable不会被捕获为任务组的变量用法,而$(variable)则是。

当变量包含引号或需要转义的其他特殊字符时,执行前内联可能会导致问题。

理想情况下,您将变量作为参数传递给脚本调用,而不是脚本块中的内联值。

运行脚本块时,您可以在“环境变量”部分中显式注册要提供的变量:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.