我们在内部运行TFS和发布管理,我想将我的应用程序部署到远程数据中心。 访问是通过互联网,所以没有可用的Windows共享。 我正在使用vNext模板,而afaik RM似乎只支持通过Windows共享的unc路径。
如何使用版本管理将软件部署到此数据中心?
我正在研究这个解决方案: 在位于数据中心内的IIS上使用WebDav。 RM服务器和Target可以使用内置在窗口中的WebDav客户端,并通过unc路径访问它。
由于RM无法使用正确的凭据登录到webdav服务器,我还没有让这个工作正常工作。
已更新我的解决方案 这只是一个概念证明,并未经过生产测试。
制作以下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"
不要过度使用现有的" ReleaseManagementMonitor2.dll"
这是有效的原因是MEF。 ReleaseManagementMonitor服务尝试加载dll" ReleaseManagementMonitor2.dll"来自所有子文件夹。 此dll实现RM识别的服务接口。 它的运行"净使用"将凭据应用于运行该服务的会话,从而授予对其他无法访问的webdav服务器的访问权限。
此解决方案已通过"Works on my machine"
认证答案 0 :(得分:0)
尝试在本地服务器上使用Get-Content,然后在远程服务器上使用Set-Content传递文件内容;
可以将所有内容打包成某种存档。
答案 1 :(得分:0)
发布管理将VisualStudioRemoteDeployer.exe复制到目标服务器上的C:\ Windows \ DtlDownloads \ VisualStudioRemoteDeployer文件夹,然后使用robocopy将脚本从指定位置复制到目标服务器。
因此,您必须将目标服务器的权限授予脚本位置。
答案 2 :(得分:0)
RM只适用于UNC,你是对的。
您可以利用它来使您的方案有效 -
理论
如何运作
1. 在RM服务器域(例如D1)上有一台专用机器,用作边界机器。
2. 通过指定数据中心将使用的共享路径,将此计算机定义为RM中的边界计算机。转到WPF控制台中的设置选项卡,创建一个新变量 - {Key = RMSharedUNCPath,Value = \\ BoundaryMachine \ DropsLocation}。 RM现在知道您想将此机器用作边界机器。
3。确保您负责这些权限
4。凭据可以在WPF控制台下传递,您必须再次在设置选项卡中定义以下两个配置变量。
PS - 变量名称区分大小写。
另外,要让RM知道您要使用SharedUNC机制,请检查RM服务器的相应复选框,并通过IP而不是DNS名称连接到它,因为它们必须位于不同的域中,即
答案 3 :(得分:-1)