【问题标题】:passing pipeline variable as argument into Powershell build step not working in Azure DevOps将管道变量作为参数传递到 Powershell 构建步骤在 Azure DevOps 中不起作用
【发布时间】:2021-04-30 13:09:30
【问题描述】:

我希望能够将管道变量传递到 Azure DevOps Server 中的 Powershell 构建步骤。我试图通过将变量作为参数传递来实现这一点。

这是我的管道 YAML 文件:

- task: PowerShell@2
  displayName: 'Detect Subfolder Changes'
  name: setvarStep
  inputs:
    targetType: 'filePath'
    filePath: $(System.DefaultWorkingDirectory)\detectchanges.ps1
    failOnStderr: true
  
- task: PowerShell@2
  displayName: 'Get Version Number'
  name: getVersion
  inputs:
    arguments: >
      - packagepath $(setvarStep.changedPackage)
    targetType: 'filePath'
    filePath: $(System.DefaultWorkingDirectory)\getversion.ps1
    failOnStderr: true

这是我传递“packagepath”参数的 Powershell 脚本 (getversion.ps1):

param($packagepath)

Write-Host "packagepath is: $packagepath"

$xml = [Xml] (Get-Content $packagepath)
$version = [Version] $xml.Project.PropertyGroup.Version

"##vso[task.setvariable variable=packageVersion;isOutput=true]$version"

Writ-Host 命令打印出 'packagepath is: -'。我打开了调试,参数值确实在日志中显示为:##[debug]INPUT_ARGUMENTS: '- packagepath dotnet/TestPackage/*.csproj'

除了将变量作为参数传递之外,我还尝试将变量插入到脚本中,如下所示:$packagepath = $($env:SETVARSTEP.CHANGEDPACKAGE),但它不起作用。

我确实尝试在构建步骤中为参数参数添加双引号,如下所示:- packagepath "$(setvarStep.changedPackage)"。它也没有工作。

参数值正在获取到 Powershell 脚本 getversion.ps1 但由于某种原因该值未显示。

【问题讨论】:

  • - packagepath -> -packagepath?
  • 成功了!谢谢。

标签: powershell azure-devops azure-pipelines


【解决方案1】:

@g.sulman 感谢您的建议。我将 -packagepath 更改为 -packagepath 并且它有效。我认为它就像语法一样小。

【讨论】:

  • 一旦 Stackoverflow 允许我接受我自己的答案,我就会这样做。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2022-10-17
相关资源
最近更新 更多