Проблема в файле YAMEL
Я использую Azure DevOps для сборки и развертывания своих Azure Synapse
у меня есть два YAML
файлы. Первый работает хорошо, и мне нужно разделить этапы сборки и выпуска. из-за этого я написал второйYAML
файл. ВторойYAML
файл имеет эту ошибку:
##[error]No files were found to deploy with search pattern
d:\a\1\s\SQL_ASynapse\bin\Release\SQL_ASynapse.dacpacCheck out how to troubleshoot failures at
https://aka.ms/sqlazuredeployreadme#troubleshooting-
Первый хорошо работающий YAML-файл:
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: AzureKeyVault@1
inputs:
azureSubscription: 'XXX'
KeyVaultName: 'XXX-Dev'
SecretsFilter: '*'
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: SqlAzureDataWarehouseDacpacDeployment@1
inputs:
azureSubscription: 'XXX'
AuthenticationType: 'server'
ServerName: 'XXX'
DataWarehouse: '$(SynapseName)'
SqlUsername: '$(SynapseSQLUsername)'
SqlPassword: '$(SynapseSQLPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: 'SQL_ASynapse\bin\Release\SQL_ASynapse.dacpac'
IpDetectionMethod: 'AutoDetect'
Второй файл YAML с ошибкой:
trigger:
- master
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
# Agent VM image name
vmImageName: 'windows-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Deploy
displayName: Deploy
environment: 'development'
pool:
vmImage: $(vmImageName)
strategy:
runOnce:
deploy:
steps:
- task: AzureKeyVault@1
inputs:
azureSubscription: 'XXX-Dev'
KeyVaultName: 'XXX-Dev'
SecretsFilter: '*'
- task: SqlAzureDataWarehouseDacpacDeployment@1
inputs:
azureSubscription: 'XXX-Dev'
AuthenticationType: 'server'
ServerName: 'XXX'
DataWarehouse: '$(SynapseName)'
SqlUsername: '$(SynapseSQLUsername)'
SqlPassword: '$(SynapseSQLPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: 'SQL_ASynapse\bin\Release\SQL_ASynapse.dacpac'
IpDetectionMethod: 'AutoDetect'
ОБНОВЛЕНИЕ №1 ДЛЯ ОТВЕТА @Levi Lu-MSFT
Я изменил свой второй скрипт, как показано ниже:
...
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- publish: $(system.defaultworkingdirectory)\SQL_ASynapse\bin\Release ## path to a file or folder
artifact: MyBuildOutputs
...
- download: current # refers to artifacts published by current pipeline
artifact: MyBuildOutputs
- task: SqlAzureDataWarehouseDacpacDeployment@1
inputs:
azureSubscription: 'xxx-Dev'
AuthenticationType: 'server'
ServerName: 'xxx.database.windows.net'
DataWarehouse: '$(SynapseName)'
SqlUsername: '$(SynapseSQLUsername)'
SqlPassword: '$(SynapseSQLPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: 'SQL_ASynapse\bin\Release\SQL_ASynapse.dacpac'
IpDetectionMethod: 'AutoDetect'
Но у меня все еще такая же ошибка.
Загрузить результат задачи
Ошибка развертывания SqlAzureDataWarehouseDacpac:
## [error] Не найдено файлов для развертывания с шаблоном поиска d:\a\1\s\SQL_ASynapse\bin\Release\SQL_ASynapse.dacpac Узнайте, как устранять ошибки, на https://aka.ms/sqlazuredeployreadme
1 ответ
Если вы используете агент, размещенный на сервере Microsoft. Каждое задание, определенное в конвейере yaml, будет выполняться на новой виртуальной машине. Виртуальная машина удаляется после одного использования.
Таким образом, артефакты сборки из задания сборки этапа сборки не существуют на машине агента задания развертывания этапа развертывания. Вот почему вы получили ошибку выше.
Вам необходимо добавить задачу публикации после задачи Vsbuild в задании сборки, чтобы опубликовать результаты сборки на сервере azure De vOps. Вы должны указать правильный путь (где находятся артефакты сборки) для публикации.
- publish: $(system.defaultworkingdirectory)\SQL_ASynapse\bin\Release ## path to a file or folder
artifact: MyBuildOutputs
Затем добавьте задачу загрузки перед задачей qlAzureDataWarehouseDacpacDeployment в задании развертывания, чтобы загрузить результаты сборки для развертывания агента задания. Чтобы результаты сборки были доступны задачам развертывания.
- download: current # refers to artifacts published by current pipeline
artifact: MyBuildOutputs
Для публикации и загрузки сборки артефактов, Вы можете также использовать Опубликовать Строительные артефакты задачи, Скачать Построить артефакты задачи.
Обновить:
При использовании задачи загрузки: дополнительную информацию см. Здесь.
По умолчанию файлы загружаются в
$(Pipeline.Workspace)/{artifact}
, где артефакт - это имя артефакта. Структура папок артефакта всегда сохраняется.
И вы можете видеть обновленный скриншот выше. Артефакты загружаются в папкуD:\a\1\MyBuildOutputs
Поэтому вы должны установить атрибут DacpacFile, как показано ниже:
DacpacFile : $(Pipeline.Workspace)/MyBuildOutputs/SQL_ASynapse.dacpac