Как вы ссылаетесь на сценарий sql (не процедуру) в Script.PostDeployment.sql в DevOps Azure? - PullRequest
4 голосов
/ 01 октября 2019

Как получить путь к сценарию (не к процедуре) в сборке DevOps Azure?

Я пытаюсь получить путь к файлу моего решения или проекта для использования в Проект базы данных Visual Studio PostDeployment .

Работает локально

В файле Script.PostDeployment.sql в Visual StudioПроект базы данных У меня есть следующий код

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. Я пробовал все виды макросов, которые просто не работают.
  2. Я пытался работать с предопределенными переменными
  3. Я пытался использовать SqlCommandVariableOverride , но, похоже, он пропал из проекта базы данных некоторое времяназад.

Вопросы

  1. Как я могу добавить $ (SolutionPath) (или что-то еще) к моему шагу сборки, чтобы это работало как локально, так и в сборке Azure DevOps?
  2. Есть ли другой способ получить URL-адрес решения или проекта в файле SQLCMD после развертывания?
  3. Является ли MSBuild Extension Pack чем-то, на что мне следует обратить внимание? Я сделаю это, если это мой единственный вариант.

ps

Я также создал билет для этого в Azure Pipelines Tasks , поскольку они, похоже, неэтот активный в ответе, и я не могу ждать.

es

Я задавал тот же вопрос в developercommunity.visualstudio.com . Будем надеяться, что кто-то там сможет ответить на этот вопрос. Если так, я обновлю этот вопрос ответом.

1 Ответ

0 голосов
/ 19 октября 2019

Итак, сначала дважды проверьте, что ваша сборка публикует артефакты. в правом верхнем углу вашей сборки должна быть синяя кнопка с надписью "артефакты". Чтобы получить доступ к артефакту, вам нужно выполнить задачу архивирования после того, как вы выполните сборку и назовите ее

$(Build.ArtifactStagingDirectory)

Тогда я бы порекомендовал не использовать SQL для прямых ссылок на файловую систему для сервера сборки. Если это абсолютно необходимо, вы должны использовать переменные окружения.

Я бы рекомендовал настроить конвейер выпуска для развертывания сценария SQL. Конвейеры релизов действительно предназначены для развертывания, а сборки - для компиляции.

Чтобы настроить выпуск, наведите на него артефакт, и затем вы можете получить доступ к этому артефакту с помощью $(System.DefaultWorkingDirectory)/**/*.zip, а затем выполнить любые команды, которые хотите выполнить для его обработки.

...