我有一个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变量,那么它只能以正确的次数运行该阶段,但是我不知道如何将相应的名称传递到该阶段。
这有可能吗?
谢谢!
答案 0 :(得分:3)
如果您要运行该阶段三次(A1-Anna
,A2-Adam
和A3-Abby
),则只需指定一个变量(无论(用于变量ID或名称)作为乘数,并从另一个变量中过滤相应项。
例如每次将变量IDs
用作乘数并从变量Names
中过滤相应的名称,则可以使用以下步骤:
在将变量IDs
指定为乘数之后,代理将运行三次:A1
,A2
和A3
。
每次在代理阶段运行时,您都可以通过变量 $(IDs)
获得关联ID:
A1
时,变量$(IDs)
的值为A1
; A2
时,变量$(IDs)
的值为A2
; A3
时,变量$(IDs)
的值为A3
。由于可以获得每次运行的ID,因此可以通过一些已定义的规则获得具有ID的相应名称。例如使用if条件获取正确的名称,或解析ID的索引并获取相应的名称等。
答案 1 :(得分:3)
要使多配置阶段对IDs
变量中的每个项目运行一次,并使当前ID和名称都可用于该阶段:
IDs
变量。这会为每个ID
运行一次该阶段,并将当前ID
存储在IDs
变量中。添加一个名为CurrentName
的空变量,该变量将存储与IDs
变量关联的名称。
将内联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)
关联的名称的值。