所以回答我自己的问题(对不起),我最终采取的方法是简化我的分支并像这样配置 TeamCity/Octopus...
分支策略
我已经搬家了
--开发
--主要
--发布
----发布1
----发布2
到
--大师
--发布
----发布1
----发布2
Master 是大多数开发人员工作的地方,当我们准备好发布时,我们有一个截止点并将 master 合并到一个新的发布分支中。
发布分支被部署以进行测试,并且测试中的任何修复都在发布分支上进行。
测试完成后,我们会从该分支部署到实时/生产环境。
这意味着我们测试的二进制文件与我们部署到实时/生产环境的二进制文件完全相同。
团队城市
在 TeamCity 中,每次签到时都会自动构建 master。然后将包推送到八达通。在这种情况下,八达通充当存储库。 TeamCity 还在 Octopus 上创建版本。所以应该是checkin->build->create release->deploy。
为此,我有一个 VCS Root 并有一个名为 Build-Master 的构建配置。这使用结帐规则来确保我只使用主分支。我使用 Ocotpus 打包来构建包,然后使用 TeamCity 中的 OctopusDeploy 运行器自动创建发布并部署到开发服务器。
版本不同。我想手动部署到测试服务器,而不是每次签入时。高兴时将其推广到实时生产服务器。
测试中的任何修复都将在发布分支中进行并部署到测试。
测试完成后,我们会升级为 live 并在发布分支上进行任何修补程序。显然,所有的修复程序/热修复程序都被合并到 master 中。
因此,在 TeamCity 中,为了实现这一点,我有一个名为 Build-Release 的构建配置。同样,我使用结帐规则来确保我正在处理正确的发布分支。
构建使用 OctoPack 创建一个包,但是这次它没有推送到 Octopus。
八达通
Octopus 有一个专门用于将 master 部署到我们的开发服务器的项目,例如 projectnamehere-dev。
在 Octopus 中,我有一个单独的测试/生产项目。我已经设置了一个指向 TeamCity 的外部提要,因此我可以获取在 TeamCity 中创建的包。这是在 Library->External Feeds 中设置的。
所以,部署到测试。我在 TFS 中创建发布分支并给它一个版本号,1,2,3 等。然后我将 Build-Release 构建配置更改为指向这个新分支。更改版本号。
然后在 Octopus 中,我创建一个版本,选择这个包并部署进行测试。测试中的任何修复都在此发布分支上进行。我只是再次构建包并创建一个新版本并选择新包。
测试完成后,在 Octopus 中,我只是将最后一个版本推广到实时生产服务器。
Octopus 中的频道用于这两个项目,因为它们具有不同的生命周期。我还创建了两个新的生命周期,默认是 dev/test/prod。我只创建了一个开发人员,然后进行了测试/生产。
希望这会有所帮助。