Если я правильно понимаю ваш запрос, вам нужно запустить конвейер сборки только для тех запросов извлечения, которые отвечают определенным требованиям, например, связаны с рабочими элементами, помеченными определенными словами. Хотя я уверен, что нет готового решения этой проблемы, я думаю, что этого можно достичь с помощью концепции Условия и REST API .
Я бы выполнил следующие действия:
Самым первым шагом сборки в задании на сборку должен быть сценарий, чтобы выяснить, связан ли данный конкретный запрос на извлечение с целевыми рабочими элементами. ,Это может быть этап сборки PowerShell, который должен:
- Получить идентификатор запроса на извлечение - он доступен в виде предопределенной системной переменной с именем
System.PullRequest.PullRequestId
- Выполните вызов API REST для получения идентификаторов рабочих элементов , связанных с этим запросом извлечения. Он вернет коллекцию из
{id, url}
пар, где id
- это идентификатор рассматриваемого рабочего элемента - . Для каждого найденного идентификатора рабочего элемента выполните вызов API REST, чтобы получить подробную информацию орабочий элемент , в частности, вас интересует свойство
System.Tags
ответа - . Опять же, для каждого рабочего элемента проанализируйте значение свойства
System.Tags
, чтобы выяснить, содержит ли оно необходимоетеги - Если хотя бы один связанный рабочий элемент содержит интересующие вас теги, установите для переменной флага с именем ie
ShouldRunTheRestOfThePipeline
значение true
Обусловить дальнейшие шаги задания с помощью пользовательского условия . Вы можете прочитать больше о синтаксисе выражения здесь . В частности, в разделе Q & A описывается, как использовать переменную, заданную на предыдущем шаге сборки, в условии следующего шага
Теперь, что касается ваших заметок о взятии только измененныхфайлы. Фактически, природа запроса на удаление состоит в том, чтобы сохранить измененные файлы по сравнению с целевой ветвью, для которой они созданы. Таким образом, вам не нужно выполнять никаких дополнительных действий с git diff
- запрос на получение уже содержит все, что вам нужно.
Наконец, я бы посоветовал вам пересмотреть требования этой настройки, потому что это звучит какнемного неестественно для меня. Есть и другие варианты, как не запускать конвейер. Например, это может быть решено на основе на основе имени ветви / тега , доступны как опции include
, так и exclude
. Или вы можете указать пути к файлам для включения или исключения, например, никогда не запускать конвейер, если были изменены только docs/*
. Поддерживается подстановочный синтаксис , что делает этот инструмент еще более гибким.
Надеюсь, это поможет вам найти подходящее решение для вашего конкретного сценария.