本地/开发/生产环境部署-最佳工作流程

3

情况

我们是一家由3人组成的小公司,每个人都有一个本地主机Web服务器,大部分项目(以前和现在)都放在共享网络磁盘的一台PC上。我们有一个虚拟服务器,其中包含一些客户站点和我们自己的站点。

我们的标准工作流程如下:

Coder PC → Programmer localhost → dev domain (client.company.com) 
                                        ↓
                                  live version (client.com)

通常情况下,有两到三个人同时在同一个项目上工作 - 一个在开发版本上,另外两个在本地主机上。完成后,我们尝试同步开发版本的文件,并且理想情况下不会弄乱任何文件,但这种情况并不经常发生。然后,我们中的其中一人会将开发版本部署到实时网络服务器上。
问题:我们正在寻找一种简化更新网站工作流程的方法 - 理想情况下是某种差异上传器或版本控制系统(Git / SVN / VCS / ...),但我们不确定从何处开始或哪种方式最理想,因此我向各位stackoverflowers请教关于网站/应用程序部署和推荐工作流程的经验。我们可能还需要在过程中使用Mac,如果没有问题,那就更好了。谢谢!
编辑:将网站从开发版移动到实时版是关键部分之一。 编辑:如果没有其他答案出现,我将检查MaxVt的答案:)
1个回答

7
这是一个复杂的问题,但通常有三个主要改进需要进行以提高您的流程。
使用版本控制
如果项目在共享磁盘上,我假设每个项目都有一个当前状态的文件夹。开发人员很容易覆盖彼此的更改,没有历史记录,你不能确定项目是否处于一致的状态或者目前是否有问题。
选择一个版本系统并开始使用它。哪种版本控制系统不那么重要(免费的 - SVN可以,更“集中”,git或mercurial很棒并且允许更大的灵活性),但更重要的是,任何更改,无论多小,都必须通过版本控制。
简化推广、部署和回滚
现在可能需要一系列步骤才能从本地主机移动到开发环境,然后从开发环境移动到生产环境——同步文件,将数据库恢复到已知状态,配置特定于服务器的设置...... 可能有一个描述需要做什么的文档,也可能是部落知识。你的目标应该是开始简化和自动化,实现单个命令或脚本来完成将服务器(local, dev或production)与源代码控制中的项目版本同步所需的所有工作。
通过自动化部署,您可以确保所有必要的操作按正确顺序完成,并且即使所有文件都正确,但某些配置或命令未运行而导致网站崩溃的部署错误也不会发生。
引入测试,您如何知道您刚刚部署的版本不仅编译正确,而且按预期工作?对于每个非平凡项目,您应该有测试来验证最重要的功能(登录,添加内容,生成报告等),以确保开发人员所做的更改不影响网站的正常运行。
有专门用于测试Web应用程序的测试框架(例如Selenium)。学习并应用它们。理想情况下,这个测试套件将作为一行部署脚本的一部分运行。

一旦你完成了这些步骤,你就已经走过了有序、可预测和具有弹性的开发流程很长的一段路程。你的客户和开发人员会为此感谢你 :)


+1 很棒的评论。你会如何在Win(local) <-> Linux(server)环境中编写/自动化部署脚本?因为,说实话,我不知道该怎么做。 - Adam Kiss
如果所有东西都通过源代码控制,那么就是Win(local) <-> source ctl,Linux(server) <-> source ctl。在基本层面上,您可以从shell脚本开始(Windows有cygwin)。您将进行的两个步骤是同步(从源代码控制同步所有源文件)和构建(对配置文件进行所有必要的更改,插入数据库数据,根据需要移动文件以及任何其他任务)。根据项目的复杂性和开发环境,您可能希望转向真正的构建系统(例如Phing用于PHP,或者几乎适用于任何环境的make)。 - MaxVT
一个构建系统需要安装系统本身以及学习/配置它到你的项目,但是你可以获得更好的流程、更少的“琐碎劳动”来使系统执行你需要的各种步骤,并且有更好的错误处理。 - MaxVT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接