首页 > 解决方案 > 通过 VSTS Release Multi-Configuration Phase 两个变量,但只有一个乘数

问题描述

我有一个 VSTS 发布定义,它传递了两个变量,我无法控制其内容。它们包含一个逗号分隔的名称字符串和一个逗号分隔的 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 变量,它只运行阶段正确的次数,但我不知道如何将相应的名称传递到阶段。

这甚至可能吗?

提前致谢!

标签: azure-devopsazure-pipelines-release-pipeline

解决方案


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

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


推荐阅读