Удаленное развертывание в .NET Box

В течение многих лет я мог выполнять сборку с использованием системы непрерывной сборки, такой как Jenkins, а затем удаленно приложения на различные серверы Unix. Я могу использовать команды ssh и scp для выполнения своих приказов.

Теперь у меня есть сборка .NET, которую я делаю. Я выполнил сборку с помощью Jenkins и теперь хотел бы выполнить развертывание на удаленном сервере .NET. Мне нужно закрыть приложение, скопировать файлы и перезапустить приложение. Мне нужно иметь возможность делать это удаленно и с помощью инструментов командной строки (без инструментов с графическим интерфейсом). Я нахожусь на нескольких машинах, которые заблокированы, и не могу волей-неволей развертывать что-то, особенно на производственных машинах.

Есть ли механизм, который позволит мне удаленно выключить сервер, развернуть новый набор файлов и перезапустить приложение?

БОНУСНЫЙ ВОПРОС

Я понимаю, что файл *.cab чем-то похож на файл Java *.jar. То есть вы можете развернуть один файл *.cab на сервере, и сервер будет обращаться с ним так, как будто это набор файлов в каталоге.

  • Это правильно? Если это так, я хотел бы развернуть что-то с помощью CAB-файла.
  • В моей сборке есть файл webapp.config, который отличается для каждого сервера. Я бы предпочел создать CAB-файл, который не содержит файла webapp.config, таким образом, CAB-файл, который у меня есть, можно развернуть на каждой машине без его изменения (необходимо изменить только файл webapp.config).

Спасибо


Приложение

Я просто не могу победить...

У меня есть сборка на машине 02, и мне нужно развернуть ее на машине 06. Machine06 находится в DMZ, поэтому я не могу добавить на него пользователя домена. Я могу создавать только локальные учетные записи.

С помощью sc я могу получить доступ к удаленным системам, но учетная запись, из которой я запускаю sc, также должна существовать в удаленной системе. Поскольку я не могу создать учетную запись домена на машине 06 и не могу добавить локальную учетную запись компьютера в другую систему Windows (т. е. сделать машину 06\пользователя администратором и на машине 02), я не могу использовать sc.

Я попробовал команды lp от Sysinternals. Это позволяет мне указать имя пользователя и пароль (которые, как я полагаю, предназначены для другой системы. Однако я получаю следующую ошибку:

C:\Windows\system32>pslist \\machine02 -user remuser02 -password Swordfish

pslist v1.29 - Sysinternals PsList
Copyright (C) 2000-2009 Mark Russinovich
Sysinternals

Cannot connect to remote registry on MACHINE02:
Access is denied.
Failed to take process snapshot on MACHINE02.
Make sure that the Remote Registry service is running on the remote system, 
that you havefirewall ports allow RPC access, and your account has read
access the following key on the remote system:
    HKLM\Software\Microsoft\Windows NT\CurrentVersion\Perflib


C:\Windows\system32>

Поскольку этот пользователь является администратором на машине 02, я уверен, что у него есть доступ для чтения к разделу реестра Windows, и я проверил, включен ли удаленный доступ к реестру. Я подозреваю, что маршрутизатор блокирует вызовы RPC.

Итак, sc отсутствует, так как я не могу указать учетную запись для использования. Инструменты Sysinternals PS отсутствуют. Я не могу добавить sshd на сервер.


person David W.    schedule 17.06.2011    source источник
comment
просто интересно, почему вы не используете powershell?   -  person Matt    schedule 22.06.2011
comment
@Matt: я действительно не знаю powershell. Позволит ли мне Powershell запустить команду в удаленной системе? Что делать, если на удаленной системе нет Powershell? Или Powershell сейчас включен в системах Windows?   -  person David W.    schedule 22.06.2011
comment
@David-W, да, PowerShell — это инструмент для написания сценариев для Windows. В v1 есть несколько команд, которые могут использовать удаленные вызовы (параметр computername в сервисе get ниже), а в v2 есть удаленное взаимодействие (аналогично ssh). Какая ОС у вас стоит на боксах?   -  person Matt    schedule 22.06.2011
comment
вы сможете попробовать powershell со своего сервера сборки, набрав powershell (без кавычек) в поле запуска или в командной строке.   -  person Matt    schedule 22.06.2011
comment
Только что проверил, Powershell на серверах. В справке про удаленные команды ничего нет, но нашел информацию в интернете. Я бы сказал, что вы ответили на мой вопрос, но вы не дали официального ответа. Трудно пометить это как принятое. В любом случае, мне нужно проверить это, прежде чем я смогу что-то сделать. Спасибо.   -  person David W.    schedule 23.06.2011
comment
чувак, а как насчет ответа ниже от меня? на самом деле я дал вам команды для использования, и люди проголосовали за это... :-s   -  person Matt    schedule 23.06.2011


Ответы (4)


При развертывании веб-приложений раньше я использовал vbscript и powershell, а также старый добрый xcopy (хотя я согласен, что robocopy, вероятно, является лучшей заменой копирования).

Итак, просматривая требования - я думаю, это то, что вы хотите сделать (это должно быть сделано из командной строки PowerShell):

get-service iisadmin -ComputerName TARGETMACHINE | Stop-Service -force

xcopy source dest

get-service iisadmin -ComputerName TARGETMACHINE | Start-Service

Я бы не использовал *.cab, если вам не нужно сжатие для передачи файлов, тогда я бы использовал файл *.zip. Я не верю, что между ними есть какая-то реальная разница, но обычно файлы *.cab используются в развертываниях msi.

Лично я, если у вас нет кого-то, кто хорошо понимает управление версиями MSI, я не думаю, что MSI следует использовать для развертывания файлов на веб-сервере. И даже если кто-то это понял, мне все равно нравится, что это полезно только для отслеживания того, что установлено, где это может быть достигнуто многими способами, избегая автообновления и т. Д.

Поскольку это IIS, вы можете удалить временные файлы asp.net, пока веб-сайт не работает.

Я сделал предположение (из тегов), что это веб-приложение, следовательно, iisadmin в коде. Это будет одинаково работать с любым сервисом.

ХТХ, Мэтт

person Matt    schedule 19.06.2011

Вы можете использовать netsvc.exe для остановки и запуска службы IIS на удаленном компьютере.

SYNTAX: NETSVC servicename \\computername /start  (or /stop)
person Patrick McDonald    schedule 19.06.2011
comment
Спасибо. Это именно то, что мне было нужно. Что касается передачи файлов, я могу подключить общий диск и удалить / скопировать то, что мне нужно. - person David W.; 20.06.2011
comment
Ой! Не похоже, что netsvc доступен для Windows Server 2008 или Windows Server 2003. Однако вы также можете использовать sc, чтобы сделать то же самое. Одна из проблем, с которыми я столкнулся в Microsoft, — это смена инструментов для вас. cabarc больше нет. Вы должны использовать makecab, который имеет совершенно другой синтаксис и не работает с задачей Ant <cab>. - person David W.; 20.06.2011
comment
Невозможно использовать команду sc. У меня два разных логина на обеих машинах, и sc просто предполагает одинаковые логи. Я должен использовать psTools. - person David W.; 20.06.2011
comment
Использует runas (technet.microsoft.com/en-us/library/bb490994. aspx) возможность запустить sc от имени другого пользователя? - person Patrick McDonald; 21.06.2011
comment
вы также можете посмотреть psexec, также из sysinternals (technet.microsoft.com/en-us /sysinternals/bb897553) - person Patrick McDonald; 21.06.2011
comment
Эта статья кажется довольно исчерпывающей: windowsitpro.com/article/remote-computing/psexec - person Patrick McDonald; 21.06.2011

Я вижу, вы уже приняли ответ, но я подумал, что добавлю это, потому что, возможно, это полезно кому-то еще:

Вы также можете использовать PsTools. Он позволяет удаленно выполнять команды, останавливать и запускать службы, копировать файлы и т. д. (установка на целевом хосте не требуется).

person mydoghasworms    schedule 20.06.2011
comment
Выглядит отлично, sysinternals установлен, но есть так много функций, за которыми трудно уследить :) - person Patrick McDonald; 20.06.2011
comment
Оказывается, netsvc больше не доступен для серверов Windows 2008 и 2003. В итоге я использовал sc, который теперь, похоже, сочетает в себе как старые команды sc (которые могли работать только на локальных серверах), так и команды netsvc. - person David W.; 20.06.2011
comment
Ау! PsTools позволяет мне подключаться удаленно, и я могу передать имя пользователя и пароль в другую систему, но теперь мне говорят, что удаленный сервер реестра должен работать в другой системе. Дратс и Дарн. - person David W.; 20.06.2011
comment
Windows: Вы просто не можете победить :-D Это очень расстраивает. Я полагаю, что, будучи производственными серверами, вам будет нелегко убедить администраторов разрешить включение сервера реестра, верно? - person mydoghasworms; 22.06.2011

Возможно, вы хотите попробовать версию SSH-сервера для Windows? Например, http://mobassh.mobatek.net/. Как обычно, бесплатная версия имеет меньше функций, но если вы можете выполнять команды удаленно, вы можете выполнять свои задачи по развертыванию.

person mydoghasworms    schedule 17.06.2011
comment
SSH отключен. Мне нужно запустить SSHD на всех серверах, чтобы заставить это работать, и я не могу коснуться тех производственных серверов, на которые мне нужно выполнить развертывание. Я надеюсь, что есть какой-то способ удаленного общения с сервером ISS, чтобы остановить и запустить его. Я думаю, что смогу использовать net use для монтирования общего ресурса Windows и копирования файлов таким образом. Проблема заключается в управлении серверами ISS из удаленной системы. - person David W.; 18.06.2011