【问题标题】:Suppress sqlpackage.exe warnings/errors in Powershell when triggered using TFS build使用 TFS 构建触发时抑制 Powershell 中的 sqlpackage.exe 警告/错误
【发布时间】:2016-09-15 20:31:56
【问题描述】:

我有一个自动部署脚本,可以使用 dacpac 和 sqlpackage.exe、SSRS 报告和网站来部署数据库更改。

当我在命令行执行脚本时,sqlpackage 输出如下信息:

对象 [objectname] 已经存在于数据库中,但具有不同的 定义,不会改变。

控制台上的输出为黄色,表示这是一个警告,部署继续并按预期完成。

但是,当我通过 TFS 构建触发相同的脚本时,构建资源管理器中会记录相同的消息,但旁边会显示错误图标。部署仍在继续,运行自动化测试等,但构建状态更改为带有勾号和叉号的图标 - 表示构建成功完成,但其他任务失败。

有一个参数可以提供给sqlpackage,UnmodifiableObjectWarnings,它应该可以抑制这种警告,但是msdn上有一个帖子表明这个参数有一个bug,它不起作用。

我想知道如何在 Powershell 中捕获和抑制这种警告,因为我不希望我的构建/部署仅仅因为这个警告而失败。但是我不能抑制调用 sqlpackage 的所有错误输出,因为可能还有其他完全有效的错误。

更新

我已尝试按照此处的建议进行操作: https://serverfault.com/questions/340711/redirect-stderr-to-variable-in-powershell 并尝试使用类似于以下代码:

  try {
        $test = & "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /SourceFile:"$dacpac" /Profile:"$dbProfile" /p:UnmodifiableObjectWarnings=True /Action:Publish 2>&1

        $errMsg = $test | ?{$_.gettype().Name -eq "ErrorRecord"}
        $normMsg = $test | ?{$_.gettype().Name -ne "ErrorRecord"}
    }
    catch {
         Write-Host "Caught Exception $_"
    }

但是,一旦 exe 返回警告消息,我的调用函数就会抛出异常并处理 - 并且不会发生部署。

但是,如果我这样称呼它:

try {
    & "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /SourceFile:"$dacpac" /Profile:"$dbProfile" /p:UnmodifiableObjectWarnings=True /Action:Publish 2>&1
}
catch {
     Write-Host "Caught Exception $_"
}

即没有变量 $test 捕获输出,部署成功完成,但 catch 仍然捕获相同的异常。为什么捕获变量中的输出会导致异常立即抛出,但不捕获仍然会导致捕获,但成功完成后?

【问题讨论】:

    标签: tfsbuild powershell-3.0 sql-server-data-tools


    【解决方案1】:

    我建议使用最新版本的 SqlPackage。查看您的路径,它看起来像旧版本。很久以前有一个错误,警告被写入标准错误而不是标准输出。如果您升级问题应该消失,如果您不可以使用 powershell 启动一个新的 .net 进程,那么您就可以重定向错误输出。

    【讨论】:

      【解决方案2】:

      首先你需要捕获exe(SQLPackage)的退出代码而不是输出; example1example2 可能会有所帮助

      然后你需要捕获标准错误和输出,这里是example

      现在您只需要记录输出(如果需要)并检查退出代码是否非零然后引发异常

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多