通过 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-Anna
、A2-Adam
和A3-Abby
),你只需要指定一个variable(无论是变量 ID 还是名称)作为乘数并从另一个 variable.
中过滤相应的项目
例如使用变量IDs
作为乘数,每次从变量Names
中过滤对应的名称,您可以使用以下步骤:
1。将 ID 指定为乘数
2。在代理阶段
获取每次运行的ID
将变量 IDs
指定为乘数后,代理将 运行 三次:A1
、A2
和 A3
。
每次在代理阶段运行时,您可以通过变量$(IDs)
获取关联ID:
- 当运行相位
A1
时,变量$(IDs)
值为A1
;
- 当运行相
A2
时,变量$(IDs)
值为A2
;
- 当运行相位
A3
时,变量$(IDs)
的值是A3
。
3。每次运行在agent阶段
从Names变量中过滤对应的名字
由于每次到运行都可以得到ID,所以可以通过一些定义的规则得到与ID对应的名字。比如使用if条件得到正确的名字,或者解析ID的索引得到对应的名字等
要为 IDs
变量中的每个项目进行一次多配置阶段 运行,并使当前 ID 和名称在阶段中可用:
- 按照 Marina Liu 的建议,将乘数字段设置为
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)
关联的名称的值。
我有一个传递了两个变量的 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-Anna
、A2-Adam
和A3-Abby
),你只需要指定一个variable(无论是变量 ID 还是名称)作为乘数并从另一个 variable.
例如使用变量IDs
作为乘数,每次从变量Names
中过滤对应的名称,您可以使用以下步骤:
1。将 ID 指定为乘数
2。在代理阶段
获取每次运行的ID将变量 IDs
指定为乘数后,代理将 运行 三次:A1
、A2
和 A3
。
每次在代理阶段运行时,您可以通过变量$(IDs)
获取关联ID:
- 当运行相位
A1
时,变量$(IDs)
值为A1
; - 当运行相
A2
时,变量$(IDs)
值为A2
; - 当运行相位
A3
时,变量$(IDs)
的值是A3
。
3。每次运行在agent阶段
从Names变量中过滤对应的名字由于每次到运行都可以得到ID,所以可以通过一些定义的规则得到与ID对应的名字。比如使用if条件得到正确的名字,或者解析ID的索引得到对应的名字等
要为 IDs
变量中的每个项目进行一次多配置阶段 运行,并使当前 ID 和名称在阶段中可用:
- 按照 Marina Liu 的建议,将乘数字段设置为
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)
关联的名称的值。