Bra*_*ant 6 sql-server msbuild ubuntu sql-server-data-tools .net-core
我正在构建一个托管在Ubuntu环境中的ASP.NET Core 2.0 Web API应用程序.到目前为止,我已经非常成功地在Ubuntu中构建和运行(针对.NET Core应用程序).
对于数据库,我的解决方案中包含一个SqlProj.该项目包括典型的东西,如表格,SP和部署前/后脚本.我正在使用以下命令(在我的基于Windows的开发机器上)来构建和部署此项目:
msbuild .\MyProject.DB.sqlproj /t:Build /t:Publish /P:SqlPublishProfilePath="./PublishProfiles/MyProject.DB.publish.xml"
Run Code Online (Sandbox Code Playgroud)
当我采用这种方法时,所有东西都能正确构建和部署; 但是,由于我将利用面向Ubuntu环境的.NET Core CLI命令+ CI/CD,我想做更多的事情:
dotnet msbuild .\MyProject.DB.sqlproj /t:Build /t:Publish /P:SqlPublishProfilePath="./PublishProfiles/MyProject.DB.publish.xml"
Run Code Online (Sandbox Code Playgroud)
在Windows中,我立即得到错误:
error MSB4019: The imported project "C:\Program Files\dotnet\sdk\2.1.4\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Run Code Online (Sandbox Code Playgroud)
基本上,我要问的是如何在Ubuntu环境中成功构建和部署SqlProj项目.我试过谷歌搜索,但到目前为止我没有运气.我发现的所有类似问题都是针对正在编辑.proj文件以定位其VS文件夹的SSDT的个人.所有这些人都在Windows中解决这个问题.这种方法在Ubuntu中不起作用,因为目标文件使用Windows注册表项.
编辑:我知道需要SSDT才能使用MSBuild执行这样的部署.我没有发现在Ubuntu中甚至可以安装/使用SSDT的证据.如果不是,也许有另一种解决方案?
仅供参考,我知道使用EF Core的代码优先方法是可行的.我正在尝试采用原始SP方法(以及利用索引)并使用SqlProj跟踪我的所有代码.这将全部存储并从Git仓库进行CI/CD.
您可以使用此 NuGet 包进行部署,而无需安装 SSDT https://www.nuget.org/packages/Microsoft.Data.Tools.Msbuild 我不知道它是否会在 Ubuntu 上运行或完全与 dotnet cli 集成
Azure Data Studio 现在有一个扩展,可让你使用 dotnet 工具构建数据库项目 (sqlproj)。构建项目的核心在于 SQL Server Tools 包,扩展在其中获取所需的“BuildDirectory”DLL 和目标依赖项。
虽然没有记录,但如果您想在 Azure Data Studio 之外进行完全无头设置,您可以遵循他们的 CLI 指南,https: //learn.microsoft.com/en-us/sql/azure-data-studio/extensions/ sql-database-project-extension-build-from-command-line?view=sql-server-ver15,而是从https://github.com/microsoft/sqltoolsservice/releases中的 RHEL 版本中提取必要的文件,然后遵循扩展文档的其余部分。这是一个演示该方法的工作 Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
RUN apt-get update \
&& apt-get install -y curl
# SSDT dlls and targets file used by Azure Data Studio Extension can be found in the SQL Tools Service project
RUN curl -sSL -o /tmp/sqltools.tar.gz https://github.com/microsoft/sqltoolsservice/releases/download/v3.0.0-release.181/Microsoft.SqlTools.ServiceLayer-rhel-x64-net6.0.tar.gz
# Extract files that are required per https://learn.microsoft.com/en-us/sql/azure-data-studio/extensions/sql-database-project-extension-build-from-command-line?view=sql-server-ver15
RUN mkdir /tmp/sqltools && tar -xzf /tmp/sqltools.tar.gz -C /tmp/sqltools && \
mkdir /app/BuildDirectory && cd /tmp/sqltools && cp \
Microsoft.Data.SqlClient.dll \
Microsoft.Data.Tools.Schema.Sql.dll \
Microsoft.Data.Tools.Schema.SqlTasks.targets \
Microsoft.Data.Tools.Schema.Tasks.Sql.dll \
Microsoft.Data.Tools.Utilities.dll \
Microsoft.SqlServer.Dac.dll \
Microsoft.SqlServer.Dac.Extensions.dll \
Microsoft.SqlServer.TransactSql.ScriptDom.dll \
Microsoft.SqlServer.Types.dll \
System.ComponentModel.Composition.dll \
System.IO.Packaging.dll \
/app/BuildDirectory && \
rm -r /tmp/sqltools
#dotnet build your-database-project.sqlproj /p:NetCoreBuild=true /p:NETCoreTargetsPath="/app/BuildDirectory"
Run Code Online (Sandbox Code Playgroud)
最后的注释命令显示了您可以在数据库项目目录中的容器内运行的内容。
然后,它还可以与利用 sqlpackage 的容器相结合,以实现完整的 dacpac 构建和发布自动化工具集。
我想在 2020 年重新审视这个问题,并更新我原来问题的答案。
我采用了不同的方法来构建部署 SQL Server 项目。我当前的方法是构建一个使用 vs2017-win2016 代理的管道,并使用它来构建 .dacpac。从那里,您构建一个部署管道以将 dacpac(从您的工件 drop)部署到 SQL Server 实例。
这种方法更好地适应了 DevOps 方法,并消除了与我之前的解决方案相关的手动流程。
您可以在这里阅读更多相关内容:
归档时间: |
|
查看次数: |
1270 次 |
最近记录: |