如何解决Azure Pipeline Matrix Strategy Variable Expansion 问题结合模板
对于 azp 中经常使用的任务,我使用 yml 文件创建了一个自己的存储库,我将向您展示其中的一个子部分: 创建并上传-docu.yml:
parameters:
- name: Documentation
type: string
default: ''
- name: Language
type: string
default: ''
- name: ArchiveBaseDir
type: string
default: ''
steps:
- script: |
ARCHIVERELPATH=${{parameters.Documentation}}-${{parameters.Language}}.zip
ARCHIVEDIR=$(echo -n ${{parameters.ArchiveBaseDir}} | sed -e 's@/$@@')/${{parameters.Documentation}}/${{parameters.Language}}
echo "##vso[task.setvariable variable=archiveRelPath;isOutput=true]$ARCHIVERELPATH"
echo "##vso[task.setvariable variable=archiveDir;isOutput=true]$ARCHIVEDIR"
name: ${{parameters.Documentation}}_${{parameters.Language}}_params
- task: DeleteFiles@1
inputs:
Contents: '$(Build.ArtifactStagingDirectory)/$(${{parameters.Documentation}}_${{parameters.Language}}_params.archiveRelPath)'
相关部分是:“脚本”的名称在作业中是唯一的 - 所以我可以使用这种扩展在模板中设置变量:
$(${{parameters.Documentation}}_${{parameters.Language}}_params.archiveRelPath)
只要我使用固定值调用模板,这就可以正常工作,例如
- template: create-and-upload-docu.yml@templates
parameters:
Documentation: 'adocuvalue'
Language: 'en_US'
ArchiveBaseDir: '$(Build.ArtifactStagingDirectory)/build/'
但现在我想使用一个矩阵来拥有一些包含几种语言的文档:
jobs:
- job: Documentation_CI
displayName: "Docu CI"
timeoutInMinutes: 30
strategy:
matrix:
main_en_US:
Documentation: main
Language: en_US
main_de_AT:
Documentation: main
Language: de_AT
steps:
- checkout: self
- template: create-and-upload-docu.yml@templates
parameters:
Documentation: ${{variables.Documentation}}
Language: ${{variables.Language}}
ArchiveBaseDir: '$(Ws)/build/'
但是在展开${{}}表达式的时候,好像矩阵变量还没有设置;这意味着模板脚本部分被称为 __params 并且管道有以下错误
Publishing build artifacts failed with an error: Input required: ArtifactName
是否有一种简单的方法可以实现我想要的(能够在具有唯一命名架构的模板中设置一些变量):
- 我可以以某种方式使用 ${{ 表达式,但需要不同的命名来获取硬编码的矩阵样式变量
- 我可以通过任何简单的方法解决我的问题吗?
附加信息:我们在本地运行 Azure 2020。
解决方法
是否有一种简单的方法可以实现我想要的(能够在具有唯一命名架构的模板中设置一些变量):
抱歉给您带来不便。
目前恐怕没有办法解决这个问题。
正如您测试的那样,语法 ${{}}
在编译时被解析。当我们在任务中将其用作名称或显示名称时,我们无法获取该值,因为它将在编译时解析。但是在编译期间没有设置矩阵变量。这就是我们得到值 _params
的原因。
有一个关于此的 feature request。您可以在我们的 UserVoice 网站 (https://developercommunity.visualstudio.com/content/idea/post.html?space=21 ) 上添加对此功能的请求,该网站是我们提供产品建议的主要论坛:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。