【问题标题】:Execute SQLCMD.exe from PowerShell in an Azure DevOps Release Pipeline在 Azure DevOps 发布管道中从 PowerShell 执行 SQLCMD.exe
【发布时间】:2018-10-15 18:02:50
【问题描述】:

我正在将我们的部署基础架构移植到 Azure DevOps(以前称为 Visual Studio Team Services),但我遇到了一个问题,我找不到任何好的解决方案。

我们正在使用 EF Core 迁移,to work around some unrelated issues 我们需要在 SQLCmd 中动态包装 SQL 脚本,这很容易使用 PowerShell。

但是,当我们的脚本作为发布管道中的常规 PowerShell 步骤执行时,它会失败,因为 SQLCMD.exe 不可用。并不奇怪 - 但我也找不到任何记录在案的安装方式。

是否有工具安装程序或一些类似的现成组件可以让我执行调用 SQLCMD.exe(通过Invoke-SqlCmd)作为 Azure Devops 管道的一部分的 PowerShell 脚本?如果没有,最简单的方法是什么?

【问题讨论】:

  • 您使用的是托管代理还是私有代理?
  • 托管代理(带有 VS2017 的 Windows)。
  • @DanielMann:☝️

标签: powershell azure-devops sqlcmd


【解决方案1】:

我自己没有尝试过,但是您是否可以在托管代理上为当前用户安装 Powershell 模块?因为 Invoke-SqlCmd 是 SqlServer module 的一部分,可以通过以下方式从 Powershell 库安装:

Install-Module -Name SqlServer -Scope CurrentUser

【讨论】:

  • 这就是我最终要做的事情。事实证明 sqlcmd.exe 实际上已经在机器上(但不在 $env:PATH 中)所以我所要做的就是安装 PS 模块(并移植我的脚本以在任何地方使用它;我有一个直接参考 @987654325 @ 我替换为Invoke-SqlCmd...)。谢谢!
  • @TomasAschan 我想添加一些可能对某人有所帮助的内容。在我的例子中,系统变量已经设置好了,我在脚本的开头就使用了Invoke-Sqlcmd。尽管如此,在 Azure Pipeline 中使用此 cmdlet 的任务告诉我找不到 Invoke-Sqlcmd。原因是:安装cmdlet后,我没有重启电脑(尤其是BuildAgent),这也是为什么BuildAgent没有注意到powershell有新模块的原因。重新启动后一切正常。我使用Install-Module -Name SqlServer -Scope AllUsers 来安装SqlServer。
【解决方案2】:

您可以尝试创建一个包来在代理上安装所需的工具,因为现在可以这样做了。您可以使用 Chocolatey 任务从中运行包

有一个(旧的)巧克力包装可供您尝试:https://chocolatey.org/packages?q=SQLCMD

您不能通过可用的扩展之一使用普通的 sql 脚本吗? 见herehere

当然,可以选择使用自托管代理,然后您可以安装任何您想要的东西。

【讨论】:

    【解决方案3】:

    这个对我有用

    Install-Module -Name SqlServer -Force -AllowClobber
    

    虽然不确定 -AllowClobber,但在我的本地 PC 上,该命令抱怨没有它,我没有检查 Azure tbh。

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 2021-06-24
      • 1970-01-01
      相关资源
      最近更新 更多