我们有一个小型 Scrum 团队,负责开发一个拥有大量用户的网站。我们想改进我们的开发和发布/部署过程,但是那里有很多概念,在我们看来并不完美。由于我们不是唯一一家开发网站的公司,因此我认为在这里询问可能是个好主意;)
首先,软件状况不佳,因此无法进行持续交付或持续部署等事情,因为测试覆盖率差,而且我们无法很快改变。
我们有两周的 sprint,所以我们在那段时间开发新功能或解决 bug,在最后的 sprint 会议之后,我们将功能分支合并到 master(我们使用 git 中的功能分支和 pull-request 进行审查和合并),做一些测试,并将 master 部署到公共 beta 环境中。在那里,我们通常会发现一些错误,解决它们,然后我们将主要的包含 beta 修复程序部署到生产环境中。之后,我们开始下一个 sprint。
但这个过程远非完美。首先,在我们的 sprint review 会议上展示所有这些分支的特性是很困难的,而且因为我们只有一个被部署的主分支,我们不能轻易地将修补程序部署到不同的环境中。有时我们需要更多时间在我们的 beta 环境中进行测试,因此我们无法将新功能合并到 master 或相同的生产中,一旦部署,如果我们已经在 beta 测试新功能,我们将无法部署修补程序。如果我们预计由于较大的变化而在测试版或生产中出现错误,那么开发也不得不将功能分支保留更长的时间,因此稍后合并功能分支变得越来越痛苦。
首先,我们考虑了长期运行的分支,例如用于开发、生产和测试版的 master。所以我们可以将我们想要的任何特性合并到三个分支之一中。但是我们真的很喜欢处理拉取请求(评论、反馈和合并后删除功能分支),使用起来真的很好,但我们只能将拉取请求分支应用到另一个分支。所以在这里,我们可以在不删除分支的情况下合并到 master,并且必须切换到另一个工具来将功能合并到 beta 或生产,或者为 beta 和生产创建新的 pull request。它以这种方式工作,但它不是一个很好的工作流程,只合并到一个主分支。
我们还考虑了 git-flow(Vincent Driessen 的分支模型),它看起来不错,但它似乎更适合具有传统发布周期和版本控制的软件,而不是 100% 用于 Web 应用程序,它没有真正的版本,但可以部署一切冲刺后准备就绪。它解决了修补程序问题,有一个额外的开发分支,但它需要发布版本。所以我们可以创建一个发布分支,解决问题,将其发布到生产环境并删除发布分支。我们可以使用发布分支打开合并到 master 的拉取请求,但是如果我们想将其发布到 beta 版(我们使用 capistrano 进行部署),就会出现问题,因为分支会在每个 sprint 中更改。如果我们想在我们的 beta 环境中测试功能怎么办?我们可以使用发布分支进行测试,但是这种方式发布到生产必须等到发布/测试分支中的所有功能都准备好。如果大型功能的测试需要很长时间,我们就无法将小型更新上传到生产环境。
下一个问题是版本控制。我们使用 jira,jira 喜欢使用版本来发布。我们可以使用“1,2,3”之类的版本...,但是一个冲刺应该是一个版本吗?感觉不对,因为 sprint 计划与发布计划不一样,还是在开发 Web 应用程序时应该一样?因为有时我们会在一个 sprint 中开发功能,这些功能需要更长的时间,并且会在接下来的 1-2 个 sprint 完成后发布。使用 git-flow,这些更改在准备好之前无法合并到开发中,因为每个版本都是从开发分支分支出来的。所以这样一来,有些特征分支很长一段时间没有合并,合并变得越来越困难。这与持续集成相反。
最后但同样重要的是,部署和 QA 流程不太适合 scrum,我们没有自己的 Web 运营团队,当 sprint 准备好时,产品负责人必须审查故事,我们必须进行测试他们,将它们部署到 beta/production,并且必须立即解决其中的问题,这也会中断或下一个 sprint。我们不确定何时是合并功能分支的合适时间?在审查会议之前?这样我们可以将产品所有者不接受的特性合并到应该很快发布的分支中,但是如果我们不合并它们,我们必须在它自己的分支中演示每个特性并合并每个接受的特性分支,所以集成和测试只能在 sprint 评审会议之后开始。集成和测试可能需要几天时间并且需要开发资源,那么下一个sprint应该什么时候开始呢?发布到生产后?但是这样我们就不能每两周开始一个 sprint,也不是每个开发人员都需要进行集成和 QA,那么他们应该做什么呢?目前,我们在上一个 sprint 的审查会议之后立即开始下一个 sprint 的计划会议,但是如果我们这样做,我们不确定需要多少时间来发布从 sprint 中汲取资源的...
那么如何发布 Web 应用程序呢?您使用什么工作流程?如果我们想在工作流中集成拉取请求,最好的方法是什么?您如何将 QA 和部署集成到 Scrum 工作流程中?