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

时间:2019-04-11 13:49:10

标签: powershell azure-devops

我们正在使用Slack通知我们的开发团队有关生产代码的发布。我们发现做到这一点的最大方法就是通过POST到我们的Slack应用程序。在请求的主体中,我传递了如下所示的4个值,这些值被设置为任务组的参数。

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

  • 应用程序名称$(Release.DefinitionName)
  • 环境$(环境)
  • 团队$(System.TeamProject)

Task Group Setup

我将两个PowerShell脚本任务都设置为内联运行。它没有传递参数的选项。现在,我只是将值写入控制台以查看发生了什么。

  • 写输出“ env $ env:environment”
  • 写输出“ releaseurl $ env:releaseurl”
  • 写输出“ team $ env:team”
  • 写输出“应用程序$ env:applicationname”

PowerShell Task

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

  • echo env $(environment)
  • 回显releaseurl $(Release.ReleaseWebURL)
  • 回声团队$(团队)
  • 回显应用程序$(应用程序名称)

Bash Task

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

  • 2019-04-11T13:23:58.6833137Z环保生产
  • 2019-04-11T13:23:58.6987109Z releaseurl
  • 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团队App Services
  • 2019-04-11T13:24:17.3405018Z应用程序发布通知试用版
  • 2019-04-11T13:24:17.3838219Z releaseurl https://thereleaseurl

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

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

同样,bash脚本运行良好。 Powershell脚本似乎并不喜欢这样。有谁知道为什么?乐意尝试任何事情。

1 个答案:

答案 0 :(得分:0)

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

因此,$env:variable未被捕获为任务组的变量用法,而$(variable)被捕获为任务组的可变用法。

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

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

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

enter image description here