Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 持续集成和web部署工作流_C#_Git_Deployment_Continuous Integration_Teamcity - Fatal编程技术网

C# 持续集成和web部署工作流

C# 持续集成和web部署工作流,c#,git,deployment,continuous-integration,teamcity,C#,Git,Deployment,Continuous Integration,Teamcity,我们正在努力改进SDLC的几个方面。我们现在拥有的是以下内容,这些都是比几年前更新的光年: 代码:我们主要是一家.Net商店。我们主要开发web应用程序(MVC/SQLServer)。但我们也有一些批处理控制台应用程序 SCM:Git和企业GitHub。大多数工作直接在主分支(队列boo-his)中完成,但我们认识到需要转移到分支模型。我们将实现某种风格的 CI服务器:团队城市。一两年前,我们迫切需要设置部署自动化,以避免充满危险的手动脚本。我们现在使用TeamCity通过PowerShell

我们正在努力改进SDLC的几个方面。我们现在拥有的是以下内容,这些都是比几年前更新的光年:

  • 代码:我们主要是一家.Net商店。我们主要开发web应用程序(MVC/SQLServer)。但我们也有一些批处理控制台应用程序
  • SCM:Git和企业GitHub。大多数工作直接在主分支(队列boo-his)中完成,但我们认识到需要转移到分支模型。我们将实现某种风格的
  • CI服务器:团队城市。一两年前,我们迫切需要设置部署自动化,以避免充满危险的手动脚本。我们现在使用TeamCity通过PowerShell启动部署脚本。(它使用msbuild来简单地构建目标配置——标准是调试和发布;我们已经在每个解决方案中设置了Dev、QA和Prod配置——在Visual Studio解决方案中定义了这些配置。)遗憾的是,我们还没有将TeamCity真正用于其预期目的,即持续集成。为此,我们需要实现TDD。部署自动化从每个存储库的主分支提取
  • 环境:我们有3个环境,每个环境都有专用的web、批处理和数据库服务器。我们称它们为Dev、QA和Prod。Dev是我们的测试环境。QA是供最终用户测试的。Prod就是Prod。我们的部署自动化通常会将每个应用程序一次推送到每个环境。它目前无法处理将同一应用程序推送到单个环境中的多个位置的问题
请注意,我们开始遇到需要进行并行开发的情况:一个特性正在一个分支中工作;另一个分支中的另一个;还有一个热修复程序。很明显,在master中做任何事情都是不可接受的

以下是我想去的地方:

  • 在Git中开始一个分支模型
  • 将部署自动化从TeamCity转移到自定义、健壮的部署工具中
  • 实现TDD
  • 利用TeamCity实现其预期目的,实现持续集成
这些是高层次的目标,我对如何开始这样做(特别是部署自动化)有一些粗略的想法。然而,我有一些相当大的悬而未决的问题阻碍了我的总体规划。以下是我希望So社区提供的信息:

  • 当您执行CI并启动自动化测试时,您会针对哪个分支执行此操作?我认为,从理论上讲,您不希望在“开发”和(显然)“主”分支中出现“坏”代码。您是否反对“开发”或所有分支
  • 您是在将代码移动到prod之前还是之后合并到master中?换言之,你是从开发还是从掌握推动
  • 有时,我们需要测试(至少在QA中,可能在开发中)并行更改,比如错误修复和特性。您是否确实建立了多个测试网站(例如myappqa1.blah.com和myappqa2.blah.com等)?这些多个环境如何在您的部署自动化中发挥作用
  • 出于好奇,您是否每晚都进行构建——如果是,针对哪个分支?您是否在任何地方部署此夜间构建
  • 你如何包装你的应用(即商店发布)?现在,我们使用TeamCity和PowerShell对VS中定义的配置运行msbuild。它将把所有环境构建放在一个zip文件中。这被存储为TeamCity构建的工件。下面是我所说内容的一个可视化示例:然后另一个脚本将从zip文件中选择合适的环境并进行部署。我们应该以某种方式将发布包存储在TeamCity或Git(使用“发布”功能)中吗
  • 与部署自动化相关:您是部署以前打包/构建的应用程序,还是一次性构建和部署所有应用程序
  • 非常感谢您的反馈

    谢谢 Tom

    作为(TeamCity刚结束时就可以使用的工具,可能就是您想要的工具)的开发人员,我可以尝试回答大部分问题

    当您执行CI并启动自动化测试时,您会执行哪些分支 这是反对的吗?我在想,从理论上说,你不想“破碎” 在“开发”和(显然是)“主”分支中编写代码。你踢吗 CI反对“发展”还是所有分支

    我们遵循“按规则分支”和“按例外分支”模型,其中开发要么针对“发布”分支进行,要么针对主干/主分支进行。功能分支也可以存在于本地开发中,但它们本身并不构建并发布到集成和扩展中(即,它们与“发布”分支合并,无论是主干/主分支还是单独分支)

    您可以在中阅读有关此过程的更多信息

    您是在将代码移动到prod之前还是之后合并到master中? 换言之,你是从开发还是从掌握推动

    强烈建议不要为单个环境保留单独的分支。我知道这是最近所有分布式源代码控制系统的一种趋势,但根据我们的经验,如果不严格遵守规则,它会导致许多问题。主要问题是:缺少/忘记合并、从一个环境到下一个环境的不兼容合并、未经测试的代码意外合并到新环境中,等等

    因此,为了回答这个问题,分支代码(用于“按规则分支”)或主干/主代码(用于“按例外分支”)是在发布到以前的测试环境后推送到生产中的代码

    有时我们需要并行测试(至少在QA中,可能在开发中) 更改,如错误修复和功能。你真的设置了多个 测试网站(如myappqa1.blah.com和myappqa2.blah.com等)? 这些多个环境如何在您的部署中发挥作用 自动化

    这种类型的测试本质上是一种预集成测试,因为测试人员使用