使用maven发布多个长寿分支

时间:2012-08-08 00:40:13

标签: java maven version-control jenkins release-management

所以这里是Subversion,Jenkins,Beanstalk设置:

  • trunk / - >发展主线
    • CI构建于checkin
    • 成功的CI构建产生推动“测试”Beanstalk环境的CD构建
  • branches / qa / - >目前的候选人
    • CI构建于checkin
    • 成功的CI构建产生推动“QA”Beanstalk环境的CD构建
  • branches / prod / - >当前版本
    • CI构建于checkin
    • 成功的CI构建产生推动“Prod”Beanstalk环境的CD构建

基本上我想做的是:

  • 开发周期从trunk(trunk:0.1-SNAPSHOT)开始
  • 当开发周期完成时,分支到qa并且是qa循环。在trunk中开始下一个开发周期(trunk 0.2-SNAPSHOT,qa:0.1-SNAPSHOT)
  • 当qa循环完成时,分支到prod并执行maven释放。也开始下一个qa周期(主干0.2-SNAPSHOT,qa:0.2-SNAPSHOT,prod:0.1)

这个想法是短暂的冲刺,在每个结束时,一个开发循环结束并且qa循环开始。当qa循环完成后,它将被推送到生产环境。

我想保留分支并从分支合并到\而不是删除和重新创建。这个想法是,在qa中进行的任何修复都将合并回介绍主干,并且在prod中进行的任何更改都将合并回qa(并返回到主干)。

因此,prod是一个“热门”分支,代表了生产环境的当前状态。

这适用于一周开展短期冲刺的开发团队。

问题:

  1. 这个设置听起来如何?
  2. 我可以让maven行动正确,还是需要编写脚本呢?
  3. 你爸爸是谁?他做了什么?

2 个答案:

答案 0 :(得分:7)

我不推荐qa和prod分支。阅读颠覆最佳实践。我建议The SVN Book,特别是关于分支/合并的第4章。

即使是QA(通过标签),您也应该对每个版本进行版本控制。 Trunk用于当前的开发工作,标签用于已发布的版本(定义为“功能完整”,而不是它所处的环境),分支用于缺陷修复(除其他外)。

示例场景:

1.0版已投入生产,您的团队刚刚发布了2.0版QA进行测试,现在正在开发3.0版本。此时你将拥有:

  • / trunk(开发人员在3.0上工作)
  • /tags/2.0(用于质量保证)
  • /tags/1.0(生产中的历史)

如果您的QA团队在2.0中发现问题,您将创建2.0标记的分支。进行修复,合并到trunk然后将分支释放为2.0.1(另一个标记)。然后你将离开:

  • / trunk(开发人员使用3.0,+ 2.0缺陷修复程序)
  • /branches/2.0.*(使用*字符表示这是所有2.0。*修复程序将被提交的地方。如果在2.0代码中发现另一个缺陷,则可以重用此相同的分支)
  • /tags/2.0(原始标签QA正在测试缺陷)
  • /tags/2.0.1(2.0代码库,只有缺陷修复程序)
  • /tags/1.0(生产中的历史)

答案 1 :(得分:1)

我之前已经完成了一些关于分支和发布的类似工作,根据我的经验,你所描述的设置最终变得非常笨拙和官僚主义不久。

Domenic D.的答案非常接近我希望的那种设置,特别是对于少数开发人员。你拥有的分支越多,代码库的管理就越复杂,越有可能你是通过糟糕的合并做法引入错误。

有一件事你没有提到这一点很重要,在我看来,一开始就是你的办理登机手续。 SCM不是不完整工作的备份,您应该努力确保主线至少始终在构建。严格要求,最终会让每个人的生活更轻松。

但最重要的是,无论您采取何种释放程序,请确保您从团队中获得购买,并且不必将其“强制”到位。这表明你所提出的不正确可能会出现问题,很可能很快被忽视或被颠覆。