【问题标题】:PowerShell task won't use VSTS Task Group variables but does - why?PowerShell 任务不会使用 VSTS 任务组变量,但会使用 - 为什么?
【发布时间】:2019-09-02 04:24:27
【问题描述】:

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

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

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

Task Group Setup

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

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

PowerShell Task

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

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

Bash Task

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

  • 2019-04-11T13:23:58.6833137Z 环境生产
  • 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 脚本将使用默认为 $(Release.DefinitionName) 的 applicationname 变量。在发布工作流中,团队可以保持原样,或者如果定义名称不够清晰或不适合警报中报告的名称,则可以使用自定义值。我可以让它工作的唯一方法是在发布变量中定义应用程序名称,并将其默认设置为 $(Release.DefinitionName)。

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

【问题讨论】:

    标签: powershell azure-devops


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 您可以使用Name 将变量放在环境变量选项卡中,然后使用$env:NameInVariablesTab 在您的脚本中引用它们。使用$(name) 分配值,
    • 谢谢。我打算将其包含在原始帖子中。我试过这个,但它并没有真正完成。我可以输入,例如:name value releaseurl $(Release.ReleaseWebUrl) 并且值会出现。但是,如果不修改整个任务组,团队将无法修改此值。我需要使用 1) 任务组的默认值或 2) 在发布工作流中设置的值。在此处设置环境变量不允许在不更改整个任务组的情况下灵活更改值。任务组的参数做。
    • 这是我所拥有的:任务组参数名称、值应用程序名称、任务组环境变量名称中的 $(System.TeamProject) PowerShell 任务名称、值应用程序名称、脚本中使用的 $(应用程序名称) 值,例如: Write-Output "$env:applicationname" 这不会像 bash 那样从任务组中的默认参数中写入值。
    • 尝试全部大写
    • 感谢您的推荐,但没有任何改变。内联脚本执行写入输出“$env:APPNAME”,其中 APPNAME 是在 powershell 任务中定义的环境变量,其值为 $(APPNAME)。 APPNAME 被定义为任务组的参数,其值为 $(Release.DefinitionName) 并且应该显示定义名称。这在 bash 中完美运行。在我的一生中,我无法让它与 powershell 一起工作。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2018-06-06
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多