如何将复杂的DevOps管道模板参数传递给脚本

问题描述 投票:0回答:1

在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脚本吗?如果是这样,您是如何实现的?

azure-devops yaml azure-pipelines azure-pipelines-yaml
1个回答
0
投票
如何将复杂的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了解更多详细信息。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.