如何生成DACPAC文件

问题描述

我正在尝试通过IIS网站和sql部署在Azure DevOps中部署我的项目。但是,由于我的构建工件中没有.dacpac文件,因此我难以部署sql部分。我如何将其生成为我尝试过的任何选项,但最终都失败了。

P.S。由于限制,我无权访问要部署的VM。我可以在计算机上标记为DBO的情况下访问数据库

我的问题还在于,我是否需要每次通过构建生成此DACPAC文件,或者只能生成一次该DACPAC文件,并将其存储在计算机上,然后从部署过程指向该文件

谢谢您的帮助!

解决方法

但是,由于我的构建工件中没有.dacpac文件,因此我难以部署SQL部分。我如何生成它,因为我尝试过的任何选项都以失败告终。我可以在计算机上标记为DBO的情况下访问数据库。

  1. 首先,您必须通过导入实时数据库的对象,使用SSDT(或Azure Data Studio内部预览)创建SQL Server数据库项目。

  2. 然后将数据库项目放入存储库中

  3. 管道(经典或yaml)将具有一个构建任务MSBuild @ 1。这是一个YAML示例。它会生成dacpac

- task: MSBuild@1
    displayName: 'Build solution YourDatabase.sln'
    inputs:
      solution: 'src/YourDatabase.sln'

此任务将编译数据库项目并生成dacpac文件

  1. 然后提取产生的文件:
- task: CopyFiles@2
    displayName: 'Extract DACPACs'
    inputs:
        CleanTargetFolder: false
        SourceFolder: '$(agent.builddirectory)\s\src\YourDatabase\bin\Debug\'
        Contents: '*.dacpac'
        TargetFolder: '$(build.artifactstagingdirectory)'
  1. 最后,作为人工制品发表
  - task: PublishPipelineArtifact@1
    displayName: 'Publish Artifact'
    inputs:        
        targetPath: '$(build.artifactstagingdirectory)'
        artifact: 'drop'
  1. 部署dacpac是最终目标,可以使用SqlDacpacDeploymentOnMachineGroup@0完成,但是,这超出了原始问题的范围

我的问题还在于,我是否需要每次通过构建生成此DACPAC文件,或者只能生成一次该DACPAC文件,并将其存储在计算机上,然后从部署过程指向该文件?

这取决于。

  • 经典管道具有BUILD和RELEASE阶段的分离。在这种情况下,您可以构建一次,然后将该dacpac重新用于许多将来的版本。

  • 对于多阶段yaml管道,通常每个管道运行都会触发构建和部署阶段,因为它们仍属于同一管道并作为单个单元运行。