Team City针对多阶段部署的最佳实践是什么?

时间:2011-10-14 19:00:15

标签: deployment continuous-integration teamcity

我们有3个环境:

  • 开发:Team City在这里部署Subversion上的Subversion提交。
  • 暂存:此处完成用户接受,对于发布候选版本。
  • 生产:当UAT通过时,会在此处部署传递代码集。

我们正在使用Team City,并且只对我们的开发环境进行持续集成设置。我不想为Team City所做的每个开发部署保存工件。我希望指定人员能够触发构建配置,将部署成功的开发部署到我们的登台服务器。

然后,我希望每个登台部署都能保存工件。当暂存部署通过UAT时,我想将该包部署到Production。

我不确定如何在Team City中进行设置。我正在使用6.5.4版本,我知道有一个“推广...”动作/触发器,但我认为这取决于保存的工件。我不希望每次都将开发部署保存为工件,但我确实希望运行登台部署的人能够指定要部署到登台的成功开发部署。

我知道可能有多种方法可以做到这一点,是否有最佳做法?您的设置是什么?为什么推荐它?

更新

到目前为止,我有一个答案,这是我们内部考虑过的一个想法。我真的想知道是否有人通过Team City本身部署到临时/生产环境的方式有点自动化,只有具有某些角色/权限的人才能运行部署脚本进行生产而不必手动处理任何一种神器包。任何人吗?

更新2

我还有1天奖励赏金,我认为下面的答案没有回答我的问题,但重读后我发现我的问题不是我想的那样。

有没有办法使用Team City进行某种自动部署到登台/制作环境?

3 个答案:

答案 0 :(得分:15)

我认为你实际上在这里问两个不同的问题;一个是关于控制TeamCity构建的访问权限,另一个是关于工件管理的后勤。


关于权限,我假设您的意思是"只有具有特定角色/权限的人才能运行部署脚本进行生产"您对Julien的回应是,您可能不希望开发人员直接部署到生产环境,但您 希望他们能够在项目中看到其他版本。这可能也类似于Julien的情景,当时IT部门采取了这个过程"离线"来自TeamCity(无论是那个,还是它只是IT在做IT所做的事情,坚持认为他们必须使用一个单独的,完全低效的流程,因为"这就是我们这样做的方式" - 不要## 39;让我开始吧!)

问题很简单,TeamCity中的所有权限都应用于项目,而不是 build ,所以如果你有一个包含所有构建的项目,没有能力将权限粒度应用于开发与生产构建。我之前曾用两种方式处理过这个问题:

  1. 处理社交活动。每个人都知道他们的责任是什么,而且你不会经营你不应该经营的事情。如果您这样做,它会被审核并追溯到您的身边。在成熟时工作正常,明确责任,而不是遵守要求,禁止它。
  2. 创建单独的项目。我不喜欢这样做,但它 解决问题。您仍然可以使用来自其他项目的工件,这意味着您最终会得到一个包含构建的项目,这些构建部署到您为所有开发人员访问的环境以及另一个敏感环境项目而感到高兴的环境。缺点是,如果生产构建失败,那么您可能希望获得支持的人员将无法访问它!

  3. 关于工件管理,在开发构建中保留它们没有问题,只需定义一个清理策略,如果您担心容量,它只会保留最后X版本的工件。很多人都希望确定他们会将相同的编译输出部署到每个环境中,这意味着一旦你构建它,你就要保留它以供以后使用。

    一旦您从开发部署中获得了这些文物,您就可以通过单独的构建将它们重新部署到其他环境中。您对配置转换存在问题(假设您正在使用它们),但请阅读this 2 part series以获取有关如何解决该问题的一些想法(我还没有接受它)详细但我相信他走在正确的轨道上。)

    这会回答你的问题吗?还有什么遗失吗?

答案 1 :(得分:8)

我们还使用TeamCity作为构建服务器,所以让我解释一下我们的设置。 我们有4个环境

  • Dev用于验证服务器环境中的提交的开发
  • 用于测试目的的质量保证
  • 暂存部署检查和一些UAT
  • 生产

我们只使用TeamCity部署到开发(夜间构建)和QA(按需)。 Dev构建使用trunk分支,QA构建使用用于RC的不同分支。

部署到分段和生产由IT团队管理,因此不是自动化的。

我们所做的是使用TeamCity从QA构建中生成工件。工件是为临时/生产部署发送的部署工具包。

那就是说,我不确定TeamCity是否会为您提供完全控制哪些构建可以提升到哪个环境。我们基本上使用分支在SVN端控制它,并为这些分支具有不同的构建。你可以(应该)以同样的方式管理它。因此,您可以确保部署的内容。

我知道您的需求可能与我们的需求略有不同,但我希望这有助于您找到最佳设置。

答案 2 :(得分:3)

我想您可能希望查看Octopus DeployBuildMaster之类的内容。它们为您尝试自动化的部署实践提供了一个很好的结构。这两个工具都很好地与TeamCity集成。

基本上,您将继续使用TeamCity进行CI,您也可以继续使用TeamCity部署到您的开发环境,但是您可以使用其中一个部署工具将(现有)构建升级到暂存和生产

编辑2014-02-05 - 更新

BuildMaster的制造商为其NuGet服务器工具ProGet Deploy提供了新的部署功能 - ProGet。它与Octopus Deploy非常相似,我自己还没有玩过它,所以Octopus可以更好地显示已经部署到哪些环境的版本;由于这一重要特征,我仍然使用BuildMaster。

此外,我目前正在使用TeamCity,BuildMaster和ProGet,我从不想回到没有自动构建。目前,我的所有应用程序都是通过BuildMaster构建和部署的。我的所有库项目都在TeamCity中构建并部署到ProGet。能够通过NuGet基础架构管理我的内部依赖项 nice