Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 您是如何实施;“一步建造”;为了一个灯具项目?_Php_Version Control_Project Management_Lamp_Packaging - Fatal编程技术网

Php 您是如何实施;“一步建造”;为了一个灯具项目?

Php 您是如何实施;“一步建造”;为了一个灯具项目?,php,version-control,project-management,lamp,packaging,Php,Version Control,Project Management,Lamp,Packaging,拥有“一推式构建”将您的更改从开发环境转移到live server是一件非常好的事情,并且经常被提倡 我加入了一个小型团队,在LAMP堆栈中运行,并使用SVN进行版本控制,目前部署在一台生产服务器上(另一台用于开发的服务器,不久将成为一台单独的mysql服务器)。在我加入公司之前,我刚刚准备好了很多组织上的东西 我很想看看 目前人们是如何做到这一点的(一步构建) 看看我如何才能最适合我的情况(小团队、带SVN的LAMP环境) 我感兴趣的一些特殊挑战是如何处理数据库更改(模式),以及人们是否使用以

拥有“一推式构建”将您的更改从开发环境转移到live server是一件非常好的事情,并且经常被提倡

我加入了一个小型团队,在LAMP堆栈中运行,并使用SVN进行版本控制,目前部署在一台生产服务器上(另一台用于开发的服务器,不久将成为一台单独的mysql服务器)。在我加入公司之前,我刚刚准备好了很多组织上的东西

我很想看看

  • 目前人们是如何做到这一点的(一步构建)
  • 看看我如何才能最适合我的情况(小团队、带SVN的LAMP环境)
  • 我感兴趣的一些特殊挑战是如何处理数据库更改(模式),以及人们是否使用以及使用何种“包”来保持事物的有序性(例如RPM、PEAR等)

    我们使用了。工作得很有魅力

    Hudson还将与其他构建系统合作,而不仅仅是java项目。它允许您设置多个构建目标,并将自动或手动运行它们。它还强制您实现从单个命令运行构建的方法

    它不能解决在为部署的服务器运行构建期间服务器不可用的通信问题

    对于模式更新和更改,我们将ant脚本设置为执行两件事:

  • 仅当SVN中存在差异时更新并运行架构
  • 在生成架构更改后签入架构转储
  • 如果模式没有更新,只需使用转储加载数据库即可

  • 确实需要几次尝试才能正确,但突然之间,我们解决了多个开发人员使用不同模式的问题。导入转储以更新您的开发模式非常容易,您可以每天都这样做。

    我们这样做。我们使用一个名为的产品来完成所有的构建和部署。它有一个工作流过程,用于签出文件、进行构建、运行单元测试,然后将代码部署到服务器。您可以使用它部署任何东西,因为进程可以运行命令行程序等。

    UNIX(和Windows)上的“make”是您的朋友。虽然它有一个学习曲线,但它是值得的。您可以对源代码进行更新、编译、测试等。

    我认为没有简单的食谱答案,因为这在很大程度上取决于您的环境。无论您提出什么,我强烈推荐一种基于脚本的方法,部署脚本本身就在源代码控制中。这些脚本还允许更好地与构建解决方案集成(见下文)

    在生产环境中运行的最简单的脚本就是从源代码管理获取最新版本(或特定版本)的命令

    下一个挑战是数据库部署。对于中小型项目,我最喜欢的解决方案是在每个数据库中维护一个模式版本表,并在源代码管理中使用所有DDL和数据更新脚本(包括它们在压缩归档中使用的数据源)。脚本是连续编号的(从000001…、000002…,等等开始),我运行的部署脚本只是首先备份现有数据库,然后从模式版本表中获取最后一个运行的数据库脚本,然后以正确的顺序运行源代码管理中发现的任何新数据库脚本,相应地更新架构版本表

    这种方法使我能够非常快速地从头开始重建数据库

    这两种方法结合在一起,可以将代码库快速部署到几个不同的登台机器、QA环境、测试版等


    对于稍微复杂一点的场景,您应该运行一个持续集成构建服务器,如Kieveli et.al.建议的,它基本上定期“重建”整个部署,因此包含脚本来执行上面“手动”运行的操作

    通过为每个数据库脚本创建回滚脚本,还可以使数据库部署更加复杂。然后,您应该编写一个小型控制器应用程序来处理这些问题。有几种OSS解决方案可以解决这类问题,其中一种可能适合您的需要


    但是,请确保从不将数据库自动部署到生产环境;-)

    PHP项目的最佳构建工具可能是,它非常类似于Ant,但是用PHP编写的。它包含了像这样的东西所需要的所有必要的东西,比如从svn回购中获取东西。

    一旦你有了一个单步构建,你就可以轻松地将它转化为连续构建

    我们已经在一个中央服务器上完成了所有的构建,并标记了构建它们的变更号。当提交某些内容时(我们使用Perforce,但这对SVN有效),我们的一个构建框上的cronjob会注意到有一个比构建更新的更改,触发http请求以下载源代码树,并开始构建(主要是使用GMake)。只需几个简单步骤即可实现连续构建:)


    在这之后,让所有测试自动化自动运行只需一小步。每次提交后都会生成并测试完整(可能是可部署的!)代码。

    对于脚本语言,使用ant variant或CruiseControl variant之类的常用建议意义不大,因为您不需要编译任何东西

    让我们继续关注数据库。说到持续集成,有三件重要的事情是自动化、自动化和自动化。这意味着您必须对从构建空数据库、从外部数据导入到升级到新版本的所有内容编写脚本,并准备使用一些脚本运行。一个很好的例子可能是MediaWiki,让您使用php本身进行配置和安装。我建议运行buildser