【问题标题】:Php deployment to remote server using FTP from SVN after each commit每次提交后使用来自 SVN 的 FTP 将 PHP 部署到远程服务器
【发布时间】:2011-02-06 02:47:55
【问题描述】:

每次提交后,我都找不到使用来自 SVN 的 FTP 将 Php 部署到远程服务器的解决方案。 如何通过 FTP 将唯一添加或编辑的文件上传到服务器并从 SVN 中删除已删除的文件 我正在考虑编写提交后脚本...

【问题讨论】:

  • 提交后脚本挂钩是正确的,但您不应使用 FTP 而是使用 rsync 传输到新主机。 FTP 无法确定哪些内容被编辑,哪些内容未被编辑。结帐 Phing,就像 Pekka 建议的那样和这篇博文:blog.fedecarg.com/2008/07/21/…
  • 如果可以,请考虑在远程服务器上也使用 SVN。授予它只读受限访问权限并在存储库上安装一个提交后挂钩,通知远程服务器首先恢复然后更新其工作副本。在这种情况下,您可能还想拒绝对任何 .svn 文件夹的 Web 访问。此外,考虑使用分支来确保服务器不会从主干检查每个提交。
  • 我不认为解决方案需要基于PHP,只是为了转移一个php网站。

标签: php svn ftp automated-deploy


【解决方案1】:

好问题!

我不确定是否存在以这种方式同步文件的仅限 PHP 的方法。

我通常会使用第三方 FTP 同步工具,如 rsyncScriptFTP(商业)来完成同步部分。

看看phing,它有许多 FTP 扩展(称为“任务”)。不过,我没有与他们打交道的实际经验。

这篇博文提供了许多想法和方法:Using phing to sync files with shared hosting

【讨论】:

  • 我使用的不是Phing,而是Ant,结果我只能将所有新源从SVN复制到远程服务器。不仅仅是从新提交同步文件。远程服务器可以是 Windows 操作系统,所以我不能使用 rsync。我只是想模拟 Springloops.com 的部署过程,他们做得很好。
【解决方案2】:

您可以使用svn2web 通过 Ftp 将每个提交的文件上传到服务器。 svn2web 是 php 脚本的集合,您可以将其用作 svn 钩子。您可以将 ftp-server 的地址、用户名和密码设置为目录上的 svn 属性。效果很好!

【讨论】:

  • 感谢您的回答。但是提交可以删除svn上的一些文件。我需要将 svn 与部署服务器同步。
  • 如果您删除存储库中的文件,svn2web 也会删除 ftp 上的文件。这不是一件好事吗?
【解决方案3】:

我使用http://svn2ftp.com,它是一个 SVN 主机,允许在每次提交时远程部署到 S/FTP!

【讨论】:

    【解决方案4】:

    如果您不想自己管理脚本,而只是想要一些有用的东西,您可以尝试使用托管服务。我使用Deploy,它非常适合您描述的场景。如果您只有一个项目要部署,它甚至是免费的。

    【讨论】:

      【解决方案5】:

      对于我们的 php 项目,我们使用 Jenkins 一个持续集成工具。我们的存储库服务器是颠覆。每当我们进行代码更改时,我们都会使用 jenkins 作业与 Beta staging & live 环境合并,然后部署应用程序。

      您可以在http://www.michaelpeacock.co.uk/blog/entry/jenkins-ci-an-introduction-for-php-developers 上找到有关使用 Jenkins 部署 PHP 应用程序的更多信息

      【讨论】:

      • 我喜欢你的回答,因此你有我的赏金。
      【解决方案6】:

      mybe cron + bash 脚本会被 svn up 吗?

      【讨论】:

        【解决方案7】:

        你看过Beanstalk吗?它让您可以一键将您的 Subversion 和 Git 项目部署到您的 FTP 服务器。虽然它不是免费的。另一种免费的选择是设置一个持续集成服务器,该服务器将运行 rake 脚本来进行部署。

        【讨论】:

          【解决方案8】:

          你说什么,你从 SVN 结帐到你的服务器,(创建从 SVN 到生产服务器的工作副本),当你想部署一个新版本时,你只需通过 SSH 连接到服务器并输入 svn update ,然后就可以了,只会部署已编辑的最新文件,并且在不到一秒钟的时间里,您就可以在生产中更新最新版本。

          【讨论】:

            【解决方案9】:

            最好的方法是(如果您的服务器是基于 Linux 的)将 SVN 导出到新目录,然后移动新目录以替换旧目录(最好的方法是使用指向不同版本的符号链接地点)。这样一来,该站点将在一两秒钟内不可用,而如果您 rsync 并且拥有一个大站点,如果您大幅更改单个文件,则该站点将被破坏,直到所有文件同步为止。

            至于触发这个程序,最好的方法是使用svn hooks。还可以考虑在发布之前进行一些自动化测试(对于基本功能),因为您可能会在一段时间内严重破坏您的主干,并且该网站肯定会关闭:)

            我们目前正在将上述方法整合到生产环境中,设置如下:

            • 提交进入主干
              • 在实际提交之前,会对代码运行测试以查看是否一切正常
            • 在多次提交后,部署到来(通常由开发人员监督)
              • 再次运行测试
              • 如果他们成功 - 一切正常
              • 如果失败,则会返回旧的导出,并且该站点将再次全面运行

            这一切都是用 PHP 编写的,使用标准的控制台命令。

            【讨论】:

            • 我不想将svn上新版本的所有文件都导出到远程部署文件夹。我只想通过上传新文件来同步,覆盖编辑过的文件并根据提交删除文件。请给我一个例子
            • 那么,你为什么不让你的生产网站成为一个 svn checkout 并在你提交时更新它呢?此外,您应该禁止访问 .svn 文件夹,它会完全按照您的意愿工作。如果 SVN 存储库与网站位于同一台服务器上,那么就像使 /path/to_svn/repos/someproject/hooks/post-commit 看起来像这样简单:#!/bin/bash svn update /path/ to/website 并使其可执行。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-02
            相关资源
            最近更新 更多