从外部来源填充运行时的天蓝色管道参数

时间:2020-08-27 08:31:12

标签: azure-devops azure-pipelines

我们希望创建一条管道来更新我们的多租户天青环境。在每个租户更新期间,我们需要执行一些操作。为此,我们想为每个租户创建一个作业,以便我们可以并行处理租户。为此,我想使用运行时参数传递租户以将其更新到我的管道,如下所示:

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将具有正确参数值的实际更新过程排队。但这似乎有点笨拙的解决方法。

现在我的问题是,有什么(更好的选择)来完成我想做的事情?

2 个答案:

答案 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)

来源(也有矩阵示例)

其他来源