小型团队的开发工作流程
Development workflow for small team
所以,我在一家小型 event/entertainment 公司工作,最近接管了开发团队(大部分时间是 PHP 应用程序)。当前的工作流程看起来有点像这样:
- 每个项目都有一个开发服务器和一个生产服务器。没有本地开发环境,这意味着每个开发人员都可以访问 SSH 并直接在开发服务器上进行更改。
- 没有源代码控制或任何东西。
- 大多数时候,团队中的每个成员都独立完成一个项目。多个开发人员在同一个项目上工作的情况很少见。
- 更新生产服务器意味着使用 SFTP 将源从开发服务器传输到生产服务器。
我觉得这很可怕,所以我想出了这个主意:
- 将有一台中央开发服务器托管所有可用项目,该服务器将使用 Mercurial 进行源代码控制。
- 开发人员必须为每个项目设置本地开发环境并使用本地存储库。更改可以 pulled/pushed from/to 开发服务器上的中央存储库。
- 如果必须推出项目的新版本,开发人员只需将存储库克隆到生产服务器即可。
这种工作流程有什么完全不对的地方吗?我在我自己的项目中使用过 Mercurial,但我以前从未在团队中使用过它,而且我对所有这些团队管理的东西也很陌生。我会很感激一些建议。
谢谢,
克里斯
这是我工作了几年的工作流程...
多个生产服务器,
1 x 项目(测试)服务器,
Git(比特桶),
詹金斯,
JIRA(问题跟踪),
HipChat(团队聊天)
1 x 大师 Git 分支,
1 个项目 Git 分支机构
- 提出新票(在 JRIA)
- 从 master 分支签出一个新的本地分支
- 完成工作
- 提交拉取请求的分支(post 一个 link 到团队聊天中的拉取请求,以便其他开发人员知道是否是 PR)并进行所需的任何更改
- 通过后,将我的本地分支合并到项目分支中
- 使用 Jenkins 克隆项目 git repo,运行 测试并部署到项目服务器
- Application Tester 测试所有东西
- 票已通过
- 将我的本地分支合并到主分支并推送
- 同样,使用 Jenkins 克隆主分支和 运行 测试
- 手动让 Jenkins 将 master 分支部署到生产服务器
我在上面提到了 Jenkins,对于希望实施新流程的开发团队来说,这可能有点过头了,现在我建议使用一些更基本的东西,例如 FTPloy,有一个很好的设置指南这里:https://daveismyname.com/website-deployment-with-bitbucket-and-ftploy-bp
让您的开发人员在本地工作很有意义。 PHP 的最大优势是反馈周期短,如果他们必须将可能损坏的东西推送到共享开发箱中,那么就会打破反馈周期短。您可以使用 Vagrant 之类的工具来简化开发人员在其开发机器上的环境设置。
至于其余部分:我会将您的 development/test 服务器与您的中央存储库分开。原因是当你在你的项目上工作时,你们很可能会开始为不同的发布版本使用分支。您的项目很可能会有一个 "Stable"/Currently released 分支和一个 "Feature" 分支(您正在处理的新内容)。直接发布到开发服务器对于我所建议的基本分支工作流来说甚至没有意义。
我在这里看到的另一个大问题是您的所有开发人员都可以发布到生产服务器。通常,即使在较小的组织中,在发布到生产服务器之前也会有指定的人员和指定的标准。我建议你这样做。另外,在发布之前,你们应该始终标记您要发布的版本。这应该是您发布工作流程的一部分。
您没有提及的另一件事是问题跟踪。就我而言,JIRA 是问题跟踪软件的黄金标准。我们喜欢使用 JIRA 和 Fisheye 来管理我们的代码并协调特定问题的提交。
所以,我在一家小型 event/entertainment 公司工作,最近接管了开发团队(大部分时间是 PHP 应用程序)。当前的工作流程看起来有点像这样:
- 每个项目都有一个开发服务器和一个生产服务器。没有本地开发环境,这意味着每个开发人员都可以访问 SSH 并直接在开发服务器上进行更改。
- 没有源代码控制或任何东西。
- 大多数时候,团队中的每个成员都独立完成一个项目。多个开发人员在同一个项目上工作的情况很少见。
- 更新生产服务器意味着使用 SFTP 将源从开发服务器传输到生产服务器。
我觉得这很可怕,所以我想出了这个主意:
- 将有一台中央开发服务器托管所有可用项目,该服务器将使用 Mercurial 进行源代码控制。
- 开发人员必须为每个项目设置本地开发环境并使用本地存储库。更改可以 pulled/pushed from/to 开发服务器上的中央存储库。
- 如果必须推出项目的新版本,开发人员只需将存储库克隆到生产服务器即可。
这种工作流程有什么完全不对的地方吗?我在我自己的项目中使用过 Mercurial,但我以前从未在团队中使用过它,而且我对所有这些团队管理的东西也很陌生。我会很感激一些建议。
谢谢, 克里斯
这是我工作了几年的工作流程...
多个生产服务器, 1 x 项目(测试)服务器, Git(比特桶), 詹金斯, JIRA(问题跟踪), HipChat(团队聊天) 1 x 大师 Git 分支, 1 个项目 Git 分支机构
- 提出新票(在 JRIA)
- 从 master 分支签出一个新的本地分支
- 完成工作
- 提交拉取请求的分支(post 一个 link 到团队聊天中的拉取请求,以便其他开发人员知道是否是 PR)并进行所需的任何更改
- 通过后,将我的本地分支合并到项目分支中
- 使用 Jenkins 克隆项目 git repo,运行 测试并部署到项目服务器
- Application Tester 测试所有东西
- 票已通过
- 将我的本地分支合并到主分支并推送
- 同样,使用 Jenkins 克隆主分支和 运行 测试
- 手动让 Jenkins 将 master 分支部署到生产服务器
我在上面提到了 Jenkins,对于希望实施新流程的开发团队来说,这可能有点过头了,现在我建议使用一些更基本的东西,例如 FTPloy,有一个很好的设置指南这里:https://daveismyname.com/website-deployment-with-bitbucket-and-ftploy-bp
让您的开发人员在本地工作很有意义。 PHP 的最大优势是反馈周期短,如果他们必须将可能损坏的东西推送到共享开发箱中,那么就会打破反馈周期短。您可以使用 Vagrant 之类的工具来简化开发人员在其开发机器上的环境设置。
至于其余部分:我会将您的 development/test 服务器与您的中央存储库分开。原因是当你在你的项目上工作时,你们很可能会开始为不同的发布版本使用分支。您的项目很可能会有一个 "Stable"/Currently released 分支和一个 "Feature" 分支(您正在处理的新内容)。直接发布到开发服务器对于我所建议的基本分支工作流来说甚至没有意义。
我在这里看到的另一个大问题是您的所有开发人员都可以发布到生产服务器。通常,即使在较小的组织中,在发布到生产服务器之前也会有指定的人员和指定的标准。我建议你这样做。另外,在发布之前,你们应该始终标记您要发布的版本。这应该是您发布工作流程的一部分。
您没有提及的另一件事是问题跟踪。就我而言,JIRA 是问题跟踪软件的黄金标准。我们喜欢使用 JIRA 和 Fisheye 来管理我们的代码并协调特定问题的提交。