Руководство по настройке развертывания
ALM Accelerator for Power Platform использует файлы конфигурации в формате JSON для автоматизации развертывания ваших решений. С помощью этих файлов задаются ссылки на подключения, переменные среды и разрешения, обеспечивается совместное использование приложений на основе холста и обновляются права собственности на компоненты решения, например на потоки Power Automate, когда решения развертываются в нижестоящих средах.
Файлы конфигурации, рассматриваемые в этой статье, дают вам возможность настраивать элементы, характерные для среды, в которой развертывается решение. Необходимые вам файлы конфигурации, а значит, и шаги, которые вам необходимо выполнить в этой статье, зависят от того, какие компоненты развертывают конвейеры в вашем решении. Например, если ваше решение содержит только таблицы Dataverse и приложения на основе модели, а конфигурации или данные для каждой среды не требуются, то вы можете пропустить некоторые из этих шагов.
Мы предусмотрели примеры конфигурационных файлов в параметрах развертывания ALMAcceleratorSampleSolution и в пользовательских параметрах развертывания.
Перед началом работы
Эта статья представляет собой пошаговое руководство по настройке файлов конфигурации развертывания вручную. Она содержит подробные сведения и контекст для действий, выполняемых приложением ALM Accelerator и конвейерами, и может служить в качестве справочника для администраторов, которые хотят знать особенности каждого шага в процессе.
Однако мы рекомендуем вам производить настройку параметров развертывания в приложении ALM Accelerator.
Создание JSON-файла параметров развертывания
Если файл customDeploymentSettings.json хранится в корне каталога config, ко всем средам будет применяться одна и та же конфигурация. Если вы используете конвейерные задачи преобразования файлов или замены токенов для информации, характерной для конкретных сред, вы можете указать значения для каждой среды в своих переменных конвейера.
Однако вы также можете создать файлы customDeploymentSettings.json, учитывающие специфику каждой среды. Храните эти файлы в подкаталогах каталога config с именами, соответствующими вашим средам. Имя каталога должно совпадать с переменной EnvironmentName
, созданной вами при настройке конвейера для проверочной, тестовой и рабочей сред. При отсутствии файла параметров развертывания JSON и каталога для конкретной среды конвейеры вернутся к конфигурации в корне каталога 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"
}
]
}
Скопируйте приведенный выше пример кода JSON в новый файл с именем deploymentSettings.json.
Сохраните файл в папке config в Git.
Создание ссылки JSON на подключение
Свойство ConnectionReferences
в файле customDeploymentConfiguration.json задает ссылки на подключения в вашем решении после импорта решения в среду. ConnectionReferences
также включите потоки после импорта решения на основе владельца соединения, указанного в переменной.
Создайте подключения вручную в целевых средах.
Скопируйте идентификаторы для подключений.
Получите логическое имя для ссылки на подключение из компонента ссылки на подключение в вашем решении.
Получите идентификатор подключения из URL-адреса подключения после его создания. Например, в случае URL-адреса https://.../connections/shared_commondataservice/9f66d1d455f3474ebf24e4fa2c04cea2/details идентификатор подключения будет иметь значение 9f66d1d455f3474ebf24e4fa2c04cea2.
Отредактируйте файл 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" } ]
Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.
На экране Переменные конвейера создайте подключение <connection_reference_logicalname>. В этом примере переменная конвейера имеет имя
connection.cat_CDS_Current
.В качестве значения введите найденный вами ранее идентификатор подключения.
Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.
Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.
Создайте JSON для переменных среды в файле конфигурации развертывания.
Свойство EnvironmentVariables
в файле customDeploymentConfiguration.json задает переменные среды Dataverse в вашем решении после импорта решения в среду.
Внимание
При экспорте решений, в которых осуществляется управление версиями, значения переменных среды экспортируются вместе с решением. Если переменные среды содержат конфиденциальную информацию, то это может представлять угрозу безопасности. Мы рекомендуем не хранить конфиденциальную информацию в переменных среды. Один из способов гарантировать, что значения переменных среды не будут подпадать под управление версиями, — это создать в среде разработки решение специально для установки переменных среды и задавать значения переменных среды в этом решении. В результате значения не будут экспортироваться вместе с решением и не будут сохраняться в системе управления версиями.
Скопируйте имя схемы для переменной среды из компонента переменной среды в ваше решение.
Отредактируйте файл 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}#\"}" } ] }
Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.
На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: variable.cat_TextEnvironmentVariable.
В качестве значения введите значение переменной среды для этой среды.
Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.
Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.
Создание 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}#"
]
}
]
}
Скопируйте приведенный ранее пример кода JSON в новый файл с именем customDeploymentSettings.json.
Сохраните файл в папке config в Git.
Создайте JSON для переменных среды по умолчанию в файле пользовательской конфигурации развертывания.
Свойство DefaultEnvironmentVariables
в файле customDeploymentConfiguration.json используется в конвейере экспорта для установки переменных среды по умолчанию Dataverse в вашем решении, когда решение экспортируется и сохраняется в системе управления версиями.
Заметка
Параметры переменных среды по умолчанию применяются только в том случае, если конвейер экспорта настроен с использованием переменной конвейера VerifyDefaultEnvironmentVariableValues = True
.
Скопируйте имя схемы для переменной среды из компонента переменной среды в ваше решение.
Отредактируйте файл customDeploymentSettings.json и вставьте имя в свойство
DefaultEnvironmentVariables
, как показано в приведенном ниже примере кода:{ "DefaultEnvironmentVariables": [ [ "cat_TextEnvironmentVariable", "#{defaultvariable.cat_TextEnvironmentVariable}#" ], [ "cat_DecimalEnvironmentVariable", "#{defaultvariable.cat_DecimalEnvironmentVariable}#" ], [ "cat_jsonEnvironmentVariable", "{\"name\":\"#{defaultvariable.cat_jsonEnvironmentVariable.name}#\"}" ] ] }
Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.
На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например: defaultvariable.cat_TextEnvironmentVariable.
Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.
Создание JSON для конфигурации холста группы Microsoft Entra
Свойство AadGroupCanvasConfiguration
в файле customDeploymentConfiguration.json обеспечивает совместное использование приложений на основе холста в вашем решении с определенными группами Microsoft Entra после импорта решения в среду.
Скопируйте идентификаторы для приложения на основе холста и группы Microsoft Entra.
Получите имя схемы для приложения на основе холста из компонента приложения на основе холста в вашем решении.
Получите идентификатор группы Microsoft Entra на странице Группа на портале Azure.
Отредактируйте файл customDeploymentSettings.json и вставьте идентификаторы в свойство
AadGroupCanvasConfiguration
, как показано в приведенном ниже примере кода:{ "AadGroupCanvasConfiguration": [ { "aadGroupId": "#{canvasshare.aadGroupId}#", "canvasNameInSolution": "cat_devopskitsamplecanvasapp_c7ec5", "roleName": "#{canvasshare.roleName}#" } ] }
roleName
может иметь значениеCanView
,CanViewWithShare
илиCanEdit
.Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.
На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например:
canvasshare.aadGroupId
.В качестве значения введите идентификатор группы Microsoft Entra, с которой нужно поделиться приложением для этой конкретной среды.
Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.
Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.
Создайте JSON конфигурации группы Microsoft Entra и команды
Свойство AadGroupTeamConfiguration
в файле customDeploymentConfiguration.json сопоставляет рабочие группы и роли Dataverse с группами Microsoft Entra в вашем решении после импорта решения в среду.
В ваше решение должны быть добавлены роли безопасности, если они не созданы вручную в целевой среде. К рабочей группе можно применить одну или несколько ролей. Роли предоставляют разрешения для компонентов решений, необходимых пользователям в группе.
В качестве имени рабочей группы Dataverse может использоваться имя существующей рабочей группы или имя новой рабочей группы, которая должна быть создана в Dataverse и сопоставлена с группой Microsoft Entra после импорта решения.
Ролями Dataverse могут быть любые роли безопасности в Dataverse, которые будут применяться к рабочей группе после импорта решения. Роли должны иметь привилегии для ресурсов, необходимых решению, таких как таблицы и процессы.
Как и в предыдущем разделе, получите идентификатор группы Microsoft Entra на странице Группа на портале Azure.
Отредактируйте файл customDeploymentSettings.json и вставьте JSON в свойство
AadGroupTeamConfiguration
, как показано в приведенном ниже примере кода:{ "AadGroupTeamConfiguration": [ { "aadGroupTeamName": "alm-accelerator-sample-solution", "aadSecurityGroupId": "#{team.aadSecurityGroupId}#", "dataverseSecurityRoleNames": [ "ALM Accelerator Sample Role" ] } ] }
Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.
На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например:
team.aadSecurityGroupId
.В качестве значения укажите идентификатор группы Microsoft Entra, которую нужно связать с рабочей группой Dataverse.
Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.
Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.
Создание JSON права владения на компоненты решения
Свойство SolutionComponentOwnershipConfiguration
в файле customDeploymentConfiguration.json назначает пользователей Dataverse в качестве владельцев компонентов решения после импорта решения в среду. Назначение прав владения полезно для таких компонентов, как потоки, так как после импорта решения конвейером такие компоненты по умолчанию принадлежали бы пользователю, являющемуся субъектом-службой, и организациям пришлось бы переназначать их другим владельцам после импорта.
Свойство SolutionComponentOwnershipConfiguration
также включает потоки, которые не имеют ссылок на подключения. Если ссылки на подключения для включения потока отсутствуют, поток включается указанным пользователем.
Заметка
Текущий конвейер реализует только возможность устанавливать права собственности на потоки.
Код типа компонента решения основан на типах компонентов, указанных в ссылке веб-API solutioncomponent EntityType. Например, поток Power Automate — тип компонента 29. В качестве типа компонента должно быть указано целочисленное значение без кавычек.
Получите уникальное имя компонента потока Power Automate из распакованного решения.
При создании потоков для них не требуется использовать уникальные имена. Единственный подлинно уникальный идентификатор для потока — это внутренний идентификатор, который система назначает ему в решении.
Получите адрес электронной почты владельца из записи пользователя в Dataverse или Microsoft 365.
Отредактируйте файл 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}#" } ] }
Если вы используете расширение «Заменить токены» и добавляете токены в свою конфигурацию, как в предыдущем примере, откройте конвейер для своего решения и выберите Изменить>Переменные.
На экране Переменные конвейера создайте переменную конвейера для каждого токена в вашей конфигурации, например:
owner.ownerEmail
.В качестве значения введите адрес электронной почты владельца компонента.
Чтобы гарантировать, что значение не будет сохранено в виде обычного текста, выберите Держать это значение в секрете.
Если применимо, повторите шаги, описанные выше, для каждого решения и конвейера, которые вы создаете.
Импорт данных из конвейера
Вам может потребоваться импортировать конфигурацию или исходные данные в вашу среду Dataverse после того, как вы развернете свое решение в целевой среде. Для конвейеров настроен импорт данных с помощью средства миграции конфигурации, доступного через NuGet. Узнайте больше об управлении данными конфигурации.
Если данные конфигурации хранятся в корне каталога config, во всех средах будут развернуты одни и те же данные конфигурации. Вы можете создавать файлы данных конфигурации, учитывающие особенности конкретных сред. Храните эти файлы в подкаталогах каталога config с именами, соответствующими вашим средам. Имя каталога должно совпадать с переменной EnvironmentName
, созданной вами при настройке конвейера для проверочной, тестовой и рабочей сред. При отсутствии данных конфигурации и каталога для конкретной среды конвейеры вернутся к данным конфигурации в корне каталога config.
Скопируйте репозиторий Azure DevOps, в котором ваше решение должно контролироваться исходным кодом и где вы создали YAML-конвейер решений, на свой локальный компьютер.
Если вы еще этого не сделали, создайте каталог c именем config в папке config в папке вашего решения.
Установите средство миграции конфигурации (Configuration Migration Tool). Следуйте инструкциям в разделе Загрузка средств из NuGet.
Откройте инструмент миграции конфигурации, выберите Создать схему, а затем выберите Продолжить.
Войдите в клиент, из которого вы хотите экспортировать данные конфигурации.
Выберите свою среду.
Выберите таблицы и столбцы, которые необходимо экспортировать.
Нажмите Сохранить и экспортировать. Сохраните данные в каталог с путем config\ConfigurationMigrationData в вашем локальном репозитории Azure DevOps в папке решения, для которого необходимо импортировать данные.
Заметка
Конвейер будет искать эту конкретную папку для импорта данных после того, как ваше решение будет импортировано. Проследите, чтобы имя папки и ее расположение точно совпадали с указанными здесь.
Когда будет предложено экспортировать данные, выберите Да.
Выберите то же расположение для своих экспортированных данных, нажмите Сохранить, а затем выберите Экспорт данных.
По завершении экспорта распакуйте файлы из файла data.zip в каталог ConfigurationMigrationData. Удалите файлы data.zip и SampleData.xml.
Зафиксируйте изменения в ваших данных в Azure DevOps.