Ошибка сборки с конвейером yaml Azure DevOps

#azure-devops #azure-active-directory #azure-web-app-service #azure-sql-database

Вопрос:

я попытался автоматизировать свой конвейер, поэтому настроил конвейер azure вручную через yaml. все задачи были успешно выполнены, кроме последней.

последняя задача-выполнить сценарий миграции sql в базе данных «demodb»

 - task: SqlAzureDacpacDeployment@1
      inputs:
        azureSubscription: 'sqlserviceConnection' 
        AuthenticationType: 'servicePrincipal'
        ServerName: 'demodb.database.windows.net'
        DatabaseName: 'demodb'
        deployType: 'SqlTask'
     SqlFile:'$(Build.ArtifactStagingDirectory)publishSQLmigrate.sql'
        IpDetectionMethod: AutoDetect
 

вот в чем ошибка, которой я становлюсь:

Указанное имя схемы «xxx@xxx» либо не существует, либо у вас нет разрешения на его использование.

основные моменты задачи:

  • sqlserviceConnection : подключение к службе
  • Файл SqlFile : сценарий переноса базы данных будет выполнен, если конвейер успешно запустится.

содержимое файла migrate.sql

 IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
BEGIN
    CREATE TABLE [__EFMigrationsHistory] (
        [MigrationId] nvarchar(150) NOT NULL,
        [ProductVersion] nvarchar(32) NOT NULL,
        CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
    );
END;
GO

BEGIN TRANSACTION;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20210714144330_init')
BEGIN
    CREATE TABLE [Users] (
        [Id] uniqueidentifier NOT NULL,
        [BusinessPhones] nvarchar(max) NULL,
        [DisplayName] nvarchar(max) NULL,
        [GivenName] nvarchar(max) NULL,
        [JobTitle] nvarchar(max) NULL,
        [Mail] nvarchar(max) NULL,
        [MobilePhone] nvarchar(max) NULL,
        [OfficeLocation] nvarchar(max) NULL,
        [PreferredLanguage] nvarchar(max) NULL,
        [Surname] nvarchar(max) NULL,
        [UserPrincipalName] nvarchar(max) NULL,
        CONSTRAINT [PK_Users] PRIMARY KEY ([Id])
    );
END;
GO

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20210714144330_init')
BEGIN
    INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
    VALUES (N'20210714144330_init', N'5.0.8');
END;
GO

COMMIT;
GO
 

что я сделал:

  • созданный sql server
  • создал пользователя aad
  • назначенный пользователь aad в качестве adb_admin в базе данных ‘demodb’
  • создан сервис приложений «demoapp»
  • зарегистрировал службу приложений в aad
  • добавлено демо-приложение к aad

Ответ №1:

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

 CREATE SCHEMA MCMO 
AUTHORIZATION MCMO_Contributor