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

Azure devops 如何在Azure DevOps中的script.PostDeployment.sql中引用sql脚本(而不是过程)?,azure-devops,sqlcmd,database-project,Azure Devops,Sqlcmd,Database Project,如何在Azure DevOps build中获取脚本(而非过程)的路径? 我正在尝试获取要在Visual Studio数据库项目部署后使用的解决方案或项目文件的路径 在本地工作 在VisualStudio数据库项目中的Script.PostDeployment.sql文件中,我有以下代码 SELECT @solutionDir = REPLACE('$(SolutionPath)','MySoulution.sln',''); SET @File = @solutionDir + 'myScri

如何在Azure DevOps build中获取脚本(而非过程)的路径?

我正在尝试获取要在Visual Studio数据库项目部署后使用的解决方案或项目文件的路径

在本地工作

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

SELECT @solutionDir = REPLACE('$(SolutionPath)','MySoulution.sln','');
SET @File = @solutionDir + 'myScript.sql'
-- and here I can use the @File
当我执行本地发布/或构建时我可以使用变量/macro$(SolutionPath),在这里我可以获得解决方案的完整本地路径

有了它,我可以指向需要访问的脚本

在AzureDevops中失败 但是Azure DevOps build没有$(SolutionPath)宏,我得到以下错误

SCRIPT.POSTDEPLOYMENT.SQL(17,32,17,32): Build error SQL72008: Variable SolutionPath is not defined.
因此,我需要一种方法(在AzureDevops中)在构建步骤中获得脚本的路径

我试过的
  • 我试过各种各样的宏,但似乎都不起作用
  • 我试着和你一起工作
  • 我试图使用它,但它似乎在不久前从数据库项目中丢失了
  • 问题
  • 如何将$(SolutionPath)(或其他内容)添加到我的构建步骤中,使其在本地和Azure DevOps构建中都能工作
  • 是否有其他方法获取postdeployment SQLCMD文件的解决方案或项目url
  • 我应该看看吗?如果这是我唯一的选择,我会的
  • 附笔 我也很高兴,因为他们似乎没有那么积极地回答,我等不及了

    e、
    我当时也问了同样的问题。希望有人能回答这个问题。如果是这样的话,我将用一个答案更新这个问题。

    所以首先要仔细检查您的构建是否发布了工件。在构建的右上角应该有一个蓝色按钮,上面写着“工件”。要访问工件,您需要在完成构建后执行归档任务并将其指向

    $(Build.ArtifactStagingDirectory)
    
    然后,我建议不要使用SQL直接引用构建服务器的文件系统。如果这是绝对必要的,那么您应该使用环境变量

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


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

    您可以在构建管道中使用此任务来运行使用SQLCMD变量的部署后脚本-我不确定这是否适用于我的Script.PostDeployment.sq脚本。您的构建任务将在该任务之后运行,但是数据库项目当时已经创建了一个dacpac文件,如果它没有遇到找不到$(SolutionPath)变量的问题的话。我想需要另一个解决方案…嗨,谢谢,但不是我想要的。我要处理的是在解决方案构建时创建的*.dacpack,其中包含我需要的postdeploy.sql文件。为了能够设置这些路径,Script.PostDeployment.sql文件需要在构建时包含一些内容。但是谢谢你的尝试…好吧,尽管你的答案不是我想要的,但这让我想到我可以将*.dacpack更改为zip,然后处理文件的内容。在这个阶段,我不知道结果会如何。然后,我必须对*.dacpac进行1.u-zip压缩。2.将脚本的路径从构建更改为绝对路径。3.将文件重新压缩回dackpack。肯定还有另一个way@Sturla有一个无执行SQL脚本的DevOps外接程序,如果这不能帮助您实现目标,您还可以从发布代理或直接从DevOps运行powershell脚本。如果您使用的是Azure SQL,那么就更容易了,因为您可以直接从“Azure SQL部署”任务部署DACPAC。