Deployment 多阶段部署的团队城市最佳实践是什么?

Deployment 多阶段部署的团队城市最佳实践是什么?,deployment,continuous-integration,teamcity,Deployment,Continuous Integration,Teamcity,我们有3个环境: 开发:Team City在此部署,用于在主干上提交Subversion 暂存:用户验收在这里完成,基于候选版本的构建 生产:当UAT通过时,将在此处部署通过的代码集 我们使用的是TeamCity,并且只有与开发环境的持续集成设置。我不想为TeamCity所做的每个开发部署保存工件。我希望指定的人员能够启动构建配置,将某个成功的开发部署部署部署到我们的暂存服务器 然后,我希望每个登台部署都保存工件。当登台部署通过UAT时,我希望将该包部署到生产环境中 我不知道如何在团队城市中

我们有3个环境:

  • 开发:Team City在此部署,用于在主干上提交Subversion
  • 暂存:用户验收在这里完成,基于候选版本的构建
  • 生产:当UAT通过时,将在此处部署通过的代码集
我们使用的是TeamCity,并且只有与开发环境的持续集成设置。我不想为TeamCity所做的每个开发部署保存工件。我希望指定的人员能够启动构建配置,将某个成功的开发部署部署部署到我们的暂存服务器

然后,我希望每个登台部署都保存工件。当登台部署通过UAT时,我希望将该包部署到生产环境中

我不知道如何在团队城市中设置此功能。我使用的是6.5.4版,我知道有一个“升级…”操作/触发器,但我认为这取决于保存的工件。我不希望每次都将开发部署保存为工件,但我确实希望运行登台部署的人员能够指定将哪个成功的开发部署部署部署到登台

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

更新:

到目前为止,我有一个答案,这是我们内部考虑过的一个想法。我真的很想知道是否有人有一种通过TeamCity本身自动部署到登台/生产环境的方法,只有具有特定角色/权限的人才能将部署脚本运行到生产环境,而不必手动处理任何类型的工件包。有人吗

更新2

我还有一天的时间来奖励赏金,我认为下面的答案没有回答我的问题,但在重新阅读后,我发现我的问题不是我所想的


是否有任何方法可以使用TeamCity进行某种类型的自动部署到暂存/生产环境?

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

  • 开发人员用于验证服务器环境中的提交的开发
  • 用于测试目的的QA
  • 准备部署检查和一些UAT
  • 生产
我们只使用TeamCity部署到开发(夜间构建)和QA(按需)。 Dev构建使用主干分支,QA构建使用用于RC的不同分支

过渡和生产的部署由IT团队管理,因此不是自动化的

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

也就是说,我不确定TeamCity是否会为您提供一个完整的控制,让您可以将哪个构建升级到哪个环境。我们基本上通过分支在SVN端控制这一点,并为这些分支提供不同的构建。你可以(应该)用同样的方法来管理它。因此,您可以确保部署了什么


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

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


关于权限,我假设您所说的“只有具有特定角色/权限的人才能将部署脚本运行到生产环境”,您对Julien的回答是,您可能不希望开发人员直接部署到生产环境,但您确实希望他们能够看到项目中的其他构建。这也可能类似于Julien的场景,当时它将流程从TeamCity“离线”(或者只是做它所做的事情,坚持他们必须使用一个单独的、完全低效的流程,因为“我们就是这样做的”-不要让我开始这么做!)

问题很简单,TeamCity中的所有权限都是针对项目而不是构建应用的,因此,如果您有一个项目包含所有构建,则无法将权限粒度应用于开发与生产构建。我以前用两种方法处理过这个问题:

  • 社会性地处理它。每个人都知道他们的责任是什么,而你不去做你不该做的事。如果你这样做了,它会经过审核并可追溯到你。当工作成熟、责任明确且不符合禁止它的合规要求时,工作正常
  • 创建单独的项目。我不喜欢这样做,但它确实解决了问题。您仍然可以使用来自另一个项目的工件,这意味着您只需完成一个项目,其中包含部署到您希望所有开发人员都能访问的环境的构建,以及另一个到敏感环境的项目。缺点是,如果生产构建失败,您可能想要支持的人将无法访问它
    关于工件管理,在开发构建中保留这些是没有问题的,只要定义一个清理策略,如果您担心容量的话,只保留来自上一个X构建的工件。许多人希望确定他们正在将相同的编译输出部署到每个环境中,这意味着一旦构建了它,您希望保留它以备将来使用

    一旦从开发人员部署中获得了这些构件,就可以通过单独的构建将它们重新部署到其他环境中。您可能会遇到配置转换的问题(假设您正在使用它们),但请阅读一些关于如何解决这一问题的想法(我还没有详细了解,但我相信他走在了正确的道路上)

    这回答了你的问题吗?还有什么东西不见了吗