Как загрузить файл локально с помощью path vs path в Azure Devops build

#sql-server #azure-pipelines #visual-studio-2019

#sql-сервер #azure-конвейеры #visual-studio-2019

Вопрос:

Я пытаюсь загрузить файл в свой сценарий после развертывания в моем проекте DB:

 FROM OPENROWSET(BULK'C:DevelopmentMyProject.DbScriptsMy_Script.sql',SINGLE_CLOB)
 

Конечно, мой конвейер сборки в azure devops жалуется, что не может найти этот скрипт. Но когда я меняю его на следующий, моя локальная сборка жалуется:

 FROM OPENROWSET(BULK'$(Build.ArtifactStagingDirectory)MyProject.DbScriptsMy_Script.sql',SINGLE_CLOB)
 

Каков правильный путь здесь? Я хотел бы сохранить свой локальный путь локально и переключиться на сборку (надеясь, что один из них правильный, у меня даже не было возможности попробовать, потому что сборка жалуется) при запуске сборки конвейера Azure. Как я могу этого добиться?

Ответ №1:

Как правило, сценарии после развертывания будут выполняться на серверах после успешного развертывания баз данных на серверах. Таким образом, вы не можете напрямую использовать абсолютные (или относительные) пути в сценариях для доступа к локальным машинам.

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

Однако для обратного посещения, которое обращается к локальным машинам из удаленных служб, у нас нет существующих простых способов. Насколько я знаю, вам может потребоваться сопоставить IP-адрес и порт локального компьютера в удаленных службах, а также может потребоваться настроить параметры прокси-сервера, параметры брандмауэра на локальных компьютерах.

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

[ОБНОВЛЕНИЕ]

Каждому конвейеру будет назначен рабочий каталог ( $(Pipeline.Workspace) ) в рабочем каталоге для агента ( $(Agent.WorkFolder) ).

Если файлы, к которым вы хотите получить доступ, являются исходными файлами в исходном репозитории, и репозиторий был извлечен в рабочий каталог для конвейера, вы можете получить доступ к исходным файлам в каталоге $(Build.SourcesDirectory) .

$(Build.SourcesDirectory) это рабочий каталог задания по умолчанию, поэтому вы можете получить доступ к исходным файлам, используя либо относительные пути, либо абсолютные пути.

Например:

  • Используя относительный путь.

MyProject.Db/Scripts/My_Script.sql

или

./MyProject.Db/Scripts/My_Script.sql

  • Используя абсолютный путь.

$(Build.SourcesDirectory)/MyProject.Db/Scripts/My_Script.sql

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

1. Прежде всего, спасибо за ваш ответ. Мой сценарий является последним, мои файлы могут быть развернуты на серверах. Проблема в том, что конвейер Azure запускается с агентом, который не размещен самостоятельно. Следовательно, я не могу физически перенести свой скрипт на тот «сервер», где находится агент.

2. Привет @Tarta, я обновил свой ответ дополнительной информацией. Пожалуйста, проверьте это. Любые вопросы по этому поводу, не стесняйтесь сообщать мне.