为 Databricks Git 文件夹 (Repos) 设置专用 Git 连接

了解并配置适用于 Databricks Git 文件夹的 Git 服务器代理,这是一种可配置的服务,可用于将 Databricks 工作区 Git 文件夹中的 Git 命令代理到 GitHub Enterprise Server、Azure DevOps Server、Bitbucket Server 和 GitLab 自管理服务的本地存储库。

注意

预览期间配置了 Databricks Git 服务器代理的用户应升级群集权限,以获得最佳性能。 请参阅删除全局 CAN_ATTACH_TO 权限

什么是适用于 Databricks Git 文件夹的 Git 服务器代理?

适用于 Databricks Git 文件夹的 Git 服务器代理是一项功能,可用于将 Git 命令从 Azure Databricks 工作区代理到你管理的本地 Git 存储库。

Databricks Git 文件夹(旧称 Repos)将连接的 Git 存储库表示为文件夹。 这些文件夹的内容通过将它们同步到连接的 Git 存储库进行版本控制。 默认情况下,Git 文件夹只能与公共 Git 提供程序(如公共 GitHub、GitLab、Azure DevOps 等)同步。 但是,如果你托管自己的本地 Git 服务器(如 GitHub Enterprise Server、Bitbucket Server 或 GitLab 自管理),则必须将 Git 服务器代理与 Git 文件夹配合使用,才能提供对 Git 服务器的 Databricks 访问权限。 必须可以从 Azure Databricks 数据平面(驱动程序节点)访问你的 Git 服务器。

注意

目前,Git 文件夹只能包含 Databricks 笔记本和子文件夹,以及一组特定的其他资产类型。 有关受支持的资产类型的当前列表,请参阅有关 Git 与 Databricks Git 文件夹集成的限制和常见问题解答

适用于 Databricks Git 文件夹的 Git 服务器代理如何工作?

适用于 Databricks Git 文件夹的 Git 服务器代理会从 Databricks 控制平面将 Git 命令代理到 Databricks 工作区计算平面中运行的“代理群集”。 在此上下文中,代理群集是一个群集,配置为从 Databricks Git 文件夹到自承载 Git 存储库的 Git 命令运行代理服务。 此代理服务从 Databricks 控制平面接收 Git 命令,并将其转发到 Git 服务器实例。

下图演示了整个系统体系结构:

此示意图显示如何将适用于 Databricks Git 文件夹的 Git 服务器代理配置为从客户的计算平面运行

目前,Git 服务器代理不再需要所有用户具备 CAN_ATTACH_TO 权限。 具有现有代理群集的管理员现在可修改群集 ACL 权限来启用此功能。 若要启用:

  1. 从边栏中选择“计算”,然后单击正在运行的 Git 服务器代理的计算条目旁边的 Kebab 菜单 kebab 菜单:

    从边栏中选择“计算”,然后选择 Git 代理服务器计算资源右侧的 kebab

  2. 在对话框中,删除“所有用户”的“可附加到”条目

    在弹出的模式对话框中,单击“所有用户,可附加”右侧的“X”

如何设置适用于 Databricks Git 文件夹的 Git 服务器代理?

本部分介绍了如何为适用于 Databricks Git 文件夹的 Git 服务器代理准备 Git 服务器实例、创建代理并验证配置。

开始之前

在启用代理之前,请考虑以下先决条件和规划任务:

  • 工作区已启用 Databricks Git 文件夹功能。
  • 可从 Azure Databricks 工作区的计算平面 VPC 访问 Git 服务器实例,该实例已启用 HTTPS 和个人访问令牌 (PAT)。

注意

适用于 Databricks 的 Git 服务器代理在你的 VPC 支持的所有区域中均适用。

步骤 1:准备 Git 服务器实例

要配置 Git 服务器实例,请执行以下操作:

  1. 使代理群集的驱动程序节点能访问 Git 服务器。

    你的企业 Git 服务器可以拥有 allowlist IP 地址,可通过这些地址进行访问。

    1. 为源自代理群集的流量关联静态出站 IP 地址。 为此,可以使用 Azure 防火墙或出口设备
    2. 将上一步中的 IP 地址添加到 Git 服务器的允许列表。
  2. 设置 Git 服务器实例以允许 HTTPS 传输。

    • 对于 GitHub Enterprise,请参阅 GitHub Enterprise 帮助中的应使用哪个远程 URL
    • 对于 Bitbucket,请转到 Bitbucket 服务器管理页并选择服务器设置。 在“HTTP(S) SCM 托管”部分中,启用已启用 HTTP(S) 复选框。

步骤 2:运行启用笔记本

要启用代理,请执行以下命令:

  1. 以工作区管理员(有权创建群集)身份登录到 Azure Databricks 工作区。

  2. 导入此笔记本:

    启用适用于 Databricks Git 文件夹的 Git 服务器代理以在 Git 文件夹中建立专用 Git 服务器连接

  3. 选择“运行所有”以执行以下任务:

    • 创建名为“Databricks Git 代理”的单个节点群集,该群集不会自动终止。 这是将处理 Git 命令并将其从 Azure Databricks 工作区转发到本地 Git 服务器的“代理群集”。
    • 启用功能标记,该标记控制 Databricks Git 文件夹中的 Git 请求是否通过群集进行代理。

重要

你必须是工作区中有权创建群集的管理员。

注意

应注意下列事项:

  • 运行其他长时间运行的群集来托管代理软件会产生额外的 DBU。 为了最大程度地降低成本,笔记本将代理配置为使用具有廉价节点类型的单节点群集。 但是,你可能想要修改群集选项以满足你的需求。

步骤 3:验证 Git 服务器配置

要验证 Git 服务器配置,请尝试通过代理群集克隆托管在专用 Git 服务器上的存储库。 克隆成功意味着你已成功为你的工作区启用 Git 服务器代理。

步骤 4:创建启用了代理的存储库

用户配置其 Git 凭据后,无需执行进一步的步骤来创建或同步存储库。 要在 Databricks Git 文件夹中配置凭据和创建存储库,请参阅配置 Git 凭据并将远程存储库连接到 Azure Databricks

删除全局 CAN_ATTACH_TO 权限

具有现有代理群集的管理员现在可以修改群集 ACL 权限,以利用正式发布版 Git 服务器代理行为。

如果以前使用 CAN_ATTACH_TO 权限配置了 Databricks Git 服务器代理,请使用以下步骤删除这些权限:

  1. 从边栏中选择“计算”,然后单击正在运行的 Git 服务器代理的“计算”条目旁边的 Kebab 菜单 kebab 菜单

    从边栏中选择“计算”,然后选择 Git 代理服务器计算资源右侧的 kebab

  2. 在对话框中,删除“所有用户”的“可附加到”条目

    在弹出的模式对话框中,单击“所有用户,可附加”右侧的“X”

故障排除

是否在配置适用于 Databricks Git 文件夹的 Git 服务器代理时遇到错误? 下面是一些常见问题和更有效地诊断它们的方法。

常见问题清单

在开始诊断错误之前,请确认已完成以下步骤:

  • 确认代理群集正在运行。
  • 确认 Databricks Git 文件夹用户对代理群集有“附加”权限。
  • 再次运行启用笔记本并捕获结果(如果尚未这样做)。 如果无法调试问题,Databricks 支持部门可以审查结果。 你可以将启用笔记本导出并作为 DBC 存档发送。

检查代理群集上的日志

代理群集上/databricks/git-proxy/git-proxy.log的文件包含可用于调试的日志。

日志文件应以行“Data-plane proxy server binding to ('', 8000)…”开头,否则,这意味着代理服务器未正确启动。 请尝试重启群集,或删除已创建的群集,然后再次运行启用笔记本。

如果日志文件不以此行开头,请查看 Databricks Git 文件夹中 Git 操作启动的每个 Git 请求之后的日志语句。

例如:

  do_GET: https://server-address/path/to/repo/info/refs?service=git-upload-pack 10.139.0.25 - - [09/Jun/2021 06:53:02] /
  "GET /server-address/path/to/repo/info/refs?service=git-upload-pack HTTP/1.1" 200`

写入此文件的错误日志可帮助你或 Databricks 支持团队调试问题。

常见错误消息及其解决方法

  • 由于 SSL 问题,无法建立安全连接

    你可能会看到以下错误:

      https://git.consult-prodigy.com/Prodigy/databricks_test: Secure connection to https://git.consult-prodigy.com/Prodigy/databricks_test could not be established because of SLL problems
    

    这通常意味着你使用的是需要特殊 SSL 证书的存储库。 检查代理群集上“/databricks/git-proxy/git-proxy.log”文件的内容。 如果它告知证书验证失败,则必须将证书颁发机构添加到系统证书链。 首先,提取根证书(使用浏览器或其他选项),并将其上传到 DBFS。 然后,编辑“Git 文件夹 Git 代理”群集,以使用 GIT_PROXY_CA_CERT_PATH 环境变量指向根证书文件。 关于编辑群集环境变量的详细信息,请参阅环境变量

    完成此步骤后,重启群集。

    为 Git 代理设置环境变量的 Databricks 模式对话框

  • 无法克隆存储库并显示错误消息“Git 凭据缺失/无效”

    首先,检查是否已在“用户设置”中配置 Git 凭据

    在以下情况下,你可能会遇到此错误:

      Error: Invalid Git credentials. Go to User Settings -> Git Integration and check that your personal access token or app password has the correct repo access.
    

    如果组织使用的是 SAML SSO,请确保令牌已获得授权(可以通过 Git 服务器的个人访问令牌 (PAT) 管理页完成授权)。

常见问题解答

Git 服务器代理的安全影响是什么?

要了解的最重要事项包括:

  • 代理不会影响 Databricks 控制平面的安全体系结构。
  • 每个工作区只能有一个 Git 代理服务器群集。

是的。 在当前版本中,Azure Databricks 工作区不区分代理存储库和非代理存储库。

Git 代理功能是否适用于其他 Git 企业服务器提供程序?

Databricks Git 文件夹支持 GitHub Enterprise、Bitbucket Server、Azure Repos Server 和 GitLab 自主管理。 如果其他企业 Git 服务器提供程序符合常见的 Git 规范,则它们应该也可以正常工作。

Databricks Git 文件夹是否支持提交 GPG 签名?

否。

Databricks Git 文件夹是否支持将 SSH 传输用于 Git 操作?

否。 仅支持 HTTPS。

是否支持在 Git 服务器上使用非默认 HTTPS 端口?

目前,启用笔记本假定 Git 服务器使用默认 HTTPS 端口 443。 可以设置环境变量 GIT_PROXY_CUSTOM_HTTP_PORT 以使用首选值覆盖端口值。

多个工作区是否可以共享一个代理,或者每个工作区都需要一个代理群集?

每个 Azure Databricks 工作区都需要一个代理群集。

代理是否适用于旧版单笔记本版本控制?

否,该代理不适用于旧版单笔记本版本控制。 用户必须迁移到 Databricks Git 文件夹版本控制。

Databricks 是否可以隐藏代理的 Git 服务器 URL? 用户是否可以输入原始 Git 服务器 URL 而不是代理 URL?

两个问题的答案都是“是”。 用户不需要针对代理调整自己的行为。 使用当前代理实现时,Databricks Git 文件夹的所有 Git 流量都通过代理进行路由。 用户输入正常的 Git 存储库 URL,例如 https://git.company.com/org/repo-name.git

用户使用 Git URL 的频率如何?

通常,用户仅在创建新的存储库时,或在签出尚未签出的现有存储库时,添加 Git URL。

该功能是否以透明方式将身份验证数据代理到 Git 服务器?

是的,代理使用用户帐户的 Git 服务器令牌向 Git 服务器进行身份验证。

是否有 Databricks 访问 Git 服务器代码?

Azure Databricks 代理服务使用用户提供的凭据访问 Git 服务器上的 Git 存储库,并将存储库中的任何代码文件与存储库同步。 访问权限受用户提供的个人访问令牌 (PAT) 中指定的权限限制。