多个分支机构的 TeamCity 最佳实践设置

Woo*_*Hoo 7 teamcity octopus-deploy

我正在寻找有关设置 TeamCity/Octopus 的最佳方法的建议。

目前我在 TFS2015 中有多个分支 - dev、main 和 release(目前我们为每个版本创建一个发布分支)。

我们的程序是在 dev 中开发并部署到 dev 环境。当我们准备好测试时,我们从 dev 合并到 main,然后从 main 部署到 test。高兴时,我们创建一个发布分支并从发布分支部署到现场。这是一个手动过程。

修补程序在发布分支上完成并部署到现场。然后我们合并回 main/dev。

我对此完全陌生,到目前为止在 VM 游乐场中我已经设置了 TFS2015、TeamCity 和 Octopus,并且可以登记到 TFS,在 TeamCity 上构建/创建包并从 Octopus 部署这个包。但...

  1. 我不确定我应该如何设置 TeamCity 和 Octopus 以与多个分支一起工作?每个分支的多个项目并生成不同的工件?

  2. 当我真正做到这一点时,我有一个 TFS VM,我计划在上面安装 TeamCity 和 Octopus 以及构建代理。这是一个坏主意吗?我应该为 TM 和 Octopus 创建一个新的虚拟机吗?

任何建议或最佳实践将不胜感激。

Bis*_*hoy 5

尽管您的问题范围很广,但一个好的答案必须涵盖许多细节才能完整。

让我尝试指出您需要进一步调查和配置的主要领域。

团队城市

可以将 VCS 根配置为通过分支规范侦听多个分支

VCS 根可以包含多个项目/解决方案,并且可以在 TeamCity 中通过多个步骤构建这些项目/解决方案。

鉴于 Team City 不支持条件构建步骤,您将需要一种不同的策略来允许您根据发布渠道/环境改变构建步骤(和参数)。

我推荐的方法是将构建拆分为每个发布渠道(目标环境)的构建定义。

  • DevFeature分支可以共享单个构建定义。
  • MasterHotfix分支可以共享单个构建定义,因为它们都发布到暂存/生产环境。
  • Release 分支将需要单独的构建定义并发布到 QA/测试环境。

这使您可以对每个发布通道的参数和配置进行细粒度控制。从Dev分支构建应用程序的调试版本,例如在主要版本 3,同时从Master主要版本 2 的分支构建发布版本。

每个构建定义都将有一个步骤将其工件/包发布到 Octopus Deploy,并指定工件所属的通道。

八达通部署

在 Octopus Deploy 中,定义渠道以反映发布渠道,也反映您的分支模型。

Develop, Test,Release是我的标准转到频道

每个通道都可以实施不同的生命周期,以限制通道可以部署到的环境以及应用程序在整个 ALM 周期中的进展情况。

我知道这不是一个完整的答案。但这是一个好的开始,我希望可以帮助您将问题提炼为更具体的技术细节。

  • 自 TeamCity 2020.1 起,支持条件构建步骤:https://www.jetbrains.com/teamcity/whatsnew/#version-2020-1-conditional-build-steps-for-unconditional-versatility (4认同)

Woo*_*Hoo 1

因此,回答我自己的问题(抱歉),我最终采取的方法是简化我的分支并像这样配置 TeamCity/Octopus...

分支策略

我已经从

--dev

- 主要的

- 发布

----发布1

----发布2

- 掌握

- 发布

----发布1

----发布2

Master 是大多数开发人员工作的地方,当我们准备好发布时,我们有一个截止点并将 master 合并到新的发布分支中。

部署发布分支进行测试,并且测试中的任何修复都在发布分支上进行。

测试完成后,我们从该分支部署到实时/生产。

这意味着我们测试的二进制文件与我们部署到实时/生产的二进制文件完全相同。

团队城

在 TeamCity 中,每次签入时都会自动构建 master。然后包裹被推送到八达通。在这种情况下,章鱼充当存储库。TeamCity 还在 Octopus 上创建版本。所以应该是签入->构建->创建发布->部署。

为此,我有一个 VCS 根目录并有一个名为 Build-Master 的构建配置。这使用结帐规则来确保我只使用主分支。我使用 Ocotpus 打包来构建包,然后使用 TeamCity 中的 OctopusDeploy 运行程序自动创建版本并部署到开发服务器。

发布方式不同。我想手动部署到测试服务器,而不是每次签入时部署。当高兴时将其推广到实时生产服务器。

测试中的任何修复都将针对发布分支进行并部署到测试。

测试完成后,我们将升级上线,并在发布分支上进行任何修补程序。显然,所有修复/修补程序都已合并到主版本中。

因此,在 TeamCity 中为了实现此目的,我有一个名为 Build-Release 的构建配置。再次,我使用签出规则来确保我正在处理正确的发布分支。

构建使用 OctoPack 创建一个包,但是这次它没有推送到 Octopus。

章鱼

Octopus有一个专门用于将master部署到我们的开发服务器的项目,例如projectnamehere-dev。

在 Octopus 中,我有一个单独的测试/生产项目。我已经设置了一个指向 TeamCity 的外部源,这样我就可以获取在 TeamCity 中创建的包。这是在“库”->“外部源”中设置的。

所以,要部署来测试。我在 TFS 中创建发布分支,并为其指定版本号 1、2、3 等。然后,我更改 Build-Release 构建配置以指向这个新分支。更改版本号。

然后在 Octopus 中,我创建一个版本,选择此包并部署以进行测试。测试中的任何修复都是在此版本分支上进行的。我只是再次构建该包并创建一个新版本并选择新包。

测试完成后,在 Octopus 中,我只是将最后一个版本升级到实时生产服务器。

这两个项目都使用了 Octopus 中的通道,因为它们具有不同的生命周期。我还创建了两个新的生命周期,默认是dev/test/prod。我只创建了一个开发人员,然后进行测试/生产。

希望这可以帮助。