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

Posted

技术标签:

【中文标题】如何使用 Release Management 部署到远程数据中心【英文标题】:How to deploy with Release Management to remote datacenter 【发布时间】:2015-06-07 17:57:16 【问题描述】:

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

如何使用 Release Management 将软件部署到此数据中心?

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

我还没有让这个工作,因为 RM 不会使用正确的凭据登录到 webdav 服务器。

更新了我的解决方案 这只是概念验证,未经生产测试。

    设置可从 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”

    将其放在服务“ReleaseManagementMonitor”的子文件夹中 将共享路径配置为以下解决方案状态。

不要覆盖现有的“ReleaseManagementMonitor2.dll”

这行得通的原因是 MEF。 ReleaseManagementMonitor 服务尝试从所有子文件夹加载 dll“ReleaseManagementMonitor2.dll”。 此 dll 实现了 RM 识别的服务接口。 它运行“网络使用”以将凭据应用于运行服务的会话,从而授予对否则无法访问的 webdav 服务器的访问权限。

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

【问题讨论】:

【参考方案1】:

RM 只适用于 UNC,你说得对。

您可以利用它来使您的场景发挥作用 - 理论上

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

这是如何工作的1. 在 RM 服务器域(例如 D1)上有一台专用机器,将用作边界机器。 2. 通过指定将由您的数据中心使用的共享路径,将此机器定义为 RM 中的边界机器。转到 WPF 控制台中的设置选项卡,创建一个新变量 - Key = RMSharedUNCPath, Value = \\BoundaryMachine\DropsLocation 。 RM 现在知道您想将此机器用作您的边界机器。3.确保您处理好这些权限

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

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

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

PS - 变量名区分大小写。

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

【讨论】:

更多关于使用不受信任域的详细信息 - blogs.msdn.com/b/biprasad/archive/2015/02/03/… 和 blogs.msdn.com/b/visualstudioalm/archive/2013/12/12/… 这正是我正在做的 atm,我在 webdav 服务器上使用它,但它是一个非常hacky 的解决方案。如果我只能使用 sftp 或类似的东西... 你不能用这样的东西来下载目标机器上的位吗?social.technet.microsoft.com/Forums/windowsserver/en-US/… 我同意这有点 hacky,但是 RM 中没有一流的支持来做你想做的事情。 我很乐意,但由于它是我遇到问题的脚本副本,因此使用 sftp 的代码永远不会到达目标机器。【参考方案2】:

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

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

【讨论】:

你能举个例子吗?【参考方案3】:

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

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

【讨论】:

这无助于将文件放到远程机器上【参考方案4】:

发布管理更新 4 支持“构建存储在 TFS 服务器上的 drop”

http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/11/what-s-new-in-release-management-for-vs-2013-update-4.aspx

【讨论】:

以上是关于如何使用 Release Management 部署到远程数据中心的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Release Management 2013 连接到 TFS Server 2013

在以下任何来源中均未找到插件[id:'io.spring.dependency-management',版本:'1.0.5.RELEASE',apply:false]:

如何使用PYTHON 向arcmap中加载shapefile 不是即时python窗口

有人知道如何使用 Microsoft.SqlServer.Management.Smo.Table 异步创建表吗?

如何高效率协同工作-。工具

如何使用 Windows 和 SQL 身份验证使用 SQL Server Management Studio 连接到 SQL Server