部署配置指南

ALM Accelerator for Power Platform 使用 JSON 格式的配置文件自动部署解决方案。 它们设置连接引用、环境变量和权限,共享画布应用,并在将解决方案部署到下游环境时更新解决方案组件(如 Power Automate 流)的所有权。

本文中的配置文件允许您配置特定于部署解决方案的环境的项目。 您需要的配置文件,以及本文中需要执行的步骤,取决于您的解决方案管道部署的组件。 例如,如果您的解决方案仅包含 Dataverse 表和模型驱动应用,不需要按环境的配置或数据,您可以跳过其中一些步骤。

我们在 ALMAcceleratorSampleSolution 部署设置自定义部署设置中提供了示例配置文件。

开始之前

本文是手动设置部署配置文件的分步指南。 其中提供有关 ALM 加速器应用和管道执行的操作的详细信息和上下文,为想要了解过程中每个步骤细节的管理员提供参考。

不过,我们建议您在 ALM 加速器应用中配置部署设置

创建部署设置 JSON 文件

customDeploymentSettings.json 文件存储在配置目录的根目录中时,相同的配置将应用于所有环境。 假设您使用文件转换或令牌替换管道任务来获取特定于特定环境的信息,可以在管道变量中指定每个环境的值。

不过,您也可以创建特定于环境的 customDeploymentSettings.json 文件。 将它们存储在配置目录的子目录中,该目录根据您的环境命名。 目录名称必须与您在为验证、测试和生产环境设置管道时创建的 EnvironmentName 变量匹配。 如果特定于环境的部署设置 JSON 和目录不存在,管道将恢复为配置目录根目录中的配置。

配置目录层次结构的屏幕截图。

您还可以创建特定于用户的配置文件,如上图中的 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. 将该文件保存在 Git 中的配置文件夹中。

配置文件夹结构的屏幕截图。

创建连接引用 JSON

customDeploymentConfiguration.json 文件中的属性 ConnectionReferences 在解决方案导入环境后设置解决方案中的连接引用。 ConnectionReferences 还会根据变量中指定的连接负责人导入解决方案后启用流。

  1. 在您的目标环境中手动创建连接。

  2. 复制连接的 ID。

    • 从解决方案中的连接引用组件获取连接引用的逻辑名称。

      解决方案中连接引用架构名称的屏幕截图,在名称标签下方的禁用文本字段中突出显示。

    • 创建连接后,从连接的 URL 获取连接 ID。 例如,如果 URL 为“https://.../connections/shared_commondataservice/9f66d1d455f3474ebf24e4fa2c04cea2/details”,连接 ID 为 9f66d1d455f3474ebf24e4fa2c04cea2

  3. 编辑 customDeploymentSettings.json 文件,将 ID 粘贴到 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. 将此值设置为您之前找到的连接 ID。

  7. 要确保此值不会保存为纯文本,选择保留此值为机密

在适用的情况下,对您创建的每个解决方案和管道重复这些步骤。

在部署配置文件中创建环境变量 JSON

customDeploymentConfiguration.json 文件中的属性 EnvironmentVariables 在解决方案导入环境后设置解决方案中的 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. 将该文件保存在 Git 中的配置文件夹中。

自定义部署设置的配置文件夹结构的屏幕截图。

在自定义部署配置文件中创建默认环境变量 JSON

customDeploymentConfiguration.json 的属性 DefaultEnvironmentVariables 在导出管道中用于在解决方案导出并存储在源代码管理中时设置解决方案中的 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

在适用的情况下,对您创建的每个解决方案和管道重复这些步骤。

创建 Microsoft Entra 组画布配置 JSON

customDeploymentConfiguration.json 文件中的属性 AadGroupCanvasConfiguration 在解决方案导入环境后与特定 Microsoft Entra 组共享解决方案中的画布应用。

  1. 复制画布应用和 Microsoft Entra 组的 ID。

    • 从解决方案中的画布应用组件获取画布应用的架构名称。

      画布应用标签架构名称的屏幕截图,在名称标签下方的禁用文本字段中突出显示。

    • 从 Azure 门户中的页面获取 Microsoft Entra 组 ID。

      Microsoft Entra 组 ID 的屏幕截图,在对象 ID 标签旁边的禁用文本框中突出显示。

  2. 编辑 customDeploymentSettings.json 文件,将 ID 粘贴到 AadGroupCanvasConfiguration 属性中,如以下示例代码所示:

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

    roleName 可以是 CanViewCanViewWithShareCanEdit

  3. 如果您使用“替换令牌”扩展并在配置中添加令牌,如上例所示,请打开解决方案的管道,然后选择编辑>变量

  4. 管道变量屏幕上,为配置中的每个令牌创建一个管道变量;例如,canvasshare.aadGroupId

  5. 将此值设置为 Microsoft Entra 组 ID,这是必须为该特定环境共享应用时所使用的 ID。

  6. 要确保此值不会保存为纯文本,选择保留此值为机密

在适用的情况下,对您创建的每个解决方案和管道重复这些步骤。

创建 Microsoft Entra 组和团队配置 JSON

customDeploymentConfiguration.json 文件中的属性 AadGroupTeamConfiguration 会在解决方案导入环境后将解决方案中的 Dataverse 团队和角色映射到 Microsoft Entra 组。

如果安全角色不是在目标环境中手动创建的,则必须将它们添加到您的解决方案中。 一个或多个角色可以应用于团队。 这些角色提供对组中用户所需的解决方案组件的权限。

  1. Dataverse 团队名称可以是现有团队或要在 Dataverse 中创建的新团队,将在导入解决方案后映射到 Microsoft Entra 组。

  2. Dataverse 角色可以是 Dataverse 中的任何安全角色,将在导入解决方案后应用于团队。 这些角色必须对解决方案所需的资源(如表和流程)具有特权。

  3. 从 Azure 门户中的页面获取 Microsoft Entra 组 ID,如前一节所述。

  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 组 ID,以与 Dataverse 中的团队关联。

  8. 要确保此值不会保存为纯文本,选择保留此值为机密

在适用的情况下,对您创建的每个解决方案和管道重复这些步骤。

创建解决方案组件所有权 JSON

customDeploymentConfiguration.json 文件中的属性 SolutionComponentOwnershipConfiguration 会在解决方案导入环境后,将解决方案组件的所有权分配给 Dataverse 用户。 在通过管道导入解决方案并且组织希望在导入后重新分配它们时,分配所有权对于默认归服务主体用户所有的流等组件很有用。

SolutionComponentOwnershipConfiguration 属性还会启用没有任何连接引用的流。 当不存在用于启用流的连接引用时,流将由指定的用户启用。

备注

当前管道仅实现设置流所有权的能力。

  1. 解决方案组件类型代码基于 solutioncomponent EntityType Web API 参考中指定的组件类型。 例如,Power Automate 流的组件类型是 29。 组件类型必须指定为整数值,不带引号。

  2. 从解包的解决方案中获取 Power Automate 流组件的唯一名称。

    流创建时不需要唯一名称。 流的唯一真正唯一标识符是系统在解决方案中为其分配的内部 ID。

    解包的解决方案工作流 XML 文件的屏幕截图。

    显示 WorkflowId 的解包解决方案工作流 XML 的屏幕截图。

  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 提供的配置迁移工具导入数据。 了解有关管理配置数据的更多信息

当配置数据存储在配置目录的根目录中时,相同的配置数据将被部署到所有环境。 您可以创建环境特定的配置数据文件。 将它们存储在配置目录的子目录中,该目录根据您的环境命名。 目录名称必须与您在为验证、测试和生产环境设置管道时创建的 EnvironmentName 变量匹配。 如果不存在特定于环境的配置数据和目录,管道将恢复为配置目录根目录中的配置数据。

  1. 将在其中对您的解决方案进行源代码管理并且您在其中创建了解决方案管道 YAML 的 Azure DevOps 存储库克隆到本地计算机。

  2. 如果您还没有完成操作,在解决方案文件夹的配置文件夹中创建一个名为配置的目录。

    本地存储库中解决方案目录下的配置目录的屏幕截图。

  3. 安装配置迁移工具。 按照从 NuGet 下载工具中的说明操作。

  4. 打开配置迁移工具,选择创建架构,然后选择继续

  5. 登录到要从中导出配置数据的租户。

  6. 选择环境。

  7. 选择要导出的表和列。

  8. 选择保存并导出。 将数据保存到本地 Azure DevOps 存储库中的目录路径 config\ConfigurationMigrationData,位于要导入数据的解决方案的文件夹中。

    备注

    导入解决方案后,管道将查找此特定文件夹以导入数据。 请确保文件夹的名称及其位置与此处给出的完全相同。

  9. 当提示您导出数据时,选择

  10. 为导出的数据选择相同的位置,选择保存,然后选择导出数据

  11. 导出完成后,将 data.zip 文件中的文件解压到 ConfigurationMigrationData 目录。 删除 data.zipSampleData.xml 文件。

    在 ConfigurationMigrationData 目录中解压缩的配置迁移数据的屏幕截图。

  12. 将您的数据更改提交到 Azure DevOps。

后续步骤