gpt4 book ai didi

.net - AutoDeploy SQL 随 TeamCity 进行更改(Redgate 的替代方案?)

转载 作者:行者123 更新时间:2023-12-03 02:32:07 24 4
gpt4 key购买 nike

我正在使用 TeamCity 为我们的测试环境创建 .NET 应用程序的 CI 和自动部署(通过 SVN 进行源代码控制),一切进展顺利。我正处于想要自动执行数据库脚本的阶段。我做了一些搜索并阅读了几篇文章,例如 http://www.troyhunt.com/2011/02/automated-database-releases-with.html (troyhunt 的博客非常宝贵!),许多人似乎都指出使用 RedGate 软件来管理和部署更改。我有点担心让新工具处理脚本生成,所以我想知道是否还有其他可接受的方法值得研究。

我们当前的解决方案设计标准包括一个包含数据库相关文件(例如我们的 orm 数据库)的项目。它还包含一系列文件夹,其中包含我们的更改脚本,如下所示。

MySolution
> MySolution.Data
> 3.0 Scripts
* 01 - UpdateUserTable.sql
* 02 - UpdateRoleTable.sql
> 3.1 Scripts
* 01 - CreateJobTable.sql
* 02 - InsertJobTypes.sql
* 03 - AndSoOn.sql

我相信这种结构很重要,因为虽然我们希望在 checkin 时自动部署到我们的测试环境,但我们部署实际版本的频率要低得多,而且我不确定 RedGate 的比较工具是否可以处理有时发生的更改级别。这就是为什么我更喜欢使用脚本的版本文件夹,然后在发布时增加次要版本以保持脚本版本整齐地包含。

有了这个预先存在的结构,我倾向于保留它并添加一个 TeamCity 构建定义,该定义可以在成功部署时应用数据库脚本。我想象我可以让 TeamCity 在预期路径内识别新添加到 SVN 的 .sql 文件,然后在服务器上执行这些文件,但也许我对开箱即用的期望太多。我过去曾使用 TFS 和 MSBUILD 以及自定义构建步骤实现过此类解决方案,但对 TeamCity 方式完全陌生。

是否已经有实现类似目标的流程?在我看来,这是一个相当正常的实现,我只是还无法找出如何实现。或者 RedGate 解决方案是我们应该追求的标准吗?

最佳答案

我两年前读过 Troy Hunt 的同一篇文章。这是一个启示,我很快就开始使用 SQL Source Control + SQL Compare + TC 来运行。这是一个很好的解决方案,但是有一些事情没有像我想要的那样工作。其中最主要的是 SQL 源代码控制不能(或不能)很好地配合分支/合并策略。此外,SQL 源代码控制是一个带外流程,需要开发人员接受培训、采用并了解其怪癖。它从未 Root 。我们的团队最终放弃了 RedGate,转而支持 TeamCity 驱动的 Entity Framework 迁移,并且我们没有回头。

对于您直接提出的问题:我认为您在这里尝试做的事情是可能的,尽管我认为寻找新添加的 SQL 脚本不一定是 TeamCity 的工作。 Red Gate 和 Entity Framework 都识别数据库本身中最近部署的脚本/迁移,并在确定应该开始应用更改的位置时引用该脚本/迁移。您可以在数据库中存储类似的值(“3.0”),或作为 TC 构建参数,然后使用 powershell 迭代较新的文件夹并使用 sqlcmd 应用最新的脚本。

不过,您可能会考虑考虑基于 EF 的迁移,特别是如果您采用了代码优先模型。如果您有兴趣,我可以更新此答案以更多地讨论我们如何做到这一点。

更新:

EF 代码优先迁移通过捕获迁移类中一组离散的数据库架构更改来工作。这个类有一个Up和一个 Down可以应用/反转特定批处理的架构更改的方法。这或多或少相当于 Ruby 和其他人的做法。

当您对实体模型进行更改(添加表、删除列、更改约束等)时,您可以通过调用 Add-Migration <DescriptionOfSchemaChange> 创建新的迁移类。在包管理器控制台中。这将生成名为 <timestamp>_<DescriptionOfSchemaChange>.cs 的新类。然后,您可以通过调用 Update-Database 在本地应用该迁移。 。 Entity Framework 为您管理具体细节,但您可以根据需要将任意 SQL 注入(inject)到迁移步骤中。 PluralSight 提供 great course涵盖这些概念。

迁移由可执行文件 migrate.exe 管理,它作为 Entity Framework NuGet 包的一部分进行部署。在 TeamCity 中,您可以使用 migrate.exe针对指定数据库运行迁移。首先,您必须复制migrate.exe位于保存迁移类的程序集的本地。然后你只需运行 migrate.exe使用数据库连接字符串作为参数针对该程序集。工作目录是迁移程序集的工作目录。

copy ..\..\packages\EntityFramework.5.0.0\tools\migrate.exe .

migrate.exe ASSEMBLY.dll /connectionString="CONNECTION_STRING" /connectionProviderName="System.Data.SqlClient"

关于.net - AutoDeploy SQL 随 TeamCity 进行更改(Redgate 的替代方案?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18589906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com