【发布时间】:2020-08-27 08:31:12
【问题描述】:
我们希望创建一个管道来更新我们的多租户 Azure 环境。我们需要在每个租户的更新期间执行一些操作。为此,我们希望为每个租户创建一个作业,以便我们可以并行处理租户。为此,我想使用运行时参数将要更新的租户传递到我的管道,如下所示:
parameters:
- name: tenants
type: object
tenants 参数的值可能如下所示:
- Name: "customer1"
Someotherproperty: "some value"
- Name: "customer2"
Someotherproperty: "some other value"
要生成作业,我们执行以下操作:
stages:
- stage:
jobs:
- job: Update_Tenant
strategy:
matrix:
${{ each tenant in parameters.Tenants }}:
${{ tenant.tenantName }}:
name: ${{ tenant.tenantName }}
someproperty: ${{ tenant.otherProperty }}
maxParallel: 2
steps:
- checkout: none
- script: echo $(name).$(someproperty)
现在我们需要的是某种方式来填充这个tenants 参数。现在我尝试了一些解决方案:
-
理想情况下,我想在
Update_Tenants阶段之前放置一个构建阶段以调用REST api 来获取租户,并在Update_Tenants阶段启动时扩展tenants参数,但这不支持AFAIK,因为参数扩展是在管道启动时完成的。 -
一个不太理想但仍然可行的选项是创建一个包含租户的变量组 yaml 文件,并将此变量组包含在我的管道中,并使用
${{ variables.Tenants }}语法来引用它们。但是,由于某种原因,变量只能是字符串。
我目前能想到的唯一解决方案是创建一个调用 REST api 来让租户更新的管道,然后使用 azure devops api 以正确的参数值对实际更新过程进行排队。但这感觉有点笨拙。
现在我的问题是,有没有(更好的?)替代方案来完成我想做的事情?
【问题讨论】:
标签: azure-devops azure-pipelines