我们最近(最近2个月)开始使用TeamCity进行部署。这让我们了解了很多关于实际使用SC,陷阱以及在一个有多个项目的团队中工作的事情。但是,我们仍然不清楚如何最好地使用树干,分支和标签。
我们目前的流程是:
我听说其他开发人员说我们应该只从主干发布,而且我确信在发布到生产时这是真的。但是,在分支准备好进行测试的阶段,我们应该合并回主干然后释放到我们的测试环境,或者我们应该这样做是不合适的?
我考虑的另一种方法是只有一个名为TEST的分支,然后总是从那里合并并释放到测试环境,但这种方法也许存在隐藏的陷阱。
请问关于这个主题的一些指导/建议吗?你怎么做的?
我不会在这篇文章中提到标签的主题,因为据我所知它可能会使问题复杂化。
提前致谢 dotdev
答案 0 :(得分:4)
我发现在一个分支上强制所有开发都会迫使开发人员小心并考虑所有工作。我已经看到使用每个功能分支,但我总是发现它有问题:
如果所有开发人员都在一个分支上工作,那么就会停止合并,因为没有任何东西可以合并。开发人员从不不知道某人的变更,因为它在分支机构中。开发人员将保持彼此一致。是的,你失去了挑选和选择功能的能力,但这最好在冲刺之前完成。
那么,我从行李箱中释放?不,我从分公司发布。您将在下一个版本中完成大部分开发工作。现在,它只是错误修复,你只需要一两个开发人员来测试测试中发现的错误。
这是您创建发布分支时的情况。大多数开发人员将继续使用 trunk (或任何你称之为的),并且发布中发现的错误在分支上得到修复。当您发布时,您可以标记并释放分支。如果您需要制作中间版本以修复错误,可以使用相同的分支。
例如:我们在1.2版本的trunk上工作。当我们完成功能完成的工作时,我将创建一个版本1.2分支。现在,版本1.2上的所有工作都在分支上,我未来发布的工作(可能是1.3)将继续在trunk上运行。当我们完成版本1.2的工作时,我们标记分支并从分支发布。
版本1.2中发现的错误迟早需要修复。 Trunk已经是1.3了。但是,我们只是在1.2分支上进行错误修复,然后从那里做1.2.1。
有时我需要功能分支。例如,我有一个功能需要一段时间才能完成,并在将来实施。在这种情况下,我将创建一个功能分支,并允许开发人员处理它。但是,开发人员必须继续将父分支合并到该功能分支中,以跟上所有更改。并且,当他们完成该功能的工作时,我们将父分支合并到功能分支中,测试并确保一切正常,然后将功能分支合并到父分支中,并确保父分支与功能分支匹配。
所以,回顾一下:
重点是我们在不必要时尽量避免分支,并将合并保持在最低限度。我不关心合并算法有多棒,或者合并是多么自动化,合并是一个草率的过程,很少有人知道如何正确地做到这一点(或者至少要努力正确地做到这一点)。
创建一个分支就像创建一个分支:一旦你创建一个分支,你必须观察它并倾向于它,并确保它没有麻烦。
答案 1 :(得分:1)
以下是我的建议:
1)在Trunk分支上进行所有开发并将其用于测试。我假设您有多个功能/错误同时处理。我会避免为每个功能创建单独的分支,除非您经常合并从主干到功能分支的更改。
2)准备好发布后,在此时从Trunk创建一个新的RELEASE分支。将分支部署到QA / Staging环境以进行测试。
3)开发人员可以开始处理新功能,并在创建RELEASE分支后开始检入Trunk的更改。测试期间发现的任何回归问题将首先在RELEASE分支中修复,然后合并回MAIN。
4)然后,任何对RELEASE分支中代码的更改都将被推送到QA / Staging进行进一步测试。
5)一旦发布完成,生产中发现的任何错误都将在RELEASE分支中修复并热修复为Prod并合并回Trunk。
我建议为每个RELEASE创建一个新分支,然后定期删除旧的RELEASE分支而不是使用标签。
所以我的建议是始终从RELEASE分支发布到生产。由于您使用的是teamcity,因此您还应考虑创建持续集成构建(即每次签入时构建项目)