在Azure DevOps管道模板中,我将参数声明为数组/序列
parameters:
mySubscription: ''
myArray: []
steps:
- AzureCLI@2
inputs:
azureSubscription: ${{ parameters.mySubscription }}
scriptType: pscore
scriptPath: $(Build.SourcesDirectory)/script.ps1
arguments: '-MyYAMLArgument ${{ parameters.myArray }}'
然后将参数值从管道定义传递为
steps:
- template: myTemplate.yml
parameters:
mySubscription: 'azure-connection'
myArray:
- field1: 'a'
field2: 'b'
- field1: 'aa'
field2: 'bb'
我的问题是,我无法按原样通过YAML语法传递该数组(种类为ToString()
),以便能够从我的模板的PowerShell中使用和处理该数组。尝试运行此管道时,出现以下错误:/myTemplate.yml (Line: X, Col: X): Unable to convert from Array to String. Value: Array
。错误消息中引用的行/列对应于我的模板中的arguments: '-MyYAMLArgument ${{ parameters.myArray }}'
。
我还尝试将参数映射为脚本的环境
- AzureCLI@2
inputs:
azureSubscription: ${{ parameters.mySubscription }}
scriptType: pscore
scriptPath: $(Build.SourcesDirectory)/script.ps1
arguments: '-MyYAMLArgument $Env:MY_ENV_VAR'
env:
MY_ENV_VAR: ${{ parameters.myArray }}
这也不起作用:
/myTemplate.yml (Line: X, Col: Y): A sequence was not expected
。该时间轴/列指的是MY_ENV_VAR: ${{ parameters.myArray }}
。
有人将管道定义中定义的复杂类型(这里是对象的数组/序列)传递给PowerShell脚本吗?如果是这样,您是如何实现的?
如何将复杂的DevOps管道模板参数传递给脚本
恐怕我们无法将复杂的DevOps管道模板参数传递给PowerShell脚本。
当前,Azure开发人员的任务仅支持一维数组的传输。它不能接受和传送二维数组。尽管我们可以定义二维数组的参数,但是我们需要使用以下脚本从模板扩展参数:
- ${{ each field in parameters.myArray}}:
我们可以像这样使用它:
- ${{ each step in parameters.buildSteps }}: #- ${{ each pair in step }}: - task: PowerShell@2 inputs: targetType : inline script: | Write-Host 'Hello World'
但是我们无法将二维数组直接传递给任务,例如:[field1: 'a', field2: 'b']
。那就是你得到错误Unable to convert from Array to String
的原因。您可以检查文档Extend from a template了解更多详细信息。
希望这会有所帮助。