【问题标题】:VSTS Build Task that runs script on multiple shards在多个分片上运行脚本的 VSTS 构建任务
【发布时间】:2018-04-15 16:16:51
【问题描述】:

我们使用 Azure SQL 数据库,并使用弹性库拥有“分片”结构。我们正在开始过渡到 Visual Studio Team Services,并希望使用他们的构建和发布过程来部署到开发和生产环境。

是否有一个构建任务会在我们所有的分片上执行 SQL 脚本(确保它成功运行并遵循一些重试条件)。脚本将是幂等的。

如果我们还可以有一个任务来从我们的 EF 实体模型生成 SQL 脚本,那么奖励积分。如果没有,我的计划是找到一种方法来创建脚本作为构建过程的一部分,并让发行版执行它。

【问题讨论】:

  • VSTS 中没有这样的任务。相反,您可以参考多分片查询 (docs.microsoft.com/en-us/azure/sql-database/…)。
  • @MarinaLiu-MSFT 我将如何在发布过程中执行多分片查询?
  • 多分片查询应该在您自己的代码中执行。对于外部,如 VSTS 构建/发布,没有这样的任务。

标签: azure-devops azure-sql-database azure-pipelines-build-task


【解决方案1】:

我可以帮助您通过构建/发布过程从您的 EF 模型生成 SQL 脚本。为了达到你需要的:

  1. 将您的 EF 升级到 6.2 或更高版本。

  2. 从“/packages/EntityFramework.6.2.0/tools/”获取“migrate.exe”并放入您的项目中(不要忘记将属性更改为“始终复制”,这样它将与其他 DLL 一起复制在构建过程中)

  3. 创建将运行 migrate.exe 并在目标数据库上应用 SQL 脚本的 PowerShell 脚本。您的脚本可能如下所示

param 
(
    [string] [Parameter(Mandatory=$true)] $dbserver,
    [string] [Parameter(Mandatory=$true)] $dbname,
    [string] [Parameter(Mandatory=$true)] $dbserverlogin,
    [string] [Parameter(Mandatory=$true)] $dbserverpassword,
    [string] [Parameter(Mandatory=$true)] $rootPath,
    [string] [Parameter(Mandatory=$true)] $buildAliasName
)

& "$rootPath\migrate.exe" Context.dll /connectionProviderName="System.Data.SqlClient" /connectionString="Server=tcp:$dbserver.database.windows.net,1433;Initial Catalog=$dbname;Persist Security Info=False;User ID=$dbserverlogin;Password=$dbserverpassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" /startUpDirectory=$rootPath /verbose /scriptFile=1.SQL
Write-Host "Running migration script..."
& "SQLCMD" -S "$dbserver.database.windows.net" -U $dbserverlogin@$dbserver -P $dbserverpassword -d $dbname  -i 1.SQL

Context.dll 是一个带有 EF 数据上下文的程序集。脚本将运行 migrate.exe,它将生成输出脚本到1.SQL 文件。之后,它将使用 SQLCMD.exe 运行此脚本。请注意,默认情况下 SQLCMD.exe 在 VSTS 中使用 HOSTED 代理可用。如果您使用的是“HOSTED 2017”,则需要指定 SQLCMD.exe 的完整路径(在撰写本文时,此路径为 c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE

【讨论】:

    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2016-07-28
    • 2019-01-07
    • 2018-07-04
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多