【问题标题】:Pull deployment in Windows environmentWindows 环境拉取部署
【发布时间】:2010-08-02 11:27:17
【问题描述】:

我正在寻找一种方法来设置拉式部署,与 Windows 下的传统推送部署模型相反。

最佳情况是:

  • 将文件部署到主服务器
  • 子服务器将检查主服务器是否在给定时间或时间间隔有更新。
  • 如果主服务器包含更新,那么它将下载更新和/或执行脚本(类似于 nant?)

解决方案需要尽可能轻巧,并且必须在 Windows 环境下运行。

我查看了Chef 和SmartFrog,但不适合这种特殊情况。

编辑:部署了多个软件。这些是数据库脚本、Windows 服务和网站。每个孩子都有自己独特的脚本,因为它的要求和身份验证细节与其他孩子不同。

编辑 2: 到目前为止,人们已经提出了很好的答案,但最终的解决方案确实需要安全、内部运行并且同时发生。这是由于合规性、行业法规和版本问题(例如,数据库服务器与服务不同步)。我想到的最终解决方案类似于主服务器上的 FPT 服务器和子服务器上运行的 Nant 以执行安装例程(启动、停止服务、安装 sql 脚本、记录安装)。这是目前可用的最接近的东西,但并不理想,因为 nant 以推送为基础工作(仅在某人或程序(例如 Cruisecontrol)运行脚本时执行)。我确信必须有一个解决方案来为 Windows 进行正确的 PULL 部署。如果您可以同时跨多台服务器进行部署,那么 Linux 上的 Windows 更新和 APT 就是拉式部署的绝佳示例。

【问题讨论】:

  • 子服务器和主服务器分别是哪些 Windows 版本?
  • 它们都是相同的版本——我们暂存的 Server 2008 标准,在我们的生产站点中是 Server 2008 R2 标准。
  • 您希望它安全但您使用 FTP?我读对了吗?
  • 是的,这是正确的,因为可以轻松地将 FTP 服务器设置为只能由服务器访问,而不能通过以太网连接访问。可以通过隧道和 TLS 轻松保护连接。

标签: deployment auto-update change-management


【解决方案1】:

您说您想要进行 Windows 软件部署,但您却谈论构建脚本语言,例如 NAnt。如果是我,我会使用 InstallShield 编写一个 Windows Installer 程序包,并利用它的 UpdateManager 服务让客户端从您的更新服务器中提取更新。这些工具已经存在并经过了很长时间的验证,并且比您重新发明的任何东西都更加安全。

【讨论】:

  • 你有任何可以链接的支持文档或演示
【解决方案2】:

我不是 100% 清楚要部署的应用程序类型 - 但如果这是一个要分发给客户端/最终用户的 Windows 窗体应用程序,那么您是否看过 ClickOnce?这具有自动轮询和从客户端拉下增量的模式。但是好像你是在分发到其他服务器?

【讨论】:

  • 我真的不认为 ClickOnce 可能会削减它。我在关于正在部署的软件的问题中添加了更多详细信息。
【解决方案3】:

几年前,我实现了一个系统,可以满足您的需求。

对于客户端应用程序,我们使用 ClickOnce 部署,效果很好。对于 Windows 服务和网站,我们必须实现自己的系统,因为我们找不到适合我们的系统。

对于我们尝试复制的数据库 (sql2005),这并没有成功,需要花费大量时间和处理器能力。我们选择备份和恢复数据(在客户端服务器上都是只读的)

简而言之

1) 主服务器将保存几个带有新版本 Web 服务、网站和数据库的 zip 文件。

2) 客户端服务器 Windows 服务每天扫描主服务器(使用 ftp)以查找新版本的软件。

3) 当找到它时 - 卸载windows服务并替换文件并重新安装 - 替换网站文件 - 替换数据库

【讨论】:

  • 不幸的是,我真的对构建我们自己的东西不感兴趣。对我们来说,构建、支持和维护工作量太大了。这真的很烦人,因为我使用 MSBuild、PSExec、NcFTP 和其他一些方法进行了推送部署,而且效果很好。只是我们不能丢弃 PSExec 和这样的工具,这些工具会在子/目标服务器上将服务和端口开放到我们的环境中。
【解决方案4】:

Windows Live 同步

您是否考虑过 Windows Live Sync?

它是免费的,您只需设置两个文件夹即可。一个在您的主服务器中,一个在您的子服务器中。

设置完成后,所有文件都会自动同步。

更新应该很容易,一旦你更新你的主文件夹,它会自动复制到子端。

这完全是一劳永逸。

我使用这个带有六个“子”节点的系统(一个部署在服务器上),每天轻松同步 1000 个文件。

编辑 1:

忘了说,文件是加密的,而且它使用反向连接,所以路由器/防火墙配置为零。

【讨论】:

  • 有些服务器有网络连接,有些则没有,而那些只在短时间内有网络连接,因为它是一个安全的环境。还需要在每台机器上本地运行安装例程。 Windows 服务需要停止、更新和重新启动,否则您无法进行更新。数据库服务器需要下载 SQL 脚本并针对正确的数据库执行它们。另一个问题是它不需要从任何地方都可以访问,否则我们将无法通过合规和安全审计。虽然我很确定我们可以添加缓解例程,但这是额外的工作。
【解决方案5】:

你在运行域控制器吗?这样你就可以直接“宣传”他们了吗?没有得到任何更轻的那个。修改此行以查看 UI 的路径,但它也应该是可编写脚本的 - 至少在 PowerShell 中。

"C:\Windows\SysWOW64\rundll32.exe" "C:\Windows\SysWOW64\shell32.dll",#44 "C:\Windows\SysWOW64\CCM\SMSRAP.cpl",运行广告程序

【讨论】:

  • 好吧,那么是时候在一个上运行 dcpromo 了 :-) 说真的,你已经为所有基础设施付费了,所以你最好只使用它而不是像重新发明轮子一样你在一个糟糕的 Linux 农场 :-) 你可以使用 BITS 使盒子传输更新(数据的后台移动不会比这更轻松),你仍然可以选择让它们在现场安装或等待预定的时间。 Windows 服务器场通常传播正常更新(每个盒子可以有单独的更新窗口)。
【解决方案6】:

过去,我将 Cruise Control .net 和 subversion 结合使用,并取得了很大的成功。

Subversion 是安全的,将充当主服务器。 Cruise control .net 完全支持 subversion 和 nant。当然它可以做更多的事情。由于我们所处的行业及其要求(实用性),我们曾经有非常复杂的逻辑。

【讨论】:

    【解决方案7】:

    我之前在圣路易斯参加他们网站的“生日聚会”时与某人交谈时听说过这种情况。不知道是不是你。

    无论如何,我都会为此使用Web Deployment Tool (MSDeploy)。 MSDeploy 更像是一个同步工具,而不是其他任何东西。这个概念是你有一个源和一个目标,你想同步它们。如果您正在进行正常的推送部署,您的构建服务器会将某些构建的输出与每个目标服务器同步。如果您想进行拉取部署,只需将您想要的文件放到一个共享位置(您正在调用此主服务器),然后您的客户端计算机就可以将自身同步到该主服务器。

    以下是您在问题中提到的更多细节:

    将文件部署到主服务器 您的构建服务器可以使用 MSDeploy 将文件部署到主服务器

    子服务器将检查主服务器是否在给定时间或时间间隔有更新。 对此没有直接的支持,但这里确实有两件事。 一件事:您可以从脚本 (.cmd/PowerShell/MSBuild/etc) 运行 MSDeploy,它可以确定是否有更新的版本。我会通过在输出文件夹的顶层放置一个版本文件来做到这一点。然后,当您的脚本启动时,只需阅读服务器上的版本即可。如果有更新的可用,则启动新的新部署。 第二件事:MSDeploy 支持增量部署,因此即使您启动新部署,它也不会进行任何更改。当您开始谈论数据库部署时,这很棘手,但在您的情况下可能是不明智的,我会选择 Thing one 的一些风格。

    如果主服务器包含更新,那么它将下载更新和/或执行脚本 这就是 msdeploy.exe 将为您做的事情。

    其他相关项目

    • 增量发布:如果您的网站包含 1000 个文件,但只有 5 个文件发生了变化,那么只有这 5 个文件会被部署
    • 自定义:MSDeploy 支持参数化,因此当客户端启动同步时,您可以为该客户端提供特定值。有了这些,您可以更改所有类型的文件,包括 web.conig/.xml 文件/文本文件/等。您甚至可以提供自定义 IIS 设置
    • 身份验证:如果您使用的是 IIS 7,则可以使用普通的 Windows 身份验证,您可以创建 WMSvc 用户并使用这些用户。
    • 安全性:WMSvc 可用于此

    这符合您的需要吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多