如何使用Release Management部署到远程数据中心

时间:2015-06-07 17:57:17

标签: deployment release-management continuous-deployment ms-release-management

我们在内部运行TFS和发布管理,我想将我的应用程序部署到远程数据中心。 访问是通过互联网,所以没有可用的Windows共享。 我正在使用vNext模板,而afaik RM似乎只支持通过Windows共享的unc路径。

如何使用版本管理将软件部署到此数据中心?

我正在研究这个解决方案: 在位于数据中心内的IIS上使用WebDav。 RM服务器和Target可以使用内置在窗口中的WebDav客户端,并通过unc路径访问它。

由于RM无法使用正确的凭据登录到webdav服务器,我还没有让这个工作正常工作。

已更新我的解决方案 这只是一个概念证明,并未经过生产测试。

  1. 设置可从RM服务器和目标服务器访问的WebDav站点
  2. 安装功能"桌面体验"在两台服务器上
  3. 制作以下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);
          }
        }
      }
    }
    
  4. 将其命名为" ReleaseManagementMonitor2.dll"

  5. 将其放入子文件夹至服务" ReleaseManagementMonitor"
  6. 将共享路径配置为以下解决方案。
  7. 不要过度使用现有的" ReleaseManagementMonitor2.dll"

    这是有效的原因是MEF。 ReleaseManagementMonitor服务尝试加载dll" ReleaseManagementMonitor2.dll"来自所有子文件夹。 此dll实现RM识别的服务接口。 它的运行"净使用"将凭据应用于运行该服务的会话,从而授予对其他无法访问的webdav服务器的访问权限。

    此解决方案已通过"Works on my machine"

    认证

4 个答案:

答案 0 :(得分:0)

尝试在本地服务器上使用Get-Content,然后在远程服务器上使用Set-Content传递文件内容;

可以将所有内容打包成某种存档。

答案 1 :(得分:0)

发布管理将VisualStudioRemoteDeployer.exe复制到目标服务器上的C:\ Windows \ DtlDownloads \ VisualStudioRemoteDeployer文件夹,然后使用robocopy将脚本从指定位置复制到目标服务器。

因此,您必须将目标服务器的权限授予脚本位置。

答案 2 :(得分:0)

RM只适用于UNC,你是对的。

您可以利用它来使您的方案有效 -
理论

  • 在RM域上创建一个可以复制丢弃的边界机器。
  • 然后,数据中心上运行的部署操作可以使用对该域具有访问权限的凭据从此边界计算机复制位。 (这些凭据由您在WPF控制台中提供)

如何运作

1. 在RM服务器域(例如D1)上有一台专用机器,用作边界机器。

2. 通过指定数据中心将使用的共享路径,将此计算机定义为RM中的边界计算机。转到WPF控制台中的设置选项卡,创建一个新变量 - {Key = RMSharedUNCPath,Value = \\ BoundaryMachine \ DropsLocation}。 RM现在知道您想将此机器用作边界机器。

3。确保您负责这些权限

  • RM Server应具有对\\ BoundaryMachine \ DropsLocation共享的写权限。
  • 将域D1的凭据传递给数据中心(域D2)中的目标计算机,该计算机可用于访问共享。

4。凭据可以在WPF控制台下传递,您必须再次在设置选项卡中定义以下两个配置变量。

  • Key = RMSharedUNCPathUser;值=域D1用户名
  • Key = RMSharedUNCPathPwd;值=上面定义的用户的密码。

enter image description here

PS - 变量名称区分大小写。

另外,要让RM知道您要使用SharedUNC机制,请检查RM服务器的相应复选框,并通过IP而不是DNS名称连接到它,因为它们必须位于不同的域中,即

enter image description here

答案 3 :(得分:-1)