После некоторого поиска обходного пути я нашел решение в два этапа.
С одной стороны, я решил проблему создания и обновления веб-сайта с помощью сборки TI CI, в которой есть задача, которая запускает скрипт PowerShell. Этот сценарий PowerShell использует Invoke-Command для выполнения команд на удаленном компьютере с сервером IIS, на котором я планирую публиковать эти веб-сайты. Вы можете найти больше информации об этом удаленном выполнении PowerShell здесь . Я использовал модуль WebAdminitration для Powershell для управления сервером IIS.
Основная проблема, с которой мне пришлось столкнуться при реализации этого подхода, заключалась в том, чтобы найти правильный способ запуска сборки TI CI. Решение, которое я нашел, состояло в том, чтобы настроить триггер CI очень открытым способом (см. Рисунок ниже). Я сделал это, потому что моя команда разработчиков может создать любое количество ветвей функций, и поэтому я не могу вручную добавить CI в каждую ветку. Я могу использовать «исключающую ветвь», чтобы предотвратить запуск этой сборки CI моими основными ветвями. Как видите, у вас есть много возможностей для игры.
С другой стороны, я не мог использовать CI Build TFS для удаления веб-сайтов при удалении ветви, потому что у TFS нет события, которое можно прослушать, чтобы обнаружить, когда это происходит. Поэтому мне пришлось искать другое решение.
Подумав, у меня возникла идея создать службу Windows для периодической проверки веток Git и сравнения их с опубликованными веб-страницами на сервере IIS. Мне просто нужно было добавить эту службу на компьютер, на котором размещен IIS, и дать процессу достаточно привилегий для изменения папки, содержащей файлы конфигурации IIS (C: \ Windows \ System32 \ inetsrv \ config). Мне также нужно было иметь правильные учетные данные для TFS в диспетчере учетных данных Windows.
Я использовал библиотеку Microsoft.Web.Administration для управления IIS и библиотеками Microsoft.VisualStudio.Services.Common , Microsoft.TeamFoundation.SourceControl.WebApi и Microsoft.VisualStudio.Services.WebApi для связи с Git-репозиторием TFS.
Я на самом деле провожу какой-то тест, но сейчас это выглядит как правильный подход к моей проблеме. Если это не сработает, я опубликую следующий эксперимент.