通过 VSTS 发布多配置阶段两个变量,但只有一个乘数

Passing VSTS Release Multi-Configuration Phase two variables, but only one multiplier

我有一个传递了两个变量的 VSTS 发布定义,我无法控制其内容。它们包含一个逗号分隔的名称字符串和一个逗号分隔的 ID 字符串,这些 ID 对应于索引名称。

我想使用配置为并行选项设置为多配置且乘数字段设置为 ID 字符串的代理阶段,因此阶段为每个 ID 一次 运行。我也想用那个阶段ID对应的名字,但是不知道怎么办

如果我将乘数设置为两个变量(ID 和名称),它 运行 是不需要的两个数组的笛卡尔积(交叉连接)的阶段。

示例:

                    IDs: "A1, A2, A3"
                  Names: "Anna, Adam, Abby"
 Runs the phase 9 times: "A1" & "Anna", "A2" & "Anna", "A3" & "Anna"
                         "A1" & "Adam", "A2" & "Adam", "A3" & "Adam"
                         "A1" & "Abby", "A2" & "Abby", "A3" & "Abby"

如果我只将乘数设置为 ID 变量,它 运行 阶段的次数是正确的,但我不知道如何将相应的名称传递到阶段中。

这可能吗?

提前致谢!

如果你想运行相位三次(A1-AnnaA2-AdamA3-Abby),你只需要指定一个variable(无论是变量 ID 还是名称)作为乘数并从另一个 variable.

中过滤相应的项目

例如使用变量IDs作为乘数,每次从变量Names中过滤对应的名称,您可以使用以下步骤:

1。将 ID 指定为乘数

2。在代理阶段

获取每次运行的ID

将变量 IDs 指定为乘数后,代理将 运行 三次:A1A2A3

每次在代理阶段运行时,您可以通过变量$(IDs)获取关联ID:

  • 当运行相位A1时,变量$(IDs)值为A1
  • 当运行相A2时,变量$(IDs)值为A2
  • 当运行相位A3时,变量$(IDs)的值是A3

3。每次运行在agent阶段

从Names变量中过滤对应的名字

由于每次到运行都可以得到ID,所以可以通过一些定义的规则得到与ID对应的名字。比如使用if条件得到正确的名字,或者解析ID的索引得到对应的名字等

要为 IDs 变量中的每个项目进行一次多配置阶段 运行,并使当前 ID 和名称在阶段中可用:

  1. 按照 Marina Liu 的建议,将乘数字段设置为 IDs 变量。此 运行 为每个 ID 设置一次相位,当前 ID 存储在 IDs 变量中。
  2. 添加一个名为 CurrentName 的空变量,这将存储与 IDs 变量关联的名称。

  3. 将内联 Powershell 脚本任务添加到包含以下命令的代理阶段:

$names = "$(Names)".Split(", ",[System.StringSplitOptions]::RemoveEmptyEntries) Write-Host "##vso[task.setvariable variable=CurrentName]$($names[[int]"$(SYSTEM.JOBPOSITIONINPHASE)" - 1])"

该脚本使用内置的 System.JobPositionInPhase 变量,其中包含当前阶段的索引 运行,从 Names 中获取当前阶段的名称变量并将其存储在 CurrentName 变量中。

您可以在阶段中的任何位置使用 $(CurrentName) 来获取与 $(IDs) 关联的名称的值。