Azure Pipelines, как фильтруются артефакты на этапе для выпусков «Только вручную» - PullRequest
1 голос
/ 15 июня 2019

Допустим, у меня есть эти 3 стадии: Dev, QC, Prod.

Мои требования:

  1. Могут быть развернуты артефакты только из определенных веток (release / *)QC / Prod
  2. Артефакты из всех веток могут быть развернуты в Dev

Я могу достичь того, что хочу, используя Фильтры артефактов для "После этапа" запускаемых релизов, ноМне нужно это только для «Вручную».

Существует ли обходной путь, который позволит мне контролировать / фильтровать, какие артефакты доступны для развертывания для определенных этапов / сред?

enter image description here

По сути, мне нужен эквивалент DevOps Azure Каналы осьминога .

Обновление
Я думаю, что я близок крешение.
В «Условиях перед развертыванием» я могу добавить новый Deployment Gate, который выполняет вызов API Rest.например, URL suffix=/Release/releases/76

Теперь мне просто нужно правильно проанализировать ApiResponse, потому что нижеприведенные критерии успеха не работают

eq(root['artifacts[0].definitionReference.branch.id'], 'refs/heads/master')

Оценка выражения 'eq (root ['Артефакты [0] .definitionReference.branch.id '],' refs /head / master ')' завершились неудачей.

Ответы [ 2 ]

2 голосов
/ 16 июня 2019

Как вы сказали, вы можете сделать это, используя ворота развертывания на своих этапах.

  1. Создайте новое общее подключение к сервису из «Настройки проекта» -> «Конвейеры» -> «Сервисные подключения».
    Для сервисного URL что-то вроде https://vsrm.dev.azure.com/{OrgName}/{ProjectName}/_apis

  2. На вашем этапе откройте условия перед развертыванием

  3. Включить опцию Gates.

  4. Добавьте новый вентиль Invoke REST API и установите задержку перед оценкой на 0 минут.
    4.1 Установите тип подключения Generic.
    4.2 Выберите сервисное соединение, которое вы создали на шаге 1.
    4.3 Установите метод GET.
    4.4 Установите суффикс URL на /Release/releases/$(Release.ReleaseId)
    4.5 В области «Дополнительно» установите для события завершения значение ApiResponse.
    4.6 В области «Дополнительно» установите критерии успеха (или начинается с)
    eq(root['artifacts'][0]['definitionReference']['branch']['id'],'refs/heads/master')

Теперь, если вы попытаетесь развернуть артефакт не из главной ветви, развертывание завершится неудачей

1 голос
/ 16 июня 2019

Существует обходной путь:

На этапах QC / Prod добавьте пользовательское условие, что задание будет выполняться только в том случае, если исходная ветвь артефактов равна release/*:

startsWith(variables['Release.Artifacts.{Artifacts-Alias}.SourceBranch'], 'refs/heads/release')

enter image description here

Теперь, когда вы вручную запускаете этапы QC / Prod и артефакты, не пришедшие из выпуска, задание не будет выполнено:

enter image description here

...