拥有一个共享的开发服务器的优点

我的团队中的开发人员希望使用共享的开发机器,而不是在自己的计算机上运行软件。 他们的理由似乎是,我们只针对Fedora / CentOS / Red Hat发布,并使用Mac。 我试着向他们解释,我们正在做什么,他们都需要在服务器上运行,其中一个人可以很轻松地做一些事情,比如sudo rm -rf / (即使偶然),从而隐藏所有未被检查的工作进入源代码pipe理。 我告诉他们下载CentOS并使用VirtualBox来运行代码。

所以我想这里的问题是谁在对的? 从我的angular度来看,如果在他们的机器上运行CentOS带来的不便,那么共享一个开发服务器的问题就会超过次要问题。

为了阐述我上面的评论,你的开发人员绝对不需要你的开发环境需要root访问权限,共享或其他方式。 结合经过深思熟虑的文件权限和一些sudo规则的补充,他们应该能够做任何他们需要做的事情。

关于共享开发环境与每个开发人员拥有自己的环境:我在这里与您的开发人员。 每个开发人员pipe理他们自己的开发环境,结果都会有很多完全不同的configuration,软件修订版本,文件权限结构,守护进程版本,内核版本等等。这是一个压缩bug的噩梦

他们认识到,他们需要一个稳定,pipe理良好的发展环境。 他们是完全正确的,所以给他们!

为什么不是两个 – 在工作站上开发并在共享的开发服务器上testing?

如果担心数据丢失,则始终可以在开发服务器上运行虚拟机,对计算机执行快照,让开发人员更新该虚拟机上的代码。 更糟糕的是,您可以始终将虚拟机恢复到之前的备份状态。

在类似的情况下,我们采取了本地开发的路线,但是我们有一个独立的应用程序堆栈,只是为了开发和运行(我们称之为集成)而部署和运行testing。 开发人员有根访问权限,如果需要的话,他们可以进行调查和排除故障,但他们知道系统是暂时的,所以在任何时候都可以被吹走(我这样做是testing我的部署脚本的一种方法)。

如果我在你的鞋子里,我会考虑build立一个虚拟机,这个虚拟机可以在他们的开发系统上使用,这个虚拟机镜像了服务器的设置。 它给了他们所需要的东西,没有人做一些愚蠢的事情。 此外,如果登台服务器出于某种原因而停止运行,那么当您试图恢复备份的时候,并不是所有的开发人员都在大拇指上扭动起来……不过这可能是罕见的(并不像您那么难得'd'认为)

在我的公司,我们都共享开发服务器和个人本地服务器。 重点是,你不能拥有两全其美的世界,但你可以拥有两个世界:)我对共享开发服务器的一面,但我会在下面提到。

运行本地服务器对于那些没有太多进入系统pipe理员的人来说是一场真正的噩梦。 你确实说过你的开发者大多使用Mac,而这只会让事情变得更糟。 使用虚拟机可以解决不同操作系统的问题,但仍然需要他们能够pipe理服务器,这不是他们的专长。 我发现解决scheme是stream浪汉 。 它使我可以为Virtualbox虚拟机创buildconfiguration代码,并且可以将我的开发人员从维护任务中解放出来。 虽然我不得不花上好几天的时间来开始每个新项目,也许会花上几个小时,但这样做却节省了很多时间,否则我将不得不帮助用户安装和configuration软件包。

stream浪者的更多优点:

  • 开发人员可以使用他们想要的任何工具,包括Windows上的记事本。
  • 开发环境可以被破坏并随意重新创build。
  • 不需要一个令人毛骨悚然的共享帐户,这使得每个代码都可以提交给开发人员。

使用共享服务器有其自身的缺点:

  • 两个开发者很容易编辑相同的文件(特别是如果他们使用不同的编辑器,因为他们无法检测文件是否已经打开)。
  • 因为2个开发者不应该编辑同一个文件,所以任务的并行执行比较棘手。 想象一下,你发现自己不得不编辑一个文件,但是你的朋友已经在做一些工作了,他不会马上完成任务。
  • 它需要devs在做git commit时候要格外小心,因为你不想提交其他人的修改。

这就是说,有些情况下你确实需要一个共享的开发者服务器。 根据我的经验,这包括:

  • 登台服务器,在将代码部署到生产服务器之前,这是代码保留的地方。 并不是所有的开发者都需要访问这个服务器。
  • 开发/testing需要第三方callback的function。 其中一个例子就是用Paypal付款。

设置共享开发服务器最简单的方法是创build一个应用程序用户,也许用项目的名字作为用户名。 这个用户应该拥有与项目相关的所有文件。 然后将你的开发人员的公钥添加到/home/<application>/.ssh/authorized_keys ,你的开发人员可以简单地以该用户的身份login来完成任务。 在使用共享帐户提交代码时有一个约定,例如在提交消息中包含首字母缩写,这样可以知道哪些提交属于哪个开发者,这将是有帮助的。

根据您的应用程序,考虑连续部署。 开发人员应该将他们所有的变化都检查到版本控制系统(CVS,SVN,GIT或其他)。 设置提交后触发器来部署提交的更改。

在某些环境中,您将需要某种连续的构build过程。 (每小时构build可能就足够了。)这为开发人员提供了一个地方来validation他们的更改如何与其他开发人员的更改一起工作。

如果您确实需要您的开发人员运行本地服务器,则需要标准化设置和configuration。 可以提供脚本设置,甚至可以将整个configuration检查到版本控制系统中。 不要指望你的开发者自己pipe理服务器。

使用openindiana。 区域为您提供操作系统级虚拟化。 给每个开发者一个他们有根访问的区域。 比虚拟机更高效。

仍然不知道为什么你需要root访问权限,但我想这就是要求,区域会给你一个解决scheme。

你们是否都在瞎点?

对于WEB开发:开发服务器应该是应用程序将在生产中驻留的活动服务器的完美reflection。 为什么? 因为从硬件的angular度来看,你要确保你的在服务器的行为完全像你刚才testing的所有东西的开发服务器。 如果硬件不相似,结果可能(读取:WILL)会有所不同。

如果你使用SVN,甚至是Dreamweaver的SourceSafe(locking系统),只要你的web开发者知道他们在做什么,你就可以很安全地从拧紧。 每个人都可以直接为项目贡献力量的时候,就会有非常棒的进步和合作,这真的可以帮助开发者更多的了解对方,使得后续的项目变得更加简单和容易。

对于软件开发:我刚才讲的团队精神仍然适用。 如果每个人都共享一个单独的开发服务器,他们仍然可以获得团队协作和共同的利益,但是当然,对于软件来说,您必须考虑您要使用哪个平台。 所以,我想说这是一个项目的项目考虑。 您的解决scheme可能是“多个共享开发服务器,以满足您试图兼容的平台的硬件规格”。

这就是说 – 除非(即使读者:即使)你是微软或Adobe,你永远不会testing“足够”的系统types…