Php 您是如何实施;“一步建造”;为了一个灯具项目?
拥有“一推式构建”将您的更改从开发环境转移到live server是一件非常好的事情,并且经常被提倡 我加入了一个小型团队,在LAMP堆栈中运行,并使用SVN进行版本控制,目前部署在一台生产服务器上(另一台用于开发的服务器,不久将成为一台单独的mysql服务器)。在我加入公司之前,我刚刚准备好了很多组织上的东西 我很想看看Php 您是如何实施;“一步建造”;为了一个灯具项目?,php,version-control,project-management,lamp,packaging,Php,Version Control,Project Management,Lamp,Packaging,拥有“一推式构建”将您的更改从开发环境转移到live server是一件非常好的事情,并且经常被提倡 我加入了一个小型团队,在LAMP堆栈中运行,并使用SVN进行版本控制,目前部署在一台生产服务器上(另一台用于开发的服务器,不久将成为一台单独的mysql服务器)。在我加入公司之前,我刚刚准备好了很多组织上的东西 我很想看看 目前人们是如何做到这一点的(一步构建) 看看我如何才能最适合我的情况(小团队、带SVN的LAMP环境) 我感兴趣的一些特殊挑战是如何处理数据库更改(模式),以及人们是否使用以
确实需要几次尝试才能正确,但突然之间,我们解决了多个开发人员使用不同模式的问题。导入转储以更新您的开发模式非常容易,您可以每天都这样做。我们这样做。我们使用一个名为的产品来完成所有的构建和部署。它有一个工作流过程,用于签出文件、进行构建、运行单元测试,然后将代码部署到服务器。您可以使用它部署任何东西,因为进程可以运行命令行程序等。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