【发布时间】:2015-05-09 02:24:44
【问题描述】:
我们正在寻求改进 SDLC 的几个方面。我们现在拥有的是以下内容,与几年前相比,这些都是相当新的光年:
- 代码:我们主要是一家 .Net 商店。我们主要开发 Web 应用程序(MVC/SQL Server)。但我们也有一些批处理控制台应用程序。
- SCM:Git 和企业 GitHub。大多数工作直接在主分支(队列 boo-hiss)中完成,但我们认识到需要转向分支模型。我们将实现Vincent Driessen's model 的一些风格。
- CI 服务器:Team City。一两年前,我们迫切需要设置部署自动化以避免充满危险的手动脚本。我们现在使用 TeamCity 通过 PowerShell 启动部署脚本。 (它使用 msbuild 来简单地构建目标配置——标准是 Debug 和 Release;我们在每个解决方案中设置了 Dev、QA 和 Prod 配置——在 Visual Studio 解决方案中定义。)遗憾的是,我们还没有实际使用TeamCity 的预期目的是持续集成。为此,我们需要实现 TDD。部署自动化从每个存储库的主分支中提取。
- 环境:我们有 3 个环境,每个环境都有专用的 Web、批处理和数据库服务器。我们称他们为 Dev、QA 和 Prod。 Dev 是我们的测试环境。 QA 是供最终用户测试的。产品是产品。通常,我们的部署自动化会将每个应用程序推送到每个环境一次。它目前无法处理将同一应用推送到单个环境中的多个位置。
请注意,我们开始遇到需要进行并行开发的情况:一个功能正在一个分支中开发;另一个在另一个分支;和另一个修补程序。显然,在 master 中做所有事情是不可接受的。
这是我想去的地方:
- 在 Git 中开始一个分支模型。
- 将部署自动化从 Team City 移到自定义、强大的部署工具中。
- 实施 TDD。
- 将 TeamCity 用于其预期目的,即持续集成。
这些是高级目标,我对如何开始执行此操作(尤其是部署自动化)有粗略的想法。然而,我有一些相当大的悬而未决的问题让我的(哇哈哈)总体规划感到沮丧。以下是我希望 SO 社区提供的以下内容:
- 当您执行 CI 并启动自动化测试时,您针对哪些分支执行此操作?我认为,理论上,您不希望“开发”和(显然)“主”分支中的“损坏”代码。您是否针对“开发”或所有分支使用 CI?
- 在将代码移至 prod 之前或之后,您是否合并到 master 中?换句话说,你是从开发者还是从大师那里推到产品的?
- 有时我们需要测试(至少在 QA 中,可能在 Dev 中)并行更改,例如错误修复和功能。您是否确实设置了多个测试网站(例如 myappqa1.blah.com 和 myappqa2.blah.com 等)?这些多种环境如何影响您的部署自动化?
- 出于好奇,您是否进行夜间构建——如果是,针对哪个分支?您会在任何地方部署此夜间构建吗?
- 您如何打包您的应用程序(即商店版本)?现在,我们使用 TeamCity 和 PowerShell 针对 VS 中定义的配置运行 msbuild。它将所有环境构建放入一个 zip 文件中。这存储为 TeamCity 构建的工件。这是我在谈论的内容的视觉效果: 然后另一个脚本将从 zip 文件中选择正确的环境并进行部署。我们应该以某种方式将发布包存储在 Team City 或 Git(使用“发布”功能)中吗?
- 与您的部署自动化相关:您是部署以前打包/构建的应用,还是一举构建和部署所有应用?
非常感谢您的反馈!
谢谢 汤姆
【问题讨论】:
-
这本书(“持续集成”)会给你一些答案...考虑一次将你的问题缩小到一个具体问题,并避免通常要求的“你是如何做到的”短语意见,而不是答案。
-
您的问题,虽然解释和布局非常清楚,但可能正是too broad 的定义。阿列克谢的建议很好。
-
@AlexeiLevenkov 有几本 CI 书籍......
-
@AlexeiLevenkov,Nanhydrin 这是一个广泛的问题,我同意,但这些事情(SCM、CI、DA)都不是在真空中完成的。因此,需要一个全面的概述。所有这些主题都相关。谢谢。而且,是的,我正在征求意见。
-
请注意,“征求意见”是对关闭理由的投票:“主要基于意见 - 许多好的问题会根据专家经验产生一定程度的意见,但对这个问题的回答会倾向于几乎完全基于意见,而不是事实、参考资料或特定专业知识。”。您的帖子本身没有任何问题,对于此类问题,它只是一个错误的地方。
标签: c# git deployment continuous-integration teamcity