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
。
这可能吗?
据我所知,不可能迭代管道资源列表。
作为解决方法,请考虑添加带有存储库列表的参数 - 例如:
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 ...