通过 VSTS Release Multi-Configuration Phase 两个变量,但只有一个乘数

msd*_*rds 4 azure-devops azure-pipelines-release-pipeline

我有一个 VSTS Release Definition,它传递了两个变量,我无法控制其中的内容。它们包含一个逗号分隔的名称字符串和一个逗号分隔的 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"
Run Code Online (Sandbox Code Playgroud)

如果我将乘数设置为 ID 变量,它只会运行阶段正确的次数,但我无法弄清楚如何将相应的名称传递到阶段。

这甚至可能吗?

提前致谢!

msd*_*rds 5

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

  1. IDs按照 Marina Liu 的建议将 Multipliers 字段设置为变量。这对每个阶段运行一次,ID电流ID存储在IDs变量中。
  2. 添加一个名为CurrentNamethis的空变量将存储与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)