我想在Powershell任务中生成一个列表作为输出变量,并在yml模板中将其用作列表以执行任务循环。
#Main
- task: PowerShell@2
condition: succeeded()
displayName: "Create a list"
inputs:
targetType: 'inline'
script: |
$myList = New-Object System.Collections.ArrayList
$myList.Add("wow")
Write-Output ("##vso[task.setvariable variable=MyList;]$myList")
- template: myRandomListTaskTemplate.yml
parameters:
MyList: $(MyList)
#Template
parameters:
MyList: []
steps:
- ${{ each myList in parameters.MyList }}:
- task: PowerShell@2
condition: succeeded()
displayName: "WOW a list"
inputs:
targetType: 'inline'
script: |
Write-Host("A list string: ${{ myList }}")
我遇到错误
Expected a sequence or mapping. Actual value '$(MyList)'
注意:模板中的Powershell任务只是一个示例,它可以是与Powershell不相关的其他任务(例如:DotNetCoreCLI @ 2)
答案 0 :(得分:0)
它将无法按预期工作。
$myList = New-Object System.Collections.ArrayList
$myList.Add("wow")
Write-Output ("##vso[task.setvariable variable=MyList;]$myList")
您不会在这里拥有一个数组。将其分配给变量后,它将为纯字符串。这就是为什么您会收到此错误。
如果运行此命令:
- template: myRandomListTaskTemplate2.yml
parameters:
MyList:
- item1
- item2
一切顺利。但是,目前无法做什么。
答案 1 :(得分:0)
Azure DevOps-将Powershell列表变量传递给yml模板数组
就像Krzysztof Madej所说的那样,您无法在Powershell代码中包含数组。
作为测试,我使用powershell脚本创建了一个数组,然后将Powershell列表变量传递给yml模板数组:
stages:
- stage: Deploy_Cluster
jobs:
- job: A
pool:
name: MyPrivateAgent
steps:
- task: PowerShell@2
condition: succeeded()
displayName: "Create a list"
inputs:
targetType: 'inline'
script: |
$id = '2,0,1,2'
Write-Host "##vso[task.setvariable variable=valuefiles;isOutput=true]$id"
name: fileoutput
- job: B
dependsOn: A
pool:
name: MyPrivateAgent
variables:
allfiles: $[dependencies.A.outputs['fileoutput.valuefiles']]
steps:
- template: loopTemplate.yml
parameters:
files : $(allfiles)
我的测试loopTemplate.yml
:
parameters:
files: []
steps :
- task: PowerShell@2
displayName: 'Fetching ValueFiles'
inputs:
targetType: 'inline'
script: >
foreach ($i in ${{parameters.files}})
{
Write-Host "filenames=$i"
}
我的测试结果:
希望这会有所帮助。