这是所有开发的常见问题(我希望我早点阅读它),而不仅仅是 ASP.NET。作为其开发人员之一,我的团队自然在内部使用BuildMaster进行整个发布过程,并且对于大多数场景来说它是免费的。在该工具中,我们能够执行所有标准 CI 构建以创建工件,然后设置自动化流程以将这些工件部署到我们内部或外部托管的 40 多台服务器中的任何一台,具体取决于特定的应用程序或环境.
由于您特别提到了部署到不同的测试环境,这是该工具的一个基本方面。这个想法是对你已经存在的环境工作流程(例如集成 -> QA -> 生产)进行建模,并从根本上促进从源代码控制到生产的整个构建过程。大多数时候,它就像添加一个将工件部署到环境中的部署操作一样简单,而其他时候它可能要复杂得多。
您还随便提到了配置文件更改是部署的一部分,这是 BuildMaster 的另一个内置组件。我们的想法是使用该工具本身作为所有配置文件和部署的中心枢纽,从而确保通过部署计划中的简单“部署配置文件”操作自动应用最新更改。
关于此过程,您没有提到的一件事是数据库部署方面。大多数 ASP.NET 应用程序都需要关联的数据库,否则它们可能只是静态 HTML 文件。每次部署都将数据库模式更新为适当的数据库版本,这一点至关重要。毫不奇怪,BuildMaster 中的一个模块也可以为您处理这个问题。这个想法是将 DDL-DML 脚本存储在工具本身中,并且只执行一次脚本每个环境,它确保您在每个环境中的所有数据库都是最新的,因为您的构建是通过它们部署的。其他脚本(例如存储过程、视图、触发器等)本质上是代码文件,因此属于源代码控制。在大多数情况下,这些 DROP-CREATE-CONFIGURE 类型的脚本每次都可以通过简单的部署操作运行。
大多数开发人员没有考虑的另一个部署难题是流程自动化。许多开发人员需要执行签核或填写变更请求表才能手动执行这些过程。同样,这一切都可以作为 BuildMaster 中自动化工作流程设置的一部分。您可以设置阻止程序,除非所有单元测试都已通过,否则不允许升级到 QA 环境,或者阻止升级到 Staging 环境,除非 QA 团队中的某个人批准构建并且您的问题跟踪工具中的所有问题都已解决/关闭那个特定的版本。
虽然我意识到我在答案中遗漏了 CC.NET,但我们的应用程序都是通过 BuildMaster 构建和部署的,因此我们不再需要它,尽管我们可以轻松地从放置位置获取工件并在以后的环境中部署它们。