5

我想就具有以下要求的专业开发设置的外观提供一些意见。

  • 几个 PHP 开发人员(比如 PHP)
  • 每个开发人员属于一个组
  • 每个小组都有一名负责委派任务的团队负责人
  • 每个开发人员都在一台 Windows 7 机器上工作
  • 并使用 NetBeans 或 Eclipse 进行开发
  • 每个开发人员都“拥有”一个可以运行代码的虚拟测试服务器
  • 使用的 VCS 是 SVN
  • 有一个登台服务器,在产品发布/部署之前最终对其进行测试

我给出了一些具体的技术,不要太抽象和 b/c 我也会对插件等的具体建议感兴趣。


在该设置中,我想到了几个问题。

1)因此每个开发人员都将在个人分支上工作。

2) 此分支在工作副本中签出。

现在......这个工作副本在 PC 上使用开发人员的 IDE 进行本地编辑,并在服务器上执行/测试。

在这种情况下,最好/通常的方法是什么?我的意思是 - 你如何在服务器上获取你编辑的代码而不造成太多开销?

开发人员会在他的本地磁盘上保存代码吗?还是让 IDE 通过隧道或特定协议在远程虚拟服务器上写入会更好?

3)每天,开发人员都会将他的工作提交到位于中央存储库中的个人分支中。

关于存储库的位置是否有最佳实践?单独的服务器?

4)然后在开发人员完成他的任务后,他/她或团队负责人将新代码合并到各自的主分支或主干中。


最令人困惑的部分是关于我在 2) 和 3) 之间写的内容。因为到目前为止,我只使用本地服务器。例如,带有运行代码的服务器的 VM 位于共享文件夹中,因此我将能够直接对其进行编辑。当服务器现在实际上是远程的时,我不确定如何有效地弥合差距。例如,高效意味着不必通过 FTP 手动上传。

也欢迎外部资源或书籍推荐。


编辑

我的问题是/正在针对准标准/最佳实践。我认为这几乎是一个标准的开发方案,所以必须有一个“常规”的解决方案。


编辑 2

好的......让我们尝试一张图片: 设置

V 是一个或多个开发人员的虚拟测试服务器 D。C 和 C' 是两个代码版本。它们应尽可能保持相同。

我想到了两个解决方案:

1:编辑C,然后上传到C',然后执行C',然后提交C。

2:不存在C。只是通过一些隧道技术编辑并执行和提交的 C'。

我的直觉告诉我,这两种解决方案都是半最优的。那么什么是“专业”/最高效/最快/最方便/最无摩擦/最不容易出错/最佳实践/行业标准?

任何问题?

4

4 回答 4

3

也许它没有太大帮助,但 GIT 听起来非常适合您的问题,我建议您查看 GIT 功能。如果您有时间,请查看 Linus Torvalds 他自言自语的 GIT。http://www.youtube.com/watch?v=4XpnKHJAok8

于 2011-04-08T14:25:40.187 回答
2

您描述的标准程序或多或少相同。我也为我的团队采用这种方法。它也可以称为分阶段的应用程序开发。

这是我的做法,我使用远程 SVN 主机(例如:assembla.com、unfuddle.com)来存储我的所有代码。我的团队成员将信息存储在这些远程 svn 服务器上。您也可以购买 VPS 并在那里设置 SVN 并使用相同的方法。

最佳实践是在本地进行测试并尽可能多地提交和提交,但每次提交都必须解决问题或包含添加任何新功能的重要部分。

一旦每个人都完成了提交,首席开发人员就可以使用 PuTTY 等工具通过 SSH 登录到登台服务器。第一次,首席开发人员必须将代码签出到代码所在的文件夹中。在此阶段,如果多个开发人员编辑文件的同一段,则可能会出现文件冲突。然后,首席开发人员应首先解析代码,然后继续进行结帐。签出后,首席开发人员只需在登台服务器上进行 svn 更新以使代码保持最新。

基本思想是让代码在本地设置上运行,然后提交并更新用于在模拟场景中测试应用程序的登台,然后将其提交到实时站点。

这里有很多 if 和 but 需要我写一章 :) 但简而言之,这是最热情的。

工具(您可以在此设置下使用): - Tortoise SVN 管理器 - PuTTy - NetBeans

希望能帮助到你 :)

于 2011-04-12T04:23:11.110 回答
2

我不喜欢与个人分支机构合作。我在 ClearCase 工作了将近 15 年,尽管 ClearCase 可能比大多数人更好地处理个人分支,但这仍然是一个很大的痛苦。更糟糕的是,个人分支鼓励人们直到最后一刻才提交他们的工作——通常是在主要版本发布前一两天。

出于这个原因,并且为了迫使开发人员彼此保持一致,我强烈建议每个人尽可能在单个分支(或主干)上一起工作。我一直告诉开发人员在进行更改时要小口吃

您听起来需要的是一种自动化部署的方法。也就是说,我在我的本地机器上进行更改,并且使用一个命令,我确保服务器具有代码的重复副本。您还希望部署高效。如果您更改 2 GB、10,000 个文件部署的单个 2 KB 文件,您只想复制该文件,而不是 10,000 GB。为此,我建议您在Ant中编写一个部署脚本。

您的开发人员可以修改文件,然后通过 Ant 脚本部署这些文件。开发人员不必记住他们更新了哪些文件,因为 Ant 会自动处理这些。事实上,Ant 甚至可以修改文件以确保它们在被复制时包含正确的环境信息。当然,如果服务器上的设置与源存储库中的设置不同,Ant 可以重新排列文件。Netbeans 和 Eclipse 都可以直接在 IDE 中执行 Ant 脚本。

所以:

  • 让您的开发人员在他们的本地机器上修改代码。
  • 运行 Ant 脚本以确保服务器和本地计算机同步。
  • 在服务器上测试。
  • 然后,一旦他们对服务器上的结果感到满意,就检查他们的更改。

有人提到了像Jenkins这样的持续构建系统。无论如何,这实际上是一个好主意,即使它不能解决这个特定问题。Jenkins 可以拥有自己的服务器和数据库。然后,当您提交代码时,Jenkins 会更新服务器并运行自动化测试。然后 Jenkins 可以创建一个报告。这一切都显示在 Jenkins 的网页上。此外,您可以在 Jenkins 上存档您的部署,因此如果您告诉某人测试“Build #20”,他们可以简单地将其从 Jenkins 中轻松找到。

于 2011-04-15T18:49:34.917 回答
1

我相信每个人都有不同的做事方式,但这是我的想法。

“最佳实践”可能是“持续集成”,即每个开发人员没有自己的分支,而是签入一个公共开发分支。这迫使他们尽早处理冲突并相互协调,并且经常避免主要开发人员在以后管理巨大的火车残骸合并。如果您真的想走那条路线,请查看 Cruisecontrol。

最好的方法是如果他们有一个本地 apache web 服务器和完整的 php 堆栈。您可以使用 Zend_Server 社区版在 Windows 上快速启动和运行。大多数标准 php 代码在 Windows 和 Linux 上都可以正常运行,但是如果您正在执行大量文件操作或 cron 作业或 cli 工作,或者需要 memecache 等,您将遇到不兼容问题。如果是这种情况,并且只有 Linux 的东西会咬你使用 VMWARE 或 VirtualBox 来运行本地 linux 实例并在其中安装 IDE,并确保它们有大量 RAM 来处理它。

每个开发人员都需要在 Eclipse 内部运行同步,基本上是 svn 更新,当场处理与其他开发人员的任何冲突,进行本地测试并提交他们的更改。

我在 svn 服务器上设置了一个post_commit 挂钩,它在我的 Web 服务器上调用和 /autobuild.php。autobuild.php 运行 svn update 并获取最新的代码更改以及任何 chown 或 chmod 文件权限内容并重置任何服务器特定的配置文件 config.php。设置它有点棘手,以便 apache 用户可以运行 svn update,但是一旦你完成了你的 beta/testing 服务器总是有最新的提交代码。CruseControl 和其他几个也可以帮助您做这类事情并添加单元测试等

现在,您的首席开发人员仍然需要将开发分支合并到生产分支中,在开发服务器上进行测试,审查其他人的提交并决定如何以及何时发布发布,但您不会将负担放在他解决了每一个冲突并融合了每一个变化。

您的开发人员不是 ftping 文件或 ssh 远程访问服务器,他们只是在他们的 IDE 中本地工作,并通过 svn(以及电子邮件、电话、聊天等)更新以获取新代码并在完成任务时提交。

我看不到为每个使用 SVN 的开发人员建立一个单独的分支有什么好处。合并这些分支可能在 Git 中有效,但使用 SVN,您的首席开发人员将很快讨厌这种设置的生活。

于 2011-04-13T21:43:28.923 回答