在 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。我想不通。
答案 0 :(得分:1)
你应该有Write-Host
$packageFolder = 'dotnet/TestPackage/'
Write-Host ##vso[task.setvariable variable=changedPackage;isOutput=true]$packageFolder
喜欢这里
答案 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)"