Запуск сценариев powershell при создании / обновлении / удалении веток Git в TFS - PullRequest
2 голосов
/ 15 мая 2019

У меня есть несколько репозиториев Git на сервере TFS2017. Цель состоит в том, чтобы реализовать метод развертывания сети каждый раз, когда в этом git-репозитории создается ветвь, обновлять сеть при обновлении ветви и удалять сеть при удалении ветви.

Я для этого использовал скрипт powershell, и он уже реализован. Теперь проблема состоит в том, чтобы выполнять этот скрипт каждый раз, когда ветка создается / обновляется / удаляется.

Я пытался использовать для этого события Git Hooks на стороне сервера, но потом понял, что TFS не реализует эти ловушки.

Я думал об использовании настройки сборки CI для решения проблемы создания / обновления, но потом понял, что создание ветви с панели управления сервером не вызовет сборку CI.

Поэтому я ищу решение проблемы создания / удаления.

Я читал об интегрированных сервисах в TFS. Глядя на список, единственное, что я считаю полезным для этой проблемы, - это отправка HTTP-запроса в службу (я бы сделал службу для выполнения моих сценариев), но затем я не смог найти подходящий триггер в раскрывающемся меню для создание / удаление веток ...

Я немного растерялся, любое предложение будет оценено.

1 Ответ

0 голосов
/ 21 мая 2019

После некоторого поиска обходного пути я нашел решение в два этапа.

С одной стороны, я решил проблему создания и обновления веб-сайта с помощью сборки TI CI, в которой есть задача, которая запускает скрипт PowerShell. Этот сценарий PowerShell использует Invoke-Command для выполнения команд на удаленном компьютере с сервером IIS, на котором я планирую публиковать эти веб-сайты. Вы можете найти больше информации об этом удаленном выполнении PowerShell здесь . Я использовал модуль WebAdminitration для Powershell для управления сервером IIS.

Основная проблема, с которой мне пришлось столкнуться при реализации этого подхода, заключалась в том, чтобы найти правильный способ запуска сборки TI CI. Решение, которое я нашел, состояло в том, чтобы настроить триггер CI очень открытым способом (см. Рисунок ниже). Я сделал это, потому что моя команда разработчиков может создать любое количество ветвей функций, и поэтому я не могу вручную добавить CI в каждую ветку. Я могу использовать «исключающую ветвь», чтобы предотвратить запуск этой сборки CI моими основными ветвями. Как видите, у вас есть много возможностей для игры.

enter image description here

С другой стороны, я не мог использовать 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.

Я на самом деле провожу какой-то тест, но сейчас это выглядит как правильный подход к моей проблеме. Если это не сработает, я опубликую следующий эксперимент.

...