【问题标题】:SVN Achitecture - synching/exporting files to remote serversSVN Achitecture - 同步/导出文件到远程服务器
【发布时间】:2012-09-27 20:50:29
【问题描述】:

我即将设置一个 SVN 服务器,我需要将代码推送到一些不同风格的远程服务器(Windows 2008 和 Linux(Apache 和 Tomcat))。

推出代码的最佳方法是什么?服务器之间的同步? SFTP?从远程服务器调用 SVN 导出?我正在考虑在每个存储库上执行一个提交后操作/事件来启动它。多平台解决方案将是关键。

编辑#1 刚知道 svn export 不会同步,它会将已删除的文件原封不动地留在远程服务器上...

编辑#2

  • 我必须考虑到要推送(或拉取)到这些服务器的许多存储库。
  • 这些涉及 PHP 或 ASP.Net 项目(站点/应用程序)

解决方案

  • 在其他服务器上安装了 Hudson
  • 将源代码签出到我们网络服务器上的特定位置
  • 为将目录更改为工作副本并调用 svn up 的特定项目创建作业
  • 在作业 URL 上执行 wget 的提交后挂钩 - hudson/job/name_of_job/build?delay=0sec

【问题讨论】:

    标签: svn


    【解决方案1】:

    在每个远程系统上调用svn update 并在每个系统上都有一个工作副本的提交后挂钩是您可以采用的一种方法(并且很常见,可以成为FAQ entry)。

    您可能还想研究一个持续集成服务器,特别是如果您需要推出的项目是必须编译和部署的应用程序(Tomcat 可能就是这种情况)。在这种情况下,您的 CI 服务器将轮询以检查更改并拉取更新,而不是从 Subversion 服务器推送,然后运行您的编译/测试/部署脚本并报告结果。

    【讨论】:

    • 我需要在所有机器上安装CI服务器吗?还是从一个地方运行?无论如何,CI 服务器不会调用各个存储库的更新吗?它与调用 svn 更新的 php、.net 和 .jsp 页面以及我调用该页面有何不同? CI 还能为我们提供哪些其他功能?发生的操作的日志?
    • 这取决于您选择的 CI 系统的工作方式,但您可能需要在所有机器上安装它(或设置网络共享来移动东西)。 CI 的确切作用取决于您的代码需要如何部署 - J2EE 应用程序,它将编译、运行单元测试并部署到 Tomcat 中,例如(您也可以/应该预编译您的 ASP.NET 应用程序)。如果您的所有代码都从一个基本的工作副本运行,那么您需要 就是一个简单的 svn up(理论上)。在你的服务器上有一个可以调用系统命令和修改运行代码的网页对我来说听起来像是一个重大的安全风险。
    • 我无法从 PHP 调用 svn(访问被拒绝和研究后,同意你的不安全性)所以,我必须安装 CI 服务器并尝试从那个角度。所以,理论上是我的 post commit 调用了来自 Hudson 的 URL,而后者又执行了 svn up?股票不是我们的选择。谢谢!
    • 不,Hudson 将轮询存储库以检查更改,当检测到更改时,它将执行您为其定义的任何处理。不需要提交后挂钩。我没用过Hudson,所以无法推测具体的实现/配置。
    • 我决定继续前进并安装 Hudson...ATM,我在远程服务器上运行 Hudson 并创建了一个简单地更改目录(我在其中进行结帐)并进行 svn 更新的作业。在我的提交后,我在作业服务器/job/name_of_job/build?delay=0sec 的 URL 上做了一个简单的 wget 等效操作,它似乎按预期工作。另外,它会跟踪构建等等。 IIRC,Hudson 只能每隔几分钟进行轮询。对于我们的 webstuff (PHP/.Net),因为这些是开发,所以间隔可能太长了...... FWIW......
    【解决方案2】:

    svnsync.

    它工作得很好,只是要小心把它放在 post-commit 和 post-revprop-change 钩子中,因为它会在大多数提交中被调用两次。您还需要使远程服务器对除 svnsync 用户之外的所有用户都是只读的。

    您也可以将这些存储库设置为只读,但自动将编写器推送回主存储库,因此远程可以用作缓存。 Svnsync 也非常适合进行连续备份。

    红皮书的repository replication 部分说明了您需要知道的一切。

    【讨论】:

    • 我拥有 .svn 文件夹是否重要?远程服务器是将提供代码的 Web 服务器。另外,我只是在查看存储库的提示,不一定需要所有历史记录等......
    • svnsync 用于创建存储库的镜像,而不是用于将版本化的工件分发到其他位置。
    • 耻辱,你应该说你只想要原始问题中的头部修订。
    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多