在 powershell 脚本中创建的 azure 管道变量不显示值

时间:2021-01-19 20:47:23

标签: powershell azure-devops azure-pipelines

在 Azure Pipeline 中,我想在 Powershell 脚本中设置一个变量,然后在稍后的构建步骤中使用该变量。该变量不会打印出值。

在我的 Powrshell 脚本中,我硬编码了一个用于测试目的的值:

$packageFolder = 'dotnet/TestPackage/'
##vso[task.setvariable variable=changedPackage;isOutput=true]$packageFolder

这是我的 YAML 文件:

steps:
  - task: PowerShell@2
    displayName: 'Detect Subfolder Changes'
    name: setvarStep
    inputs:
      targetType: 'filePath'
      filePath: $(System.DefaultWorkingDirectory)\detectchanges.ps1
      failOnStderr: true
 - script: echo "$(setvarStep.changedPackage)"
 - task: DotNetCoreCLI@2 
   displayName: 'dotnet build'
   condition: ne('$(setvarStep.changedPackage)', '')
   inputs: 
      projects: '$(setvarStep.changedPackage)' 

当管道到达脚本步骤时,它会打印出以下内容:

Script contents:
echo "$(setvarStep.changedPackage)"

我不认为该变量实际上已设置。当管道进入 dotnet 构建步骤时,它会抛出一个错误:##[error]Project file(s) matching the specified pattern were not found

打开调试后,我在 dotnet 构建步骤日志中注意到了这一点:##[debug]findPath: 'C:\agents\librarywin-1\_work\2\s\$(setvarStep.changedPackage)'

我认为我的问题是管道变量语法错误,即使我正在关注 Microsoft 网站上的 example。我想不通。

2 个答案:

答案 0 :(得分:1)

你应该有Write-Host

$packageFolder = 'dotnet/TestPackage/'
Write-Host ##vso[task.setvariable variable=changedPackage;isOutput=true]$packageFolder

喜欢这里

enter image description here

答案 1 :(得分:1)

你需要双引号记录命令:

detectchanges.ps1:

$packageFolder = 'dotnet/TestPackage/'
"##vso[task.setvariable variable=changedPackage;isOutput=true]$packageFolder"

YAML:

steps:
- task: PowerShell@2
  displayName: 'Detect Subfolder Changes'
  name: setvarStep
  inputs:
    targetType: 'filePath'
    filePath: $(System.DefaultWorkingDirectory)\detectchanges.ps1
    failOnStderr: true
- script: echo "$(setvarStep.changedPackage)"