Как изменить переменные конвейера для использования в следующей сборке в DevOps Azure - PullRequest
3 голосов
/ 18 апреля 2019

У меня следующий случай: Я создал Azure DevOps Pipeline с переменной Pipeline, скажем, «переменная A». Значение переменной A равно 1. Во время сборки я изменяю значение переменной A на 2.

Когда сборка запускается во второй раз, я хочу получить значение этих «переменных A», но это обратно 1, но я хочу, чтобы это значение было 2, потому что в предыдущей сборке я установил значение «переменной A» равным 2 .

Вот методы, которые я попробовал безуспешно:

Метод 1:

Write-Host "##vso[task.setvariable variable=A;]2"

Метод 2:

$env:A = 2

Единственное, что работает, но я не думаю, что это правильный путь, это получить полное определение сборки через остальные API и вернуть его обратно со значением измененной переменной.

Есть ли другое решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Как изменить переменные конвейера для использования в следующей сборке в DevOps Azure

Боюсь, вы должны использовать остальные API, чтобы изменить значение переменных этого конвейера.

Это потому, что когда вы используете скрипт `" ## vso [task.setvariable variable = testvar;] testvalue "для его перезаписи, значение перезаписи работает только для текущего конвейера сборки .

Когда вы снова используете команду build, она все равно будет извлекать значение из значения переменной конвейера.

Итак, нам нужно обновить значение этих переменных на веб-портале.Затем нам нужно использовать API REST ( Definitions - Update ), чтобы обновить значение переменной определения конвейера сборки из задачи сборки:

Аналогичный поток: Как изменитьПеременная определения выпуска DevOps Azure из задачи выпуска?

Примечание. Измените API на определения сборки:

PUT https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0

Надеюсь, это поможет.

0 голосов
/ 18 апреля 2019

Если вы специально смотрите на возрастающее число, то вы также можете использовать счетчики. Они работают только в определениях сборки на основе YAML.

Формат выглядит следующим образом:

Вы можете использовать любое из поддерживаемых выражений для установки переменной. Вот пример установки переменной, которая будет действовать как счетчик, который начинается с 100, увеличивается на 1 при каждом запуске и сбрасывается до 100 каждый день.

YAML

jobs:
- job:
  variables:
    a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
  steps:
    - bash: echo $(a)

Для получения дополнительной информации о счетчиках и других выражениях, см. Выражения .

Счетчик сохраняется для конвейера и основан на префиксе, указанном в выражении счетчика. Вышеприведенное выражение использует yyyymmdd для генерации префикса, который уникален каждый день.


Для определений сборки, основанных на пользовательском интерфейсе, тогда действительно будет полезно использовать API REST для обновления всего определения, хотя действительно сложно обойти все возможности, касающиеся паралелизма.

...