如何在Azure DevOps的Script.PostDeployment.sql中引用SQL脚本(不是过程)?

问题描述 投票:1回答:1

如何在Azure DevOps构建中获取脚本的路径(不是过程)?

我正在尝试获取我的解决方案或项目文件的路径,以在Visual Studio数据库项目PostDeployment中使用。

本地工作

在Visual Studio数据库项目的Script.PostDeployment.sql文件中,我具有以下代码]

SELECT @solutionDir = REPLACE('$(SolutionPath)','MySoulution.sln','');
SET @File = @solutionDir + 'myScript.sql'
-- and here I can use the @File

当我执行本地发布/或构建时,可以使用变量/宏$(SolutionPath),在其中可以获得解决方案的完整本地路径。

因此,我可以指向我需要访问的脚本。

AzureDevops中的失败

但是Azure DevOps版本没有$(SolutionPath)宏,但出现了[[以下错误

SCRIPT.POSTDEPLOYMENT.SQL(17,32,17,32): Build error SQL72008: Variable SolutionPath is not defined.
因此,我需要一种方法(在AzureDevops中)

在构建步骤中

以获取脚本的路径。 我尝试过的

    我尝试了所有似乎无效的宏。
  1. 我尝试使用predefined variables
  2. 我曾尝试使用SqlCommandVariableOverride,但似乎前一段时间该数据库项目中缺少它。

  • 问题

      我如何在构建步骤中添加$(SolutionPath)(或其他内容),以使其在本地和Azure DevOps生成中均有效?

  • 还有另一种方法来获取解决方案或项目url到部署后的SQLCMD文件吗?
  • MSBuild Extension Pack是我应该看的东西吗?如果可以的话,我会的。
  • p.s

    我也created a ticket for this in Azure Pipelines Tasks,因为他们似乎没有那么积极的回答,我等不及了。

  • azure-devops sqlcmd database-project
    1个回答
    0
    投票
    因此,首先请仔细检查您的构建是否正在发布工件。在您的版本的右上角应该有一个蓝色按钮,上面显示“工件”。要访问工件,您需要在执行构建后将其指向并执行存档任务。

    $(Build.ArtifactStagingDirectory)

    然后,我建议不要使用SQL来直接引用构建服务器的文件系统。如果绝对必要,则应使用环境变量。 

    我建议为发布SQL脚本设置一个发布管道。发布管道实际上是为部署而设计的,而构建则是为编译而设计的。

    要配置发行版,将其指向工件,然后您可以通过$(System.DefaultWorkingDirectory)/**/*.zip访问该工件,然后运行要执行的任何命令来对其进行处理。

    © www.soinside.com 2019 - 2024. All rights reserved.