Автоматизация IISRESET через подключение к удаленному рабочему столу после сборки TFS

Я хочу автоматизировать процесс, который вызывается после успешной сборки на TFS. Процесс отправит RDP на тестовый сервер, затем вызовет приложение C# на этом сервере и сбросит IIS на этом сервере. Каждый шаг будет возвращать результат, поэтому вопрос о том, вызывать ли следующий шаг или нет, основан на предыдущем шаге.

Есть несколько препятствий в его реализации. Ниже я хочу узнать, возможно ли это, и как это сделать.

1) Вызов процесса через сборку на TFS

В определении сборки есть опция для запуска автоматического теста. Я предполагаю, что этот процесс можно запустить, реализовав его в качестве теста.

2) RDP на удаленный сервер

Я нашел ссылки ниже, которые могут быть решением

Process rdcProcess = new Process();
rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe");
rdcProcess.StartInfo.Arguments = "/generic:TERMSRV/192.168.0.217 /user:" + "username" +  " /pass:" + "password";
rdcProcess.Start();

rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\mstsc.exe");
rdcProcess.StartInfo.Arguments = "/v " + "192.168.0.217"; // ip or name of computer to connect
rdcProcess.Start();

Запустите mstsc.exe с указанным именем пользователя и паролем

Автоматизация подключения к удаленному рабочему столу

3) IISReset

Я думаю, что это должно быть просто вызватьIISRESETпосле RDP, но проблема в том, КАК зафиксировать результат выполнения IISRESET.

Инструменты, которые могут подойти:

1) Powershell - я не знаю много о Powershell, но готов учиться, если потребуется

2) C#

Мой вопрос заключается в том, что, как это реализовать, любой пример кода и идея будут очень благодарны.

5 ответов

Решение

Проверьте мой ответ здесь, который несколько связан: Ответ

Если у пользователя, который запускает службу TFSBuild на сервере сборки, достаточно прав на тестовом сервере, вы можете использовать psexec или powershell для удаленного запуска ваших команд. Прочитайте ссылки ниже:

PSEXEC

Команды PowerShell Remote

Нет встроенного действия / процесса, который мог бы помочь вам запускать сценарии на удаленных компьютерах в рабочем процессе сборки TFS.

Шаг 1 для вас - определить, как вы собираетесь запускать сценарии на удаленном компьютере, как уже упоминалось выше, вы можете использовать PSEXEC или Powershell (хотя запуск PowerShell на удаленных компьютерах может быть немного сложнее в настройке).

Шаг 2, напишите реальные сценарии для выполнения работы, остановите службы, установите MSI и т. Д.

Шаг 3. Отредактируйте текущее определение сборки - создайте новое пользовательское действие или используйте действие InvokeProcess из определения сборки, чтобы вызвать сценарий, созданный на шаге 2. Действие InvokeProcess

Возможно, вам лучше использовать Lab Build для запуска сценариев как части среды на целевом компьютере. Он может запускать любой PowerShell на этой машине, а также развертывать и выполнять приложения....

В прошлом я использовал Psexec для запуска команд на удаленном сервере, и когда бы нам ни понадобилось управлять потоком результатов этой команды, мы просто передавали консоль в общую папку и проверяли наш флаг успеха.

Я не уверен, что TFS может выполнять команды таким образом, но мы реализовали это на hudson/jenkins.

Это не ответит на ваш вопрос напрямую, но может предложить лучший путь вперед

Пример: psexec.exe \remoteserver "iisreset > h:\iisreset.log"

Затем запустите grep или аналогичный файл iisreset.log с вашим флагом успеха в качестве условия для запуска следующего шага.

Вопрос: КАК захватить результат выполнения IISRESET

Я верю старомодным образом, надеюсь, это то, что вы ищете

c:> IISRESET >> C:\temp.log

Вы можете использовать выше, либо из CMD или PowerShell

В большинстве случаев вам не нужно запускать iisreset

если вы хотите обновить приложение asp.net, попробуйте поместить app_offline.htm в папку приложения, оно остановит приложение и файлы приложения будут разблокированы

после обновления приложение будет перезапущено автоматически, или вы можете "коснуться" web.config для принудительного перезапуска

Другие вопросы по тегам