Передача VSTS Release Multi-Configuration Phase две переменные, но только один множитель - PullRequest
0 голосов
/ 26 июня 2018

У меня есть определение выпуска VSTS, в которое передаются две переменные, содержимым которых я не управляю. Они содержат разделенную запятыми строку Имен и разделенную запятыми строку идентификаторов, которые соответствуют Именам по индексу.

Я хочу использовать фазу агента, сконфигурированную с параметром параллелизма, установленным на множественную конфигурацию, и полем множителя, равным строке идентификаторов, поэтому фаза запускается один раз для каждого идентификатора. Я также хочу использовать имя, соответствующее идентификатору на этом этапе, но я не уверен, как это сделать.

Если я задаю множитель для обеих переменных (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, то только фаза будет выполняться правильное число раз, но я не могу понять, как передать соответствующее имя в фазу.

Это вообще возможно?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Чтобы фаза мультиконфигурации запускалась один раз для каждого элемента в переменной IDs, и сделать текущий идентификатор и имя доступными для использования в фазе:

  1. Установите в поле Multipliers значение 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).

0 голосов
/ 27 июня 2018

Если вы хотите запустить фазу три раза (A1-Anna, A2-Adam и A3-Abby), вам просто нужно указать одну переменную (независимо от идентификаторов или имен переменных) как множители и отфильтруйте соответствующий элемент из другой переменной .

Например, используйте переменную IDs в качестве Множителей и отфильтровывайте соответствующее имя из переменной Names каждый раз, вы можете использовать следующие шаги:

1. Укажите идентификаторы как множители

enter image description here

2. Получите идентификатор для каждого запуска на фазе агента

После указания переменной IDs в качестве множителей агент будет запускаться три раза: A1, A2 и A3.

И вы можете получить относительный идентификатор по переменной $(IDs) при каждом запуске на фазе агента:

  • При запуске фазы A1 значение переменной $(IDs) равно A1;
  • При запуске фазы A2 значение переменной $(IDs) равно A2;
  • При запуске фазы A3 значение переменной $(IDs) равно A3.

3. Отфильтруйте соответствующее имя из переменной Names при каждом запуске на фазе агента

Поскольку вы можете получать ID для каждого запуска, вы можете получить соответствующее имя с ID по некоторым определенным правилам. Например, используйте условие if, чтобы получить правильное имя, или проанализируйте индекс ID и получите соответствующее имя и т. Д.

...