我可以在管道中迭代 resources.repositories 吗?

问题描述 投票:0回答:1

resources.repositories 似乎是一个列表,所以我希望我可以迭代它而不必进行修改。

我正在尝试制作一个看起来像这样的管道:

resources:
  repositories:
    - repository: firstRepo
      name: MyProject/firstRepo
      type: git
    - repository: secondRepo
      name: MyProject/secondRepo
      type: git

stages:
  - stage: DoThing
    jobs:
    - ${{ each repo in variables.repositories }}:
      - template: /templates/doThing.yaml
        parameters:
          repoName: ${{ repo.name }}

尝试运行管道时,我因错误而停止:

/pipelines/azure-pipelines.yaml(行:13,列:7):无法识别的值:“资源”。位于表达式中的位置 1:resources.repositories。如需更多帮助,请参阅 https://go.microsoft.com/fwlink/?linkid=842996

多仓库结账文档说:

当您检查多个存储库时,有关自身存储库的一些详细信息可以作为变量使用。当您使用多存储库触发器时,其中一些变量包含有关触发存储库的信息。 有关作业消耗的所有存储库的详细信息可作为称为 resources.repositories 的模板上下文对象提供。

模板上下文对象链接有这样的说法:

在模板表达式中,您可以访问包含传入参数值的参数上下文。此外,您还可以访问包含 YAML 文件中指定的所有变量以及许多预定义变量(在该文章中的每个变量)。重要的是,它没有运行时变量,例如存储在管道中或在开始运行时给出的变量。模板扩展发生在运行早期,因此这些变量不可用。

如果它在模板上下文中可用,那么按照我的示例使用它应该没问题。但是,所有使用 resources.repositories 的示例都将其与运行时表达式语法一起使用,并且在使用它时始终指定别名(例如,

firstRepo
)和变量(例如,
ref
)。例如:
$[resources.repositories.firstRepo.name

这可能吗?

azure-pipelines azure-pipelines-yaml
1个回答
0
投票

据我所知,不可能迭代管道资源列表。

作为解决方法,请考虑添加带有存储库列表的参数 - 例如:

parameters:
  - name: repositories
    displayName: List of repositories used by this pipeline
    type: object
    default:
      - MyProject/firstRepo
      - MyProject/secondRepo

resources:
  repositories:
    - repository: firstRepo
      name: MyProject/firstRepo
      type: git
    - repository: secondRepo
      name: MyProject/secondRepo
      type: git

stages:
  - stage: DoThing
    jobs:
    - ${{ each repo in parameters.repositories }}:
      - template: /templates/doThing.yaml
        parameters:
          repoName: ${{ repo }}

这种方法增加了一些重复,您需要保持参数和资源同步。但是,另一方面,您可以迭代

repositories
参数。

请注意,如果您想手动签出代码,则需要使用存储库别名(例如

firstRepo
)而不是存储库名称(例如
MyProject/firstRepo
):

steps:
  - checkout: firstRepo

  # other steps ...
© www.soinside.com 2019 - 2024. All rights reserved.