对于 azp 中经常使用的任务,我使用 yml 文件创建了自己的存储库,我将向您展示其中的一个子部分:create-and-upload-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。