2

对于 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。

4

1 回答 1

1

有没有一种简单的方法来实现我想要的(能够在具有唯一命名模式的模板中设置一些变量):

任何不便敬请谅解。

恐怕目前没有办法解决这个问题。

正如您测试的那样,语法${{}}是在编译时解析的。当我们在任务中将其用作名称或显示名称时,我们无法获取该值,因为它将在编译时进行解析。但是在编译过程中并没有设置矩阵变量。这就是我们获得价值的原因_params

有一个关于此的功能请求。您可以在我们的 UserVoice 网站 ( https://developercommunity.visualstudio.com/content/idea/post.html?space=21  )上添加对此功能的请求,这是我们产品建议的主要论坛:

在此处输入图像描述

于 2021-05-03T09:16:41.163 回答