【发布时间】:2013-07-25 08:10:36
【问题描述】:
我正在尝试使用 TeamCity 8 和 MSBuild Publish 任务将 Visual Studio 2012 SSDT 项目部署到 Sql Server,但部署失败。
当我查看 TeamCity 日志并在构建配置中使用 /v:diag 开关时,我发现 MSBuild 出于未知原因搜索 MyProject.sqlproj.publish.sql对于 MyProject.sqlproj.dacpac 文件。
确切的错误:
[SqlPublishTask] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(1233, 5): 文件 "C:\Program Files\TeamCity\buildAgent\work\abf8bc05a2cfe7f\*MyProject*\bin\Debug\*MyProject*.sqlproj.dacpac" 不存在。
在 buildAgent/work/identificator/*MySolution*/MyProject/bin 中生成了正确的 .sql 和 .dacpac 文件(中间没有 .sqlproj) /Debug 文件夹。
我的 TeamCity 构建步骤配置如下:
- 运行器类型:MSbuild
- 构建文件路径:MyProject/*MyProject*.sqlproj
- MSBuild 版本:4.5
- MsBuild 工具版本:4.0
- 运行平台:4.0
- 目标:发布
- 命令行参数:
/p:SqlPublishProfilePath="Debug.publish.xml" /p:Configuration=Debug
如果我从命令行执行此操作,我不会收到任何错误。
关于如何配置 TeamCity 以搜索正确文件或配置我的项目以生成 TeamCity 正在搜索的文件的任何想法。
或者我打算使用 MSBuild 的 Publish 任务是徒劳的,我应该改用 sqlpackage.exe 吗?
更新
花了将近三天的时间试图弄清楚这一点后,我放弃了并使用了sqlpackage.exe,它就像一个魅力。
但是我仍然会对答案感兴趣,将路径传递给构建服务器中的可执行文件似乎有点粗略。
【问题讨论】:
-
我知道我决定使用 SQLPackage 是因为它更容易一些,但实际上并没有尝试使用 msbuild 发布,因为我们停止使用 DBProj 文件以支持 SQLProj。您说从命令行运行命令时没有错误,但它实际上对发布更改有什么作用吗?如果是这样,我认为您的文件路径或权限可能存在问题。也许分步构建和发布会有所帮助?
-
已经分步进行。我在工作文件夹和数据库中检查了权限 - 一切正常。
-
如果将 msbuild 切换为发布到 SQLPackage 以发布选项会发生什么?
-
感谢 Peter 与我一起思考,SqlPackage 第一次工作,所以我会一直使用它,直到弄清楚为止。
-
我们有一个相关的问题。在我们的例子中,我们使用 sqlpackage.exe 发布得很好。当我们通过 MSBuild 与 TeamCity 一起构建时,它会输出名为 MyProject.sqlproj.dacpac 的文件。棘手的是,如果这个文件留在构建服务器上并运行另一个构建,它似乎像我们预期的那样保存了 MyProject.dacpac。似乎它可能会选择以前的 MyProject.sqlproj.dacpac 并在生成新的 MyProject.sqlproj.dacpac 之前将其重命名为 MyProj.dacpac。你有没有追根究底?
标签: deployment msbuild teamcity sql-server-data-tools