我以我在 GitHub 和 Jenkins 上运行的详细信息作为回答的开头。
为什么开发人员必须在提交之前在本地运行所有测试。尤其是在 Git 范式中,这不是必需的。例如,如果运行所有测试需要 15-30 分钟怎么办。您是否真的希望您的开发人员或您亲自坐在那里等待测试在您提交并推送您的更改之前在本地运行?
我们的流程通常是这样的:
- 在本地分支中进行更改。
- 运行您创建的任何新测试。
- 将更改提交到本地分支。
- 将本地更改远程推送到 GitHub 并创建拉取请求。
- 让构建过程获取更改并运行单元测试。
- 如果测试失败,则在本地分支中修复它们并在本地推送它们。
- 在拉取请求中查看更改代码。
- 批准并通过所有检查后,推送给master。
- 重新运行所有单元测试。
- 将工件推送到存储库。
- 将更改推送到环境(即 DEV、QA)并运行依赖于完整环境的任何集成/功能测试。
- 如果您有云,那么您可以将更改推送到新节点,并且只有在所有环境测试通过后,才能将 VIP 重新路由到新节点
- 重复第 11 步,直到您完成所有 pre-prod 环境。
- 如果您正在练习持续部署,那么如果所有测试、检查等都通过,则将您的更改一直推送到 PROD。
我的观点是,当您可以将工作卸载到持续集成服务器上并通知您以后需要修复的问题时,在本地运行测试会阻碍他们的进度,这不是很好地利用开发人员的时间。此外,在您提交它们并将工件部署到环境之前,某些测试根本无法运行。如果一个环境因为你没有云而损坏,也许你只有一台服务器,那么在本地修复它并快速推送更改以稳定环境。
如果必须,您可以在本地运行测试,但这不应该是常态。
至于多开发者问题,开源项目已经处理了很长时间。他们在 GitHub 中使用分叉,让贡献者有机会提出新的修复和功能,但这与团队中的开发人员创建本地分支、远程推送并在推送之前通过代码审查获得团队支持并没有太大区别. 如果有人推送的更改破坏了您的更改,那么您首先尝试自己修复它们,然后寻求他们的帮助。您应该遵循“早期和经常合并”的原则,以及定期将 master 的更新合并到您的分支。