【问题标题】:How can I set an Azure Devops pipeline variable via an inline PowerShell command?如何通过内联 PowerShell 命令设置 Azure Devops 管道变量?
【发布时间】:2020-06-06 09:05:02
【问题描述】:

我有一个包含以下任务的 Azure Devops 构建 YAML 文件:

  - task: PowerShell@2
    displayName: 'Set coverage variable'
    inputs:
      targetType: 'inline'
      script: Write-Host "##vso[task.setvariable variable=coverage]Get-Content .\coverage\lcov-report\summary.txt"

我希望这个任务将变量coverage 设置为summary.txt 的内容的值。但是,在以下任务中访问变量时,我看到该变量实际上是字符串Get-Content .\coverage\lcov-report\summary.txt

文档中似乎没有任何示例说明如何实现这一点。这只是脚本的限制吗?是否必须将Get-Content 命令设置为变量,然后访问该变量?

【问题讨论】:

    标签: powershell azure-devops


    【解决方案1】:

    请在]之后使用$()。

    例子:

    ##vso[task.setvariable variable=coverage]$(Get-Content .\coverage\lcov-report\summary.txt)"
    

    【讨论】:

    • 谢谢!这正是我想要的
    【解决方案2】:

    实际上,它已记录在案。但在我们的官方文档中可能不太明显:) 你可以找到相关文档here:

    重要

    包含文件路径的预定义变量被转换为适当的样式(Windows 样式 C:\foo\ 与 Unix 样式 /foo/) 基于代理主机类型和外壳类型。如果您正在运行 bash Windows 上的脚本任务,您应该使用环境变量 访问这些变量而不是管道变量的方法 方法,以确保您具有正确的文件路径样式。

    由于您使用的是管道变量,'Get-Content .\coverage\lcov-report\summary.txt' 作为字符串类型返回的值,这是预期的行为。

    但是 $() 接受一个变量而不是一个字符串。使用$(Get-Content .\coverage\lcov-report\summary.txt)

    在此之后,在下面的任务中,简单的使用下面的来读取值。

    Write-Host No problem reading $env:coverage 
    

    【讨论】:

    • 哦,我明白了!我认为我脑海中的内容与页面上的内容在语义上不匹配。当我读到$() 接受一个变量时,我想象$(coverage) 是必需的。我将$(Get-Content ...) 视为表达式而不是变量
    猜你喜欢
    • 1970-01-01
    • 2019-08-23
    • 2021-11-23
    • 2020-04-02
    • 2021-07-19
    • 2023-02-09
    • 1970-01-01
    • 2019-12-17
    • 2020-04-02
    相关资源
    最近更新 更多