使用Maven、TeamCity和TFS的分支策略

5
我被委托更新我们的构建流程,以使其更加高效。我花了一周时间阅读最佳实践和策略,但仍未找到解决我们当前问题的方案。
背景:目前我们只有一个庞大的构建/应用程序,需要被拆分成至少四个应用程序,并具有一些共享库。我们目前不会分支,除非绝对必须。我们有一个TeamCity构建,在每次TFS检入时进行构建。当我们准备发布时,我们会进行代码冻结,并且只检入在QA中发现的错误修复。显然,这是一种糟糕的做法,我们终于得到了批准来改变它。
建议的解决方案:拆分应用程序,为每个应用程序设置不同的发布周期,从Ant转移到Maven,并按版本发布进行分支。
分支 - 现在我们只有一个主干在源代码控制中。我认为我们想在准备好发布时从主干分支,并针对在QA中发现的错误更新分支。当构建准备好发布时,将分支更改合并回主干。
以下是我计划如何设置TFS。
+Apps
    +App1
        +Components
            +Core
            +Web
        +Branches
    +App2
        +Components
            +Core
            +Web
        +Branches
    +Libraries
        +Lib1
        +Lib2
        +Branches

考虑到管理所有POM和POM中的版本似乎现在太困难了。我已经阅读了有关Maven发布插件的信息,但我不确定它是否可以按照我们想要的方式进行分支。
下一个问题是让TeamCity工作起来。我考虑为每个应用程序设置3个TeamCity项目。一个开发项目,始终指向主干,一个QA项目,用于测试QA构建,并且一个生产项目,用于构建热修复更改。每次新的版本通过QA时,我都需要更新QA TeamCity项目以指向新的版本分支,并更新TeamCity中的发布版本号。当该版本通过QA时,我必须更新生产TeamCity项目以指向刚刚通过QA的分支,并更新生成的版本号以匹配QA中刚刚通过的版本号。
肯定有比这更好的策略。
问题:
1. 我应该将这些分支文件夹放在哪里?
2. QA构建是否仍然应该是快照,直到构建进入预生产环境?
3. 如何配置TeamCity以获取这些分支,而无需更改每个版本的源路径?
4. 是否应该为每个应用程序设置父POM,以确保开发人员使用的所有依赖项都已编译并更新?

请查看我的有关TFS分支策略的帖子。它可能会帮助回答你问题的一部分。https://dev59.com/02025IYBdhLWcg3w6aYX#6444910 - Daniel
1个回答

0

我想质疑你认为应用程序应该有不同的发布周期的想法。模块化对于代码质量来说是一件好事,但如果你的模块处于不同的发布周期,就会引入很多开销。特别是版本管理变得相当繁琐,如果出现错误,可能会引入运行时错误。

这些单独的应用程序之间如何相关?它们之间是否存在依赖关系(也许通过共享库)?它们是否彼此通信?它们是否一起部署?

如果没有必要将它们放在不同的发布周期中,那么最好将它们放在一起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接