Есть ли другие способы добиться этого? Какова лучшая практика? Я не хочу поддерживать больше определений сборки, чем мне нужно.
Существуют разные способы достижения этого, но я не уверен, какой из них является наилучшим, все зависит от ваших требований или вкусы.
Простой метод *1007* похож на вашу мысль. Также необходимо создать новый конвейер сборки. Разница в том, что нам не нужно поддерживать это определение сборки.
Подробности:
- Добавить новый конвейер без дополнительных задач в этом конвейере и использовать фильтры
path
для вызвать соответствующие сборки (Api Client и проекты Shared Dto). - Добавить завершение сборки к исходному Azure конвейеру сборки Devops:
![enter image description here](https://i.stack.imgur.com/EgjJv.png)
Добавить пользовательское условие для шага, который создает 2 пакета Nuget на основе Build.Reason
, например:
and(succeeded(), eq(variables['Build.Reason'], 'BuildCompletion'))
Теперь шаги по созданию 2 пакетов Nuget only выполняются, когда изменения файла происходят из указанного c проекта. Конечно, ограничением этого решения является то, что, если у вас уже есть завершение сборки, оно не будет работать.
Если приведенный выше метод не тот, который вам нужен, мы можем вызвать REST API commitits чтобы получить информацию о коммите для каждой сборки:
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?changeCount=100&api-version=5.1
Мы могли бы найти изменения / путь в возвращенном теле:
"changes": [
{
"item": {
"gitObjectType": "blob",
"path": "/.gitattributes",
"url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/.gitattributes?versionType=Commit"
},
"changeType": "add"
},
{
"item": {
"gitObjectType": "blob",
"path": "/.gitignore",
"url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/.gitignore?versionType=Commit"
},
"changeType": "add"
},
{
"item": {
"gitObjectType": "tree",
"path": "/MyWebSite",
"isFolder": true,
"url": "https://dev.azure.com/fabrikam/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items/MyWebSite?versionType=Commit"
},
"changeType": "add"
},
Затем мы могли бы использовать скрипт powershell, чтобы пройти их пути, чтобы увидеть, включают ли они Api Client и проекты Shared Dto, если да, мы устанавливаем переменную со значением, добавляем условие на основе этого значения для шагов, которые создают 2 пакета Nuget.
Примечание: перед использованием API REST фиксирует , нам нужно использовать Commits - Get Commits , чтобы получить последний идентификатор фиксации:
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?$top=1&api-version=5.1
Надеюсь, это поможет.