Azure devops Azure Devops:模板使用序列类型参数生成作业和阶段

Azure devops Azure Devops:模板使用序列类型参数生成作业和阶段,azure-devops,Azure Devops,模板变量似乎不支持序列类型,但模板参数支持它(在Microsoft doc中称为对象类型),以及作业列表类型和阶段列表类型,但它们似乎只是具有已定义架构的序列 当迭代对象类型参数以生成步骤时,我并没有遇到任何问题,但当我尝试这样做以生成作业和阶段时,我得到了一个名为“序列不应出现”的错误 所以结果必须是这样的: #main.yml: 触发器:无 延伸: 模板:template.yml 参数: 项目名称:foo.bar 部署目标: -阶段: 工作: -部署: 环境: 名称:测试 标签:Web#标签

模板变量似乎不支持序列类型,但模板参数支持它(在Microsoft doc中称为对象类型),以及作业列表类型和阶段列表类型,但它们似乎只是具有已定义架构的序列

当迭代对象类型参数以生成步骤时,我并没有遇到任何问题,但当我尝试这样做以生成作业和阶段时,我得到了一个名为“序列不应出现”的错误

所以结果必须是这样的:

#main.yml:
触发器:无
延伸:
模板:template.yml
参数:
项目名称:foo.bar
部署目标:
-阶段:
工作:
-部署:
环境:
名称:测试
标签:Web#标签必须是逗号分隔的字符串,这也有点奇怪
-阶段:
工作:
-部署:
环境:
姓名:PROD
标签:网络
#template.yml:
参数:
-名称:项目名称
类型:字符串
默认值:“
-名称:DEPLOYMENTTARGETS
类型:stageList#我希望对象能够工作
默认值:[]
变量:
-组:LoginScrets
阶段:
-${{parameters.DEPLOYMENTTARGETS}}中的每个deploymentTarget:#在此处迭代对象将导致错误:“不需要序列”,迭代阶段列表是可以的
-stage:Deploy{{replace(parameters.PROJECTNAME,'.''.''''.}}}{replace(deploymentTarget.jobs[0].environment.name,'-'.''.''.'''.')}}}{replace(replace(deploymentTarget.jobs[0].environment.tags,'.','.''-'.''.'.'.'.'}}}}}}}}假设每个stage只包含一个部署作业。如果需要,我们还可以在这里迭代作业。
dependsOn:BuildAndPublish_${{replace(parameters.PROJECTNAME,'.','''}}}Stage
工作:
-部署:部署${{replace(parameters.PROJECTNAME,'.',''.'}}}
环境:
名称:${deploymentTarget.jobs[0].environment.name}
资源类型:虚拟机
标记:${deploymentTarget.jobs[0].environment.tags}
战略:
跳动:
部署:
步骤:
-pwsh:$(Pipeline.Workspace)/${{parameters.PROJECTNAME}}/pipelineRelease.ps1
环境:
登录名:$(登录名)
登录密码:$(登录密码)
项目名称:${parameters.PROJECTNAME}
但我希望这样的事情能奏效:

#main.yml:
触发器:无
延伸:
模板:template.yml
参数:
项目名称:foo.bar
部署目标:
-名称:测试
标签:网络
-名称:PROD
标签:网络
#template.yml:
参数:
-名称:项目名称
类型:字符串
默认值:“
-名称:DEPLOYMENTTARGETS
type:object#我在这里传递了一个对象,而不是StageList
默认值:[]
变量:
-组:LoginScrets
阶段:
-${{parameters.DEPLOYMENTTARGETS}中的每个deploymentTarget}:#此处出错
-阶段:部署${{replace(parameters.PROJECTNAME,'.'''.'''.}}}{replace(deploymentTarget.EnvName,'-','''.')}}}{replace(replace(replace(deploymentTargetTags,','.'''''''.'-',''''.'),''''.}}阶段
dependsOn:BuildAndPublish_${{replace(parameters.PROJECTNAME,'.','''}}}Stage
工作:
-部署:部署${{replace(parameters.PROJECTNAME,'.',''.'}}}
环境:
名称:${deploymentTarget.EnvName}}
资源类型:虚拟机
标记:${deploymentTarget.tags}
战略:
跳动:
部署:
步骤:
-pwsh:$(Pipeline.Workspace)/${{parameters.PROJECTNAME}}/pipelineRelease.ps1
环境:
登录名:$(登录名)
登录密码:$(登录密码)
项目名称:${parameters.PROJECTNAME}
Azure Devops:模板使用序列类型参数生成作业和阶段

恐怕我们必须使用
stageList
而不是
object
来传输二维数组

这是因为参数在
main.yml
中定义为二维数组,但是如果我们在
template.yml
文件中将此数组定义为
object
。在这种情况下,我们无法循环模板文件中的对象

您可以查看文档以了解更多详细信息


此外,您还可以查看以了解一些详细信息。

我建议在参数(可能还有变量)中明确支持序列(数组)作为解决方案。当您被迫遍历StepList/JobList/StageList之类的东西,而它们本质上只是定义了模式的序列时,您会感到不一致。