#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, я обновил свой ответ дополнительной информацией. Пожалуйста, проверьте это. Любые вопросы по этому поводу, не стесняйтесь сообщать мне.