Как выполнить развертывание с помощью Release Management в удаленном центре обработки данных
Мы запускаем TFS и Release Management локально, и я хочу развернуть свои приложения в удаленном центре обработки данных. Доступ осуществляется через Интернет, поэтому нет доступных общих окон. Я использую шаблоны vNext, и afaik RM, кажется, поддерживает только пути unc через общие папки Windows.
Как использовать Release Management для развертывания программного обеспечения в этом центре обработки данных?
Я работаю над этим решением: используйте WebDav на IIS, расположенном внутри центра обработки данных. Сервер RM и Target могут использовать встроенный в Windows клиент WebDav и обращаться к нему по unc-пути.
Я еще не получил это работать, так как RM не будет использовать правильные учетные данные для входа на сервер webdav.
Обновлено с помощью моего решения. Это всего лишь подтверждение концепции, и она не проверена на производстве.
- Настройте сайт WebDav, доступный как с сервера RM, так и с целевого сервера.
- Установите функцию "Рабочий стол" на обоих серверах
Сделайте следующую DLL
using System; using System.ComponentModel.Composition; using System.Diagnostics; using System.IO; using Microsoft.TeamFoundation.Release.Common.Helpers; using Microsoft.TeamFoundation.Release.Composition.Definitions; using Microsoft.TeamFoundation.Release.Composition.Services; namespace DoTheNetUse { [PartCreationPolicy(CreationPolicy.Shared)] [Export(typeof(IThreadSafeService))] public class DoTheNetUse : BaseThreadSafeService { public DoTheNetUse() : base("DoTheNetUse") {} protected override void DoAction() { Logger.WriteInformation("DoAction: [DoTheNetUse]"); try { Logger.WriteInformation("# DoTheNetUse.Start #"); Logger.WriteInformation("{0}, {1}", Environment.UserDomainName, Environment.UserName); { Logger.WriteInformation("Net use std"); var si = new ProcessStartInfo("cmd.exe", @"/c ""net use \\sharedwebdavserver.somewhere\DavWWWRoot\ /user:webdavuser webdavuserpassword"""); si.UseShellExecute = false; si.RedirectStandardOutput = true; si.RedirectStandardError = true; var p = Process.Start(si); p.WaitForExit(); Logger.WriteInformation("Net use output std:" + p.StandardOutput.ReadToEnd()); Logger.WriteInformation("Net use output err:" + p.StandardError.ReadToEnd()); } //########################################################## Logger.WriteInformation("# Done #"); } catch (Exception e) { Logger.WriteError(e); } } } }
Назовите его "ReleaseManagementMonitor2.dll"
- Поместите его в подпапку к сервису "ReleaseManagementMonitor"
- Настройте общий путь в соответствии с приведенным ниже решением.
НЕ ПЕРЕЗАПИШИТЕ СУЩЕСТВУЮЩИЙ "ReleaseManagementMonitor2.dll"
Причиной этого является MEF. Служба ReleaseManagementMonitor пытается загрузить dll "ReleaseManagementMonitor2.dll" из всех подпапок. Эта dll реализует интерфейс службы, который распознает RM. Он запускает "net use" для применения учетных данных к сеансу, в котором работает служба, и тем самым предоставляет доступ к недоступному в противном случае серверу webdav.
Это решение сертифицировано "Работает на моей машине"
4 ответа
RM работает только с UNC, вы правы в этом.
Вы можете использовать это, чтобы ваш сценарий работал -
Теоретически
- Создайте пограничный компьютер в домене RM, куда можно скопировать ваши дропы.
- Действие развертывания, выполняемое в вашем центре данных, может затем скопировать биты с этого граничного компьютера, используя учетные данные, которые имеют доступ в этом домене. (Эти учетные данные предоставлены вами в консоли WPF)
Как это работает
1. Создайте выделенный компьютер в домене сервера RM (скажем, D1), который будет использоваться в качестве пограничного компьютера.
2. Определите этот компьютер как пограничный в RM, указав общий путь, который будет использоваться вашим центром обработки данных. Перейдите на вкладку настроек в консоли WPF и создайте новую переменную - { Key = RMSharedUNCPath, Value = \\BoundaryMachine\DropsLocation }. Теперь RM понимает, что вы хотите использовать эту машину в качестве пограничной машины.
3. Убедитесь, что вы заботитесь об этих разрешениях
- Сервер RM должен иметь разрешения на запись в общую папку \\ BoundaryMachine \ DropsLocation.
- Передайте учетные данные домена D1 целевому компьютеру в центре обработки данных (домен D2), который можно использовать для доступа к общему ресурсу.
4. Учетные данные могут передаваться из консоли WPF, вам нужно будет снова определить следующие две переменные конфигурации на вкладке настроек.
- Ключ = RMSharedUNCPathUser; Значение = имя домена D1 пользователя
- Ключ = RMSharedUNCPathPwd; Значение = пароль для пользователя, определенного выше.
PS - Имена переменных чувствительны к регистру.
Кроме того, чтобы сообщить RM о том, что вы хотите использовать механизм SharedUNC, установите соответствующий флажок для сервера RM и подключитесь к нему по IP, а не по имени DNS, поскольку они должны находиться в разных доменах, т.е.
Управление выпуском копирует VisualStudioRemoteDeployer.exe в папку C:\Windows\DtlDownloads\VisualStudioRemoteDeployer на целевом сервере, а затем копирует сценарии из указанного расположения на целевой сервер с помощью robocopy.
Таким образом, вы должны дать разрешения от вашего целевого сервера к местоположению ваших скриптов.
Попробуйте использовать Get-Content на локальном сервере, а затем Set-Content на удаленном сервере, передавая содержимое файла;
Могли бы упаковать все в какой-нибудь архив.
Release Management update 4 поддерживает функцию "Сборка дропов, хранящихся на серверах TFS".