Поделиться через


Руководство по настройке развертывания

ALM Accelerator for Power Platform использует файлы конфигурации в формате JSON для автоматизации развертывания ваших решений. С помощью этих файлов задаются ссылки на подключения, переменные среды и разрешения, обеспечивается совместное использование приложений на основе холста и обновляются права собственности на компоненты решения, например на потоки Power Automate, когда решения развертываются в нижестоящих средах.

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

Мы предусмотрели примеры конфигурационных файлов в параметрах развертывания ALMAcceleratorSampleSolution и в пользовательских параметрах развертывания.

Перед началом работы

Эта статья представляет собой пошаговое руководство по настройке файлов конфигурации развертывания вручную. Она содержит подробные сведения и контекст для действий, выполняемых приложением ALM Accelerator и конвейерами, и может служить в качестве справочника для администраторов, которые хотят знать особенности каждого шага в процессе.

Однако мы рекомендуем вам производить настройку параметров развертывания в приложении ALM Accelerator.

Создание JSON-файла параметров развертывания

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

Однако вы также можете создать файлы customDeploymentSettings.json, учитывающие специфику каждой среды. Храните эти файлы в подкаталогах каталога config с именами, соответствующими вашим средам. Имя каталога должно совпадать с переменной EnvironmentName, созданной вами при настройке конвейера для проверочной, тестовой и рабочей сред. При отсутствии файла параметров развертывания JSON и каталога для конкретной среды конвейеры вернутся к конфигурации в корне каталога config.

Снимок экрана: иерархия каталога config.

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

Файл JSON с параметрами развертывания позволяет настроить ссылки на подключения и переменные среды.

{
    "EnvironmentVariables": [
        {
            "SchemaName": "cat_shared_sharepointonline_97456712308a4e65aae18bafcd84c81f",
            "Value": "#{environmentvariable.cat_shared_sharepointonline_97456712308a4e65aae18bafcd84c81f}#"
        },
        {
            "SchemaName": "cat_shared_sharepointonline_21f63b2d26f043fb85a5c32fc0c65924",
            "Value": "#{environmentvariable.cat_shared_sharepointonline_21f63b2d26f043fb85a5c32fc0c65924}#"
        },
        {
            "SchemaName": "cat_TextEnvironmentVariable",
            "Value": "#{environmentvariable.cat_TextEnvironmentVariable}#"
        },
        {
            "SchemaName": "cat_ConnectorBaseUrl",
            "Value": "#{environmentvariable.cat_ConnectorBaseUrl}#"
        },
        {
            "SchemaName": "cat_DecimalEnvironmentVariable",
            "Value": "#{environmentvariable.cat_DecimalEnvironmentVariable}#"
        },
        {
            "SchemaName": "cat_JsonEnvironmentVariable",
            "Value": "#{environmentvariable.cat_JsonEnvironmentVariable}#"
        },
        {
            "SchemaName": "cat_ConnectorHostUrl",
            "Value": "#{environmentvariable.cat_ConnectorHostUrl}#"
        }
    ],
    "ConnectionReferences": [
        {
            "LogicalName": "new_sharedsharepointonline_b49bb",
            "ConnectionId": "#{connectionreference.new_sharedsharepointonline_b49bb}#",
            "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline"
        },
        {
            "LogicalName": "cat_CDS_Current",
            "ConnectionId": "#{connectionreference.cat_CDS_Current}#",
            "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps"
        }
    ]
}
  1. Скопируйте приведенный выше пример кода JSON в новый файл с именем deploymentSettings.json.

  2. Сохраните файл в папке config в Git.

Снимок экрана: структура папки config.

Создание ссылки JSON на подключение

Свойство ConnectionReferences в файле customDeploymentConfiguration.json задает ссылки на подключения в вашем решении после импорта решения в среду. Свойство ConnectionReferences также включает потоки после импорта решения на основе владельца подключения, указанного в переменной.

  1. Создайте подключения вручную в целевых средах.

  2. Скопируйте идентификаторы для подключений.

    • Получите логическое имя для ссылки на подключение из компонента ссылки на подключение в вашем решении.

      Снимок экрана: имя схемы ссылки на подключение в решении, выделенное в отключенном текстовом поле под надписью «Имя».

    • Получите идентификатор подключения из URL-адреса подключения после его создания. Например, в случае URL-адреса https://.../connections/shared_commondataservice/9f66d1d455f3474ebf24e4fa2c04cea2/details идентификатор подключения будет иметь значение 9f66d1d455f3474ebf24e4fa2c04cea2.

  3. Отредактируйте файл customDeploymentSettings.json и вставьте идентификаторы в свойство ConnectionReferences, как показано в приведенном ниже примере кода:

    "ConnectionReferences": 
    [
            {
                "LogicalName": "new_sharedsharepointonline_b49bb",
                "ConnectionId": "#{connectionreference.new_sharedsharepointonline_b49bb}#",
                "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline"
            },
            {
                "LogicalName": "cat_CDS_Current",
                "ConnectionId": "#{connectionreference.cat_CDS_Current}#",
                "ConnectorId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps"
            }
    ]
    
  4. Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.

  5. На экране Переменные конвейера создайте подключение <connection_reference_logicalname>. В этом примере переменная конвейера имеет имя connection.cat_CDS_Current.

  6. В качестве значения введите найденный вами ранее идентификатор подключения.

  7. Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.

Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.

Создайте JSON для переменных среды в файле конфигурации развертывания.

Свойство EnvironmentVariables в файле customDeploymentConfiguration.json задает переменные среды Dataverse в вашем решении после импорта решения в среду.

Внимание

При экспорте решений, в которых осуществляется управление версиями, значения переменных среды экспортируются вместе с решением. Если переменные среды содержат конфиденциальную информацию, то это может представлять угрозу безопасности. Мы рекомендуем не хранить конфиденциальную информацию в переменных среды. Один из способов гарантировать, что значения переменных среды не будут подпадать под управление версиями, — это создать в среде разработки решение специально для установки переменных среды и задавать значения переменных среды в этом решении. В результате значения не будут экспортироваться вместе с решением и не будут сохраняться в системе управления версиями.

  1. Скопируйте имя схемы для переменной среды из компонента переменной среды в ваше решение.

    Снимок экрана: имя схемы переменных среды в решении, выделенное в отключенном текстовом поле под надписью «Имя».

  2. Отредактируйте файл customDeploymentSettings.json и вставьте имя в свойство EnvironmentVariables, как показано в приведенном ниже примере кода:

    {
        "EnvironmentVariables": [
            {
                "SchemaName": "cat_TextEnvironmentVariable",
                "Value": "#{variable.cat_TextEnvironmentVariable}#"
            },
            {
                "SchemaName": "cat_DecimalEnvironmentVariable",
                "Value": "#{variable.cat_DecimalEnvironmentVariable}#"
            },
            {
                "SchemaName": "cat_JsonEnvironmentVariable",
                "Value": "{\"name\":\"#{variable.cat_JsonEnvironmentVariable.name}#\"}"
            }
        ]    
    }
    
  3. Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.

  4. На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: variable.cat_TextEnvironmentVariable.

  5. В качестве значения введите значение переменной среды для этой среды.

  6. Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.

Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.

Создание JSON-файла для пользовательских параметров развертывания

Файл JSON с пользовательскими параметрами развертывания содержит параметры для активации потоков от имени пользователя, указания владельца потоков, совместного использования приложений на основе холста с группами Microsoft Entra и создания рабочих групп в группах Dataverse после развертывания.

{
  "ActivateFlowConfiguration": [
    {
      "solutionComponentName": "DevOpsKitSampleFlow",
      "solutionComponentUniqueName": "0a43b549-50ed-ea11-a815-000d3af3a7c4",
      "activateAsUser": "#{activateflow.activateas.DevOpsKitSampleFlow}#"
    },
    {
      "solutionComponentName": "CallMeFromCanvasApp",
      "solutionComponentUniqueName": "71cc728c-2487-eb11-a812-000d3a8fe6a3",
      "activateAsUser": "#{activateflow.activateas.CallMeFromCanvasApp}#"
    },
    {
      "solutionComponentName": "GetEnvironmentVariables",
      "solutionComponentUniqueName": "d2f7f0e2-a1a9-eb11-b1ac-000d3a53c3c2",
      "activateAsUser": "#{activateflow.activateas.GetEnvironmentVariables}#"
    }
  ],
  "SolutionComponentOwnershipConfiguration": [
    {
      "solutionComponentType": 29,
      "solutionComponentName": "DevOpsKitSampleFlow",
      "solutionComponentUniqueName": "0a43b549-50ed-ea11-a815-000d3af3a7c4",
      "ownerEmail": "#{owner.ownerEmail.DevOpsKitSampleFlow}#"
    },
    {
      "solutionComponentType": 29,
      "solutionComponentName": "CallMeFromCanvasApp",
      "solutionComponentUniqueName": "71cc728c-2487-eb11-a812-000d3a8fe6a3",
      "ownerEmail": "#{owner.ownerEmail.CallMeFromCanvasApp}#"
    },
    {
      "solutionComponentType": 29,
      "solutionComponentName": "GetEnvironmentVariables",
      "solutionComponentUniqueName": "d2f7f0e2-a1a9-eb11-b1ac-000d3a53c3c2",
      "ownerEmail": "#{owner.ownerEmail.GetEnvironmentVariables}#"
    }
  ],
  "AadGroupCanvasConfiguration": [
    {
      "aadGroupId": "#{canvasshare.aadGroupId.DevOpsKitSampleCanvasApp}#",
      "canvasNameInSolution": "cat_devopskitsamplecanvasapp_c7ec5",
      "canvasDisplayName": "DevOpsKitSampleCanvasApp",
      "roleName": "#{canvasshare.roleName.DevOpsKitSampleCanvasApp}#"
    }
  ],
  "AadGroupTeamConfiguration": [
    {
      "aadGroupTeamName": "Sample Group Team Name",
      "aadSecurityGroupId": "#{team.samplegroupteamname.aadSecurityGroupId}#",
      "dataverseSecurityRoleNames": [
        "#{team.samplegroupteamname.role}#"
      ]
    }
  ]
}
  1. Скопируйте приведенный ранее пример кода JSON в новый файл с именем customDeploymentSettings.json.

  2. Сохраните файл в папке config в Git.

Снимок экрана: структура папки config для настраиваемых параметров развертывания.

Создайте JSON для переменных среды по умолчанию в файле пользовательской конфигурации развертывания.

Свойство DefaultEnvironmentVariables в файле customDeploymentConfiguration.json используется в конвейере экспорта для установки переменных среды по умолчанию Dataverse в вашем решении, когда решение экспортируется и сохраняется в системе управления версиями.

Заметка

Параметры переменных среды по умолчанию применяются только в том случае, если конвейер экспорта настроен с использованием переменной конвейера VerifyDefaultEnvironmentVariableValues = True.

  1. Скопируйте имя схемы для переменной среды из компонента переменной среды в ваше решение.

    Снимок экрана: имя схемы переменных среды, выделенное в отключенном текстовом поле под надписью «Имя».

  2. Отредактируйте файл customDeploymentSettings.json и вставьте имя в свойство DefaultEnvironmentVariables, как показано в приведенном ниже примере кода:

    {
      "DefaultEnvironmentVariables": [
        [ "cat_TextEnvironmentVariable", "#{defaultvariable.cat_TextEnvironmentVariable}#" ],
        [ "cat_DecimalEnvironmentVariable", "#{defaultvariable.cat_DecimalEnvironmentVariable}#" ],
        [ "cat_jsonEnvironmentVariable", "{\"name\":\"#{defaultvariable.cat_jsonEnvironmentVariable.name}#\"}" ]
      ]
    }
    
  3. Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.

  4. На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: defaultvariable.cat_TextEnvironmentVariable.

Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.

Создание JSON для конфигурации холста группы Microsoft Entra

Свойство AadGroupCanvasConfiguration в файле customDeploymentConfiguration.json обеспечивает совместное использование приложений на основе холста в вашем решении с определенными группами Microsoft Entra после импорта решения в среду.

  1. Скопируйте идентификаторы для приложения на основе холста и группы Microsoft Entra.

    • Получите имя схемы для приложения на основе холста из компонента приложения на основе холста в вашем решении.

      Снимок экрана: имя схемы ярлыка приложения на основе холста, выделенное в отключенном текстовом поле под надписью «Имя».

    • Получите идентификатор группы Microsoft Entra на странице Группа на портале Azure.

      Снимок экрана идентификатора группы Microsoft Entra, выделенного в отключенном текстовом поле рядом с надписью «Идентификатор объекта».

  2. Отредактируйте файл customDeploymentSettings.json и вставьте идентификаторы в свойство AadGroupCanvasConfiguration, как показано в приведенном ниже примере кода:

    {
      "AadGroupCanvasConfiguration": [
        {
          "aadGroupId": "#{canvasshare.aadGroupId}#",
          "canvasNameInSolution": "cat_devopskitsamplecanvasapp_c7ec5",
          "roleName": "#{canvasshare.roleName}#"
        }
      ]
    }
    

    roleName может иметь значение CanView, CanViewWithShare или CanEdit.

  3. Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.

  4. На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: canvasshare.aadGroupId.

  5. В качестве значения введите идентификатор группы Microsoft Entra, с которой нужно поделиться приложением для этой конкретной среды.

  6. Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.

Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.

Создайте JSON конфигурации группы Microsoft Entra и команды

Свойство AadGroupTeamConfiguration в файле customDeploymentConfiguration.json сопоставляет рабочие группы и роли Dataverse с группами Microsoft Entra в вашем решении после импорта решения в среду.

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

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

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

  3. Как и в предыдущем разделе, получите идентификатор группы Microsoft Entra на странице Группа на портале Azure.

  4. Отредактируйте файл customDeploymentSettings.json и вставьте JSON в свойство AadGroupTeamConfiguration, как показано в приведенном ниже примере кода:

    {
      "AadGroupTeamConfiguration": [
        {
          "aadGroupTeamName": "alm-accelerator-sample-solution",
          "aadSecurityGroupId": "#{team.aadSecurityGroupId}#",
          "dataverseSecurityRoleNames": [
            "ALM Accelerator Sample Role"
          ]
        }
      ]
    }
    
  5. Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.

  6. На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: team.aadSecurityGroupId.

  7. В качестве значения укажите идентификатор группы Microsoft Entra, которую нужно связать с рабочей группой Dataverse.

  8. Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.

Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.

Создание JSON права владения на компоненты решения

Свойство SolutionComponentOwnershipConfiguration в файле customDeploymentConfiguration.json назначает пользователей Dataverse в качестве владельцев компонентов решения после импорта решения в среду. Назначение прав владения полезно для таких компонентов, как потоки, так как после импорта решения конвейером такие компоненты по умолчанию принадлежали бы пользователю, являющемуся субъектом-службой, и организациям пришлось бы переназначать их другим владельцам после импорта.

Свойство SolutionComponentOwnershipConfiguration также включает потоки, которые не имеют ссылок на подключения. Если ссылки на подключения для включения потока отсутствуют, поток включается указанным пользователем.

Заметка

Текущий конвейер реализует только возможность устанавливать права собственности на потоки.

  1. Код типа компонента решения основан на типах компонентов, указанных в ссылке веб-API solutioncomponent EntityType. Например, поток Power Automate — тип компонента 29. В качестве типа компонента должно быть указано целочисленное значение без кавычек.

  2. Получите уникальное имя компонента потока Power Automate из распакованного решения.

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

    Снимок экрана: распакованный XML-файл рабочего процесса решения.

    Снимок экрана: распакованный XML-файл рабочего процесса решения и WorkflowId.

  3. Получите адрес электронной почты владельца из записи пользователя в Dataverse или Microsoft 365.

  4. Отредактируйте файл customDeploymentSettings.json и вставьте JSON в свойство AadGroupTeamConfiguration, как показано в приведенном ниже примере кода:

    {
      "SolutionComponentOwnershipConfiguration": [
        {
          "solutionComponentType": 29,
          "solutionComponentUniqueName": "00000000-0000-0000-0000-00000000000",
          "ownerEmail": "#{owner.ownerEmail}#"
        },
        {
          "solutionComponentType": 29,
          "solutionComponentUniqueName": "00000000-0000-0000-0000-00000000000",
          "ownerEmail": "#{owner.ownerEmail}#"
        }
      ]
    }
    
  5. Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.

  6. На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: owner.ownerEmail.

  7. В качестве значения введите адрес электронной почты владельца компонента.

  8. Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.

Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.

Импорт данных из конвейера

Вам может потребоваться импортировать конфигурацию или исходные данные в вашу среду Dataverse после того, как вы развернете свое решение в целевой среде. Для конвейеров настроен импорт данных с помощью средства миграции конфигурации, доступного через NuGet. Подробнее об управлении данными конфигурации.

Если данные конфигурации хранятся в корне каталога config, во всех средах будут развернуты одни и те же данные конфигурации. Вы можете создавать файлы данных конфигурации, учитывающие особенности конкретных сред. Храните эти файлы в подкаталогах каталога config с именами, соответствующими вашим средам. Имя каталога должно совпадать с переменной EnvironmentName, созданной вами при настройке конвейера для проверочной, тестовой и рабочей сред. При отсутствии данных конфигурации и каталога для конкретной среды конвейеры вернутся к данным конфигурации в корне каталога config.

  1. Скопируйте репозиторий Azure DevOps, в котором ваше решение должно контролироваться исходным кодом и где вы создали YAML-конвейер решений, на свой локальный компьютер.

  2. Если вы еще этого не сделали, создайте каталог c именем config в папке config в папке вашего решения.

    Снимок экрана: каталог config в каталоге решения в локальном репозитории.

  3. Установите средство миграции конфигурации (Configuration Migration Tool). Следуйте инструкциям в разделе Загрузка средств из NuGet.

  4. Откройте инструмент миграции конфигурации, выберите Создать схему, а затем выберите Продолжить.

  5. Войдите в клиент, из которого вы хотите экспортировать данные конфигурации.

  6. Выберите свою среду.

  7. Выберите таблицы и столбцы, которые необходимо экспортировать.

  8. Нажмите Сохранить и экспортировать. Сохраните данные в каталог с путем config\ConfigurationMigrationData в вашем локальном репозитории Azure DevOps в папке решения, для которого необходимо импортировать данные.

    Заметка

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

  9. Когда будет предложено экспортировать данные, выберите Да.

  10. Выберите то же расположение для своих экспортированных данных, нажмите Сохранить, а затем выберите Экспорт данных.

  11. По завершении экспорта распакуйте файлы из файла data.zip в каталог ConfigurationMigrationData. Удалите файлы data.zip и SampleData.xml.

    Снимок экрана: данные миграции конфигурации распакованы в каталог ConfigurationMigrationData.

  12. Зафиксируйте изменения в ваших данных в Azure DevOps.

Следующие шаги