Проблема в файле 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

Другие вопросы по тегам