在 Azure DevOps 中自动实现与服务主体的 Git 集成

Fabric Git 集成是实现全自动 CI/CD 管道的基础,支持组织在开发、测试和生产环境中无缝地移动资产。

目前,Fabric Git 集成支持两个主要 Git 提供程序:

  • Azure DevOps
  • GitHub

本文重点介绍 Azure DevOps 的服务主体功能。 此集成允许 Fabric 用户使用服务主体执行 git 操作。

Azure DevOps:身份验证 - 自动和配置

默认情况下,每个 Fabric 工作区都未连接到任何 Git 存储库。 Fabric 工作区具有两种不同的方法,可用于向 git 存储库进行身份验证。 这些进程称为:

  • 自动 Git 凭据
  • 配置的凭据

自动 git 凭据

当管理员用户想要将工作区连接到 Azure DevOps (ADO) 存储库时,用户必须先从工作区设置登录,然后系统标识用户可以在当前 Fabric 租户中访问哪些 ADO 组织,从而允许用户继续配置。

建立初始连接后,对同一工作区具有至少参与者权限的任何其他用户无需重复连接过程。 相反,系统会尝试使用配置的 ADO 存储库对第二个用户进行身份验证。 如果用户缺少必要的权限,Fabric Git 集成源代码管理窗格将显示红色指示器。

这种简化的身份验证过程称为“自动 Git 凭据”。

配置的凭据

已配置的凭据可以通过编程方式使用服务主体创建 Azure DevOps 云连接。

Azure DevOps 连接支持两种身份验证方法:

  • OAuth 2.0
  • 服务主体

这两种方法都支持 多租户(跨租户)方案,使组织在环境中具有灵活性。

对同一工作区具有至少参与者权限的任何其他用户都不需要重复连接过程。 在服务主体支持之前,系统仅尝试通过 自动身份验证对辅助用户进行身份验证。

如果 自动身份验证 失败,系统还会尝试使用用户有权访问的任何 已配置凭据 进行连接,确保更流畅的体验并减少冗余设置步骤。

工作原理

若要使用服务主体将 Fabric 工作区连接到外部 Git 提供程序,Git 集成必须使用 Azure DevOps - 源代码管理类型的 Fabric 云连接。

可以通过门户通过两种方式创建此云连接:

在这两种情况下,连接都是在登录用户的标识下创建的。

如果服务主体需要使用此连接,则用户需要任一

  • 与服务主体共享连接
  • 使用 连接 REST API 创建新的连接,并传递服务主体凭据。

以下步骤概述了如何使用 API 通过服务主体创建云连接。

先决条件

若要完成概述的步骤,需要具有以下权限:

  • 注册 Entra ID 应用程序并注意:

    • 租户 ID
    • 客户 ID
    • 客户端密码
  • 授予服务主体:

使用服务主体将新工作区连接到 Azure DevOps

若要以编程方式使用服务主体将 Fabric 工作区连接到 Azure DevOps,需要遵循以下步骤:

  1. 生成服务主体访问令牌: 使用服务主体通过 Microsoft Fabric 进行身份验证。
  2. 创建 Azure DevOps 云连接: 在 Microsoft Fabric 中创建新的连接资源,用于存储 Azure DevOps 存储库凭据和配置。
  3. 将工作区连接到 git: 使用步骤 2 中创建的连接将特定 Fabric 工作区链接到 Azure DevOps 存储库。
  4. 初始化连接: 初始化 Git 连接。

1. 生成服务主体访问令牌

以下示例演示如何生成服务主体访问令牌。

curl --request GET \ 
--url https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token \ 
--header 'content-type: multipart/form-data' \ 
--form grant_type=client_credentials \ 
--form client_id=<client-id> \ 
--form 'client_secret=<client-secret>' \ 
--form scope=https://api.fabric.microsoft.com/.default 

注释

复制响应中的access_token,以便执行后续步骤。

2.创建 Azure DevOps 云连接

在 Microsoft Fabric 中创建新的连接资源,用于存储 Azure DevOps 存储库凭据和配置。

curl --request POST \ 
--url https://api.fabric.microsoft.com/v1/connections \ 
--header 'authorization: Bearer <step1: access-token>' \ 
--header 'content-type: application/json' \ 
--data '{ 

"displayName": "<name of the connection>", 
"connectivityType": "ShareableCloud", 
"connectionDetails": { 
"creationMethod": "AzureDevOpsSourceControl.Contents", 
"type": "AzureDevOpsSourceControl", 
"parameters": [ 

{ 
"dataType": "Text", 
"name": "url", 
"value": "https://dev.azure.com/<ado org name>/<project name>/_git/<repo name>/"}]}, 
"credentialDetails": { 
"credentials": { 
"credentialType": "ServicePrincipal", 
"tenantId": "<tenant-id>", 
"servicePrincipalClientId": "<client-id>", 
"servicePrincipalSecret": "<client-secret>"}}}' 

注释

保存响应中的 ID。 将用于后续步骤。

3.将工作区连接到 git

使用步骤 2 中创建的连接将特定 Fabric 工作区链接到 Azure DevOps 存储库。

curl --request POST \ 
--url https://api.fabric.microsoft.com/v1/workspaces/<workspace-id>/git/connect \ 
--header 'authorization: Bearer <step1: access-token>' \ 
--header 'content-type: application/json' \ 
--data '{ 
"gitProviderDetails": { 
"organizationName": "<ado org name>", 
"projectName": "<project name>", 
"gitProviderType": "AzureDevOps", 
"repositoryName": "<repo name>", 
"branchName": "<branch name>", 
"directoryName": "<folder name – must exist before OR empty>" 
}, 
"myGitCredentials": { 
"source": "ConfiguredConnection", 
"connectionId": "<step 2 – the new connection id>"}}' 

4.初始化连接

初始化连接,在此处阅读详细信息

注释

将 <> 替换为你的值,请注意 initializationStrategy 参数。如果连接的工作区中已经有项存在,则可以考虑使用“preferWorkspace”。

curl --request POST \ 
--url https://api.fabric.microsoft.com/v1/workspaces/<workspace-id>/git/initializeConnection \ 
--header 'authorization: Bearer <step1: access-token>' \ 
--header 'content-type: application/json' \ 
--data '{"initializationStrategy": "PreferRemote"}' 

如果存储库 /workspace 非空,响应将返回 requiredAction 参数(基于初始化策略),请根据响应中的 workspaceHead 和 remoteCommitHash,将 update-from-gitcommit-to-git 用于完成该过程。

连接现有工作区以使用服务主体

如果工作区已使用用户身份连接到 Azure DevOps,但想要用服务主体来执行 Fabric Git REST API 操作,请执行以下步骤:

  1. 将服务主体添加为工作区管理员。
  2. 向服务主体授予对 Azure DevOps 云连接的访问权限。 可以使用两个选项:
  • 共享现有连接: 使用有权访问相关 ADO 云连接的用户登录,并通过“管理用户”与服务主体共享它。
  • 创建新的连接: 重复上一部分中的步骤 1 和 2,使用服务主体凭据创建新的云连接。
  1. 验证访问权限 - 调用 GET 连接 API 以确认服务主体可以访问 此处所需的云连接:
curl --request GET \ 
--url https://api.fabric.microsoft.com/v1/connections \ 
--header 'authorization: Bearer <step 2: access-token>' 

从响应中获取相关连接的 ID 值。

  1. 更新 Git 凭据:生成 访问令牌(上一部分的步骤 1),并调用 Update My Git Credential API在此处阅读更多信息(将<>替换为你的值):
curl --request PATCH \ 
--url https://api.fabric.microsoft.com/v1/workspaces/<workspace-id>/git/myGitCredentials \ 
--header 'authorization: Bearer <step 2: access-token>' \ 
--header 'content-type: application/json' \ 
--data '{ 
"source": "ConfiguredConnection", 
"connectionId": "<step 3: connection id>"}' 

执行这些步骤后,服务主体已完全配置并准备好执行 Fabric Git REST API操作。