我团队的开发人员想要一台共享的开发机器,而不是在自己的电脑上运行软件。他们的理由似乎是我们只针对 Fedora/CentOS/Red Hat 进行发布,而他们使用 Mac。我试图向他们解释,对于我们正在做的事情,他们都需要服务器上的 root 权限,其中一个人很容易做类似的事情sudo rm -rf /
(即使是无意的),从而破坏了每个人未签入源代码控制的工作。我告诉他们下载 CentOS 并使用 VirtualBox 来运行代码。
所以我想这里的问题是谁是对的?从我的角度来看,共享开发服务器的问题比在他们的机器上运行 CentOS 的轻微不便更重要。
答案1
为了阐述我上面的评论,绝对应该不您的开发人员需要在您的开发环境中拥有 root 访问权限,无论是共享环境还是其他环境。通过结合经过深思熟虑的文件权限和少量 sudo 规则,他们应该能够做任何他们需要做的事情。
关于共享开发环境与每个开发人员拥有自己的环境:我支持你们的开发人员。由于每个开发人员管理自己的开发环境,因此最终会得到无数完全不同的配置、软件修订、文件权限结构、守护进程版本、内核版本等。这是一个恶梦用于消除错误。
他们认识到他们需要一个稳定、管理良好的开发环境。他们完全正确,所以就把这个交给他们吧!
答案2
为什么不同时在他们的工作站上进行开发并在共享的开发服务器上进行测试?
如果担心数据丢失,您可以随时在开发服务器上运行虚拟机,对机器进行快照,然后让开发人员在该虚拟机上更新代码。最糟糕的情况是,您可以随时将虚拟机恢复到之前的备份。
答案3
在类似情况下,我们采用了本地开发的方式,但我们有一个独立的应用程序堆栈,仅供开发人员和运维人员(我们称之为集成)部署和运行测试。开发人员拥有 root 访问权限,因此如果需要,他们可以进行调查和故障排除,但他们知道系统是暂时的,因此随时可能被破坏(我这样做是为了测试我的部署脚本)。
答案4
在我的公司,我们既有共享开发服务器,也有个人本地服务器。关键是,你不可能两全其美,但你可以同时拥有两个世界 :) 我反对共享开发服务器,但我将在下面提到两者。
运行本地服务器对于那些不太熟悉系统管理的人来说,这真是一场噩梦。你确实说过你的开发人员大多使用 Mac,这只会让事情变得更糟。使用虚拟机确实解决了不同操作系统的问题,但仍然需要他们能够管理服务器,而这不是他们的专长。我发现解决方案是流浪汉。它让我可以为 Virtualbox 虚拟机创建配置代码,我的开发人员可以从维护任务中解放出来。虽然我必须花几天时间才能开始,甚至可能要花几个小时来完成每个新项目,但这节省了我大量的时间,否则我就不得不帮助人们安装和配置软件包。
Vagrant 的更多优点:
- 开发人员可以使用他们想要的任何工具,包括 Windows 上的记事本。
- 开发环境可以被随意销毁并重新创建。
- 不需要令人毛骨悚然的共享帐户,这使得每个代码提交都可以追溯到开发人员。
使用共享服务器有其自身的缺点:
- 两个开发人员很容易编辑同一个文件(特别是如果他们使用不同的编辑器,因为他们无法检测文件是否已打开)。
- 由于 2 个开发人员不应编辑同一个文件,因此并行执行任务更加棘手。想象一下,你发现自己必须编辑一个文件,但你的朋友已经在编辑它,而且他不会很快完成。
- 它要求开发人员在执行时要格外小心
git commit
,因为你不想提交其他人的更改。
话虽如此,在某些情况下你确实需要共享开发服务器。根据我的经验,这包括:
- 暂存服务器,这是代码在部署到生产服务器之前存放的地方。并非所有开发人员都需要访问此服务器。
- 开发/测试需要第三方回调的功能。例如使用 Paypal 付款。
设置共享开发服务器的最简单方法是创建一个应用程序用户,可能以项目名称作为用户名。此用户应拥有与项目相关的所有文件。然后添加开发人员的公钥,/home/<application>/.ssh/authorized_keys
您的开发人员只需以该用户身份登录即可执行操作。使用共享帐户提交代码时有一个约定会很有帮助,例如在提交消息中包含您的姓名首字母,这样您就可以知道哪些提交属于哪些开发人员。