Как сгенерировать файл DACPAC

#azure-devops #dacpac

#azure-devops #dacpac

Вопрос:

Я пытаюсь развернуть свой проект в Azure DevOps через веб-сайт IIS и развертывание SQL. Однако я борюсь с развертыванием части SQL, поскольку у меня нет файла .dacpac в моих артефактах сборки. Как мне сгенерировать это, поскольку любой вариант, который я пробовал, заканчивался сбоем процесса.

PS У меня нет доступа к виртуальной машине, на которой я развертываю, из-за ограничений. Я могу получить доступ к базе данных, поскольку я пометил ее как DBO на компьютере.

Мой вопрос также в том, нужно ли мне каждый раз генерировать этот файл DACPAC с помощью сборки или он может быть сгенерирован только один раз, сохранен на компьютере, и я указываю из процесса развертывания на этот файл?

Спасибо за вашу помощь!

Комментарии:

1. У меня есть проект с db-up, поэтому я не могу сгенерировать dacpac. Любая помощь после этого ввода? Спасибо

Ответ №1:

Однако я борюсь с развертыванием части SQL, поскольку у меня нет файла .dacpac в моих артефактах сборки. Как мне сгенерировать это, поскольку любой вариант, который я пробовал, заканчивался сбоем процесса. Я могу получить доступ к базе данных, поскольку я пометил ее как DBO на компьютере.

  1. Сначала вы должны создать проект базы данных SQL Server с использованием SSDT (или Azure Data Studio insiders preview) путем импорта объектов из текущей базы данных.

  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)ssrcYourDatabasebinDebug'
        Contents: '*.dacpac'
        TargetFolder: '$(build.artifactstagingdirectory)'
  
  1. И, наконец, опубликован как артефакт
   - task: PublishPipelineArtifact@1
    displayName: 'Publish Artifact'
    inputs:        
        targetPath: '$(build.artifactstagingdirectory)'
        artifact: 'drop'
  
  1. Развертывание dacpac является конечной целью и может быть выполнено с помощью SqlDacpacDeploymentOnMachineGroup@0 , однако это выходит за рамки первоначального вопроса

Мой вопрос также в том, нужно ли мне каждый раз генерировать этот файл DACPAC с помощью сборки или он может быть сгенерирован только один раз, сохранен на компьютере, и я указываю из процесса развертывания на этот файл?

Это зависит.

  • Классические конвейеры разделены на этапы СБОРКИ и выпуска. В этом случае вы можете создать его один раз и повторно использовать этот dacpac для многих будущих выпусков.

  • В случае многоступенчатых конвейеров yaml обычно каждый запуск конвейера запускает этапы сборки и развертывания, поскольку они по-прежнему принадлежат одному конвейеру и выполняются как единое целое.

Комментарии:

1. Кажется, что это БД. Я не могу сгенерировать dacpac. Что делать дальше?

2. @AhmedB, я думаю, никто не может дать хороший ответ, почему dacpac не может быть сгенерирован, пока вы не покажете нам код вашего конвейера и какое сообщение об ошибке вы получили