我有点坚持这个成就,我希望在我的构建管道中可用。
主要目标是当我已经处于模板表单中时,迭代函数
{{split ',' parameters.PARAMETER_PASSED}}
提取的每个值。
它应该是什么样子:
value1,value2,value3,...,valueX
valueN
,启动具有特定显示名称的脚本(在这种情况下 ${{ value}}
就可以了)您可以在下面找到我迄今为止所取得的成就:
azure-pipelines.yaml
- stage: AutomateScriptContent
displayName: 'Some new trick'
jobs:
- job: CheckFileChanges
displayName: Prepare list
steps:
- checkout: self
persistCredentials: true
- bash: |
#....Something..Something
echo "##vso[task.setvariable variable=VALUE_LIST;isOutput=true;]value1,value2,value3"
fi
displayName: "Check"
name: check
- job: TestTemplate
variables:
LISTVAL: $[ dependencies.CheckFileChanges.outputs['check.VALUE_LIST'] ]
displayName: "Do something with values passed from env variable"
dependsOn: CheckFileChanges
steps:
- template: __templates__/test.template.yml
parameters:
MY_LIST: $(LISTVAL)
test.template.yml
parameters:
MY_LIST: ""
steps:
- variables:
website: {{split ',' parameters.MY_LIST}}
# - script: echo "${{ parameters.MY_LIST }}"
- ${{ each value in var.MY_LIST }}:
- script: 'echo ${{ value }}'
displayName: '${{ value }}'
我知道 test.template.yml 不正确,但我不明白如何使其工作!
有什么建议吗?不确定是否可以使用 `echo "##vso[task.setvariable variable=VALUE_LIST;isOutput=true;]$MY_ARRAY"
从 bash/powershell 传递一个新数组另外一种可接受的解决方案可以将数组的每个值添加为新参数,输出它,然后传递所有参数(不提供如下所示的名称),但我不确定是否可以在不提供每个参数的情况下传递参数每个参数的名称(下面的示例)。
variables:
LISTVAL: $[ dependencies.CheckFileChanges.outputs['check(GET_ALL_PARAMETERS)'] ]
提前谢谢您。
你这里有一些问题。 在你的 test.template.yml 中
此外,管道“WEBSITE_LIST”中的参数名称与模板“MY_LIST”中定义的名称不匹配
如果你的第一份工作的产出列表是有限的,你可以做如下的事情,但如果列表增长,这将是不可持续的。
管道:
stages:
- stage: AutomateScriptContent
displayName: 'Some new trick'
jobs:
- job: CheckFileChanges
displayName: Prepare list
steps:
- checkout: self
persistCredentials: true
- bash: |
#....Something..Something
echo "##vso[task.setvariable variable=value1;isOutput=true;]foo"
echo "##vso[task.setvariable variable=value2;isOutput=true;]bar"
echo "##vso[task.setvariable variable=value3;isOutput=true;]lorem"
echo "##vso[task.setvariable variable=value4;isOutput=true;]ipsum"
displayName: "Check"
name: check
- job: TestTemplate
variables:
v1: $[ dependencies.CheckFileChanges.outputs['check.value1'] ]
v2: $[ dependencies.CheckFileChanges.outputs['check.value2'] ]
v3: $[ dependencies.CheckFileChanges.outputs['check.value3'] ]
v4: $[ dependencies.CheckFileChanges.outputs['check.value4'] ]
displayName: "Do something with values passed from env variable"
dependsOn: CheckFileChanges
steps:
- template: __templates__/test.template.yml
parameters:
MY_LIST: [$(v1), $(v2), $(v3), $(v4)]
模板
parameters:
- name: MY_LIST
type: object
steps:
- ${{ each value in parameters.MY_LIST }}:
- script: 'echo ${{ value }}'
displayName: '${{value}}'
编辑:正如您解释的那样,您不知道第一份工作的输出值数量,这似乎不可能实现。 变量始终是字符串,虽然您可以从第一个作业输出 csv 字符串变量,但没有可用的函数可以将其拆分为数组以用作第二个作业的参数。