代码之家  ›  专栏  ›  技术社区  ›  Steven Surowiec

PHP构建系统[关闭]

  •  10
  • Steven Surowiec  · 技术社区  · 15 年前

    我在用 PHPUnderControl 它运行在巡航控制之上,用于我的持续集成和单元测试。我还设置了运行phpdocumentor为我生成phpdoc,它运行php代码嗅探器为我强制执行编码标准。但现在我想在同一个服务器(Ubuntu)上设置一些东西,以便更容易地部署到远程服务器。我已经设置了它,所以每次成功构建之后,SVN都会从主干导出到服务器上projects文件夹中的一个目录中。

    我一直在考虑编写一个定制的PHP脚本,它将ssh连接到一个配置好的远程服务器上,对最新的导出进行tarball处理,复制它,卸载并运行任何迁移。一开始这样的PHP脚本不应该太难,除非我最终需要扩展到多个服务器。我知道外面有这样的系统 Phing , Fabric 以及其他。

    我的问题是,是否有人有这些经验,可以提供一些赞成和反对?我已经开始在我的服务器上设置phing,并将尝试在其旁边使用fabric,但我想知道是否有人更广泛地使用它们,或者必须扩展它们,可以提供一些反馈。

    6 回复  |  直到 7 年前
        1
  •  8
  •   nemoinho rj27    9 年前

    我已经用过 Capistrano 使用PHP(尽管它更像是用Ruby编写的Rails-Y东西)。

    它的使用非常简单,但也就是说我不需要对它进行太多的扩展。不过,我们确实部署到各种不同的登台/生产服务器上,并且多阶段扩展在这些场景中非常有用。

    然而,和大多数事情一样,Ruby也有很多钩子和“魔法”,如果你刚接触到Capistrano,并且想用它做一些棘手的事情,这些东西会让你困惑。

    至于它与其他部署工具的比较方式,我无法置评。我知道我们以前用过phing,但我不知道为什么我们改用capistrano。

        2
  •  2
  •   NSSec    15 年前

    如果你喜欢Capistrano,但希望它更像一个PHP,那就去看看吧。 Fredistrano .

    我曾经使用phing编写了一个自动化构建(SVN导出、Zend Guard编码等)和部署系统,发现使用起来相当痛苦。每当我要写一个特别的任务时,我都觉得我必须跳到很多篮球场去,才能让它发挥作用。

    所以,最近我只编写了简单的bash脚本,通过svn签出、编码、在svn中创建标记以及通过rsync进行部署。它可能是低技术的,phing可能有一些优越的功能,但至少它不会妨碍我。

        3
  •  2
  •   Ascherer    11 年前

    有一个新的构建工具,叫做bldr。它使用yaml进行配置,而不是像外面的大多数构建系统那样使用XML,并且具有高度的可扩展性。

    http://bldr.io

        4
  •  1
  •   Brian    15 年前

    我们用的是phing,它已经派上用场了。我们不使用它来包装,但它不应该太难做到你正在寻找的。我们主要将其用于清除缓存、构建开发站点等常见任务,以及帮助开发的其他任务。这是一个很大的帮助,据我所知,它似乎是一个蚂蚁克隆,尽管它可能没有蚂蚁拥有的所有功能。

        5
  •  0
  •   code_burgar    15 年前

    如果我要实现这样一个部署系统,我可能会选择与上面概述的稍有不同的解决方案。不是让代码在我的系统上本地运行,连接到远程服务器列表并在那里执行“工作”,而是将更新程序模块与其余代码打包,并让它根据需要从我的服务器中提取更新数据(或者更确切地说,当我“告诉”它这样做时)。这样,您就不必担心在您的端(您只需要在请求时通过HTTP提供更新的代码,而远程服务器处理其余的代码)。只有我的2美分。

        6
  •  0
  •   Lothar    15 年前

    为此,我编写了自己的类似rsync的工具,因为我在第三世界的一个非常糟糕的网络连接中工作,并且有各种各样的失败和饥饿的连接,所以rsync无法工作。

    在远程系统上,在运行迁移之前,您至少应该编写一小段备份脚本。

    更好的方法是在Web主机系统上使用完全独立的镜像系统,并在迁移后包含一些小的但基本的单元测试。然后进行根目录切换,使更新后的网站联机。这将需要在迁移期间以只读模式运行一些交互式服务(不幸的是,这是一个很少有人实现的功能)。

    但首先,如果你认为这真的值得你花时间去做,如果你每季度只更新一次,那么一个简单的纸质清单就足够了。