使用 maven、teamcity 和 TFS 的分支策略

Posted

技术标签:

【中文标题】使用 maven、teamcity 和 TFS 的分支策略【英文标题】:Branching strategies with maven, teamcity and TFS 【发布时间】:2012-01-16 00:50:33 【问题描述】:

我现在的任务是更新我们的构建过程以提高效率,我花了一周时间阅读最佳实践和策略,但我仍然没有找到解决我们当前问题的方法。

背景

目前,我们有一个整体构建/应用程序,确实需要拆分为至少 4 个应用程序和一些共享库。除非绝对必要,否则我们目前不分支。我们有一个基于每次签入 TFS 的 teamcity 构建。当我们准备好发布时,我们会冻结代码,并且只签入修复在 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 的内部版本号。

肯定有比这个更好的策略。

问题

我应该把这些分支文件夹放在哪里?

在构建进入预生产之前,QA 构建是否应该仍然是快照?

如何配置 teamcity 以在不更改每个版本的源路径的情况下获取这些分支?

是否应该为每个应用程序提供父 POM,以便开发人员使用以确保其所有依赖项均已编译且是最新的?

【问题讨论】:

查看我关于 TFS 分支策略的帖子。它可能有助于回答您的部分问题。 ***.com/questions/5720661/… 【参考方案1】:

我只是想质疑您的想法,即您的应用程序应该处于不同的发布周期。模块化对于代码质量来说是一件好事,但如果您的模块处于不同的发布周期,则会引入大量开销。特别是,版本管理成为一个相当大的负担,如果你弄错了,你可能会引入运行时错误。

这些独立的应用程序如何相互关联?它们之间是否存在依赖关系(可能通过共享库)?他们互相交流吗?它们是一起部署的吗?

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

【讨论】:

以上是关于使用 maven、teamcity 和 TFS 的分支策略的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 testNG 和 Allure 从 TeamCity 中的 Maven 运行测试

如何在teamcity中覆盖maven项目版本

TeamCity插件开发maven失败

SonarQube + JaCoCo + TeamCity 模块名称错误

通过命令行从 TFS 签出存储库

如何让这个命令行脚本在 TeamCity 中工作?