我正在尝试使用 TeamCity 8 和 MSBuild 发布任务将 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): File "C:\Program Files\TeamCity\buildAgent\work\abf8bc05a2cfe7f\*MyProject*\bin\Debug\*MyProject*.sqlproj.dacpac" does not exist.
在 buildAgent/work/identificator/*MySolution*/MyProject/bin 中生成了正确的 .sql 和 .dacpac 文件(中间没有 .sqlproj)/调试文件夹。
我的 TeamCity 构建步骤配置如下:
- 运行器类型:MSbuild
- 构建文件路径:MyProject/*MyProject*.sqlproj
- MSBuild 版本:4.5
- MsBuild 工具版本:4.0
- 运行平台:4.0
- 目标:发布
- 命令行参数:
/p:SqlPublishProfilePath="Debug.publish.xml"/p:Configuration=Debug
如果我从命令行执行它,我不会出错。
有关如何配置 TeamCity 以搜索正确文件或配置我的项目以生成 TeamCity 正在搜索的文件的任何想法。
或者我计划使用 MSBuild 的发布任务是徒劳的,我应该改用 sqlpackage.exe
吗?
更新
在花了将近三天的时间试图解决这个问题之后,我放弃了并使用了 sqlpackage.exe
,它的效果非常好。
但是我仍然对答案感兴趣,将路径传递给构建服务器中的可执行文件似乎是完成任务的一种粗略方式。
最佳答案
我遇到了类似的问题并得出结论,TeamCity 生成带有 *.teamcity 后缀的“伪项目”文件的方式混淆了 MSBuild/SSDT 目标链中的某些内容。
我只是用纯命令行步骤替换了 MSBuild 运行器构建步骤,问题就消失了。
我们失去了 TeamCity MSBuild 运行器配置的用户友好性,但如果它有效,这是我愿意做出的妥协。
注意 - 我们正在运行 TeamCity 7 - 我不确定这是否已在更高版本中解决。
关于deployment - 尝试使用 TeamCity 8 部署 SSDT 项目时文件名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17857927/