Удаленное развертывание в .NET Box - PullRequest
2 голосов
/ 18 июня 2011

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

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

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

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

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

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

Спасибо


Добавление

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

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

С помощью sc я могу получить доступ к удаленным системам, но учетная запись, с которой я работаю sc, также должна существовать в удаленной системе. Поскольку я не могу создать учетную запись домена на machine06 и не могу добавить локальную учетную запись компьютера в другую систему Windows (т. Е. Сделать machine06 \ user администратором на machine02), я не могу использовать 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>

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

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

Ответы [ 4 ]

2 голосов
/ 19 июня 2011

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

НТН, Matt

1 голос
/ 20 июня 2011

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

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

1 голос
/ 19 июня 2011

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

SYNTAX: NETSVC servicename \\computername /start  (or /stop)
0 голосов
/ 18 июня 2011

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

...