我们希望创建一条管道来更新我们的多租户天青环境。在每个租户更新期间,我们需要执行一些操作。为此,我们想为每个租户创建一个作业,以便我们可以并行处理租户。为此,我想使用运行时参数传递租户以将其更新到我的管道,如下所示:
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来获取租户,并在tenants
阶段扩展Update_Tenants
参数启动,但不支持AFAIK,因为在管道启动时已完成参数扩展。
一个不太理想但仍可行的选择是创建一个包含租户的变量组yaml文件,并将此变量组包含在我的管道中,并使用${{ variables.Tenants }}
语法引用它们。但是,由于某些原因,变量只能是字符串。
我目前唯一想到的解决方案是创建一个调用REST API的管道以使租户进行更新,然后使用azure devops api将具有正确参数值的实际更新过程排队。但这似乎有点笨拙的解决方法。
现在我的问题是,有什么(更好的选择)来完成我想做的事情?
答案 0 :(得分:0)
为此,我们想为每个租户创建一份工作,因此我们 可以并行处理租户。
除了滚动部署策略外,您还可以检查Strategies and Matrix。
除非必须使用运行时参数,否则您可以尝试这样的操作:
jobs:
- job: Update
strategy:
matrix:
tenant1:
Someotherproperty1: '1.1'
Someotherproperty2: '1.2'
tenant2:
Someotherproperty1: '2.1'
Someotherproperty2: '2.2'
tenant3:
Someotherproperty1: '3.1'
Someotherproperty2: '3.2'
maxParallel: 3
steps:
- checkout: none
- script: echo $(Someotherproperty1).$(Someotherproperty2)
displayName: 'Echo something'
答案 1 :(得分:0)
也许这会有所帮助。我能够使用外部源(.txt文件)在天青管道中填充数组变量。
# Create a variable
- bash: |
arrVar=()
for images in `cat my_images.txt`;do
arrVar+=$images
arrVar+=","
done;
echo "##vso[task.setvariable variable=list_images]$arrVar"
# Use the variable
# "$(list_images)" is replaced by the contents of the `list_images` variable by Azure Pipelines
# before handing the body of the script to the shell.
- bash: |
echo my pipeline variable is $(list_images)