如何将复杂的 DevOps 管道模板参数传递给脚本 [英] How to pass complex DevOps pipeline template parameter to script
问题描述
在 Azure DevOps 管道模板中,我将参数声明为数组/序列
In an Azure DevOps pipeline template, I am declaring a parameter as an array/sequence
parameters:
mySubscription: ''
myArray: []
steps:
- AzureCLI@2
inputs:
azureSubscription: ${{ parameters.mySubscription }}
scriptType: pscore
scriptPath: $(Build.SourcesDirectory)/script.ps1
arguments: '-MyYAMLArgument ${{ parameters.myArray }}'
然后从管道定义传递参数的值
Value for the parameter is then passed from pipeline definition as
steps:
- template: myTemplate.yml
parameters:
mySubscription: 'azure-connection'
myArray:
- field1: 'a'
field2: 'b'
- field1: 'aa'
field2: 'bb'
我的问题是我无法在 YAML 语法(一种 ToString()
)中按原样传递该数组,以便能够在我的模板中从 PowerShell 使用和处理该数组.尝试运行此管道时,出现以下错误:/myTemplate.yml(行:X,列:X):无法从数组转换为字符串.值:数组
.错误消息中引用的行/列对应于我的模板中的 arguments: '-MyYAMLArgument ${{ parameters.myArray }}'
.
My problem is I can't pass that array as-is in YAML syntax (kind of ToString()
) to be able to consume and treat that array from PowerShell in my template. When trying to run this pipeline, I get the following error:
/myTemplate.yml (Line: X, Col: X): Unable to convert from Array to String. Value: Array
. The line/column referenced in the error message correspond to arguments: '-MyYAMLArgument ${{ parameters.myArray }}'
from my template.
我还尝试将参数映射为脚本的环境
I also tried to map the parameter as an environment for my script
- 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(行:X,列:Y):序列不是预期的
.该时间线/列指的是 MY_ENV_VAR: ${{ parameters.myArray }}
.
This does not work too:
/myTemplate.yml (Line: X, Col: Y): A sequence was not expected
. That time line/column refers to MY_ENV_VAR: ${{ parameters.myArray }}
.
有没有人遇到过类似的要求,将管道定义中定义的复杂类型(这里是对象的数组/序列)传递给 PowerShell 脚本?如果是这样,您是如何实现的?
Does anyone ever faced a similar requirement to pass complex types (here an array/sequence of object) defined from the pipeline definition to a PowerShell script? If so, how did you achieve it?
推荐答案
您现在可以在 ADO 管道中使用 convertToJson
函数将这些类型的参数转换为字符串:
You can now convert these types of parameters to String using the convertToJson
function in an ADO pipeline:
parameters:
- name: myParameter
type: object
default:
name1: value1
name2: value2
...
- task: Bash@3
inputs:
targetType: inline
script: |
echo "${{ convertToJson(parameters.myParameter) }}"
convertToJson:https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#converttojson
convertToJson: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#converttojson
这篇关于如何将复杂的 DevOps 管道模板参数传递给脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!