本页介绍如何配置 Azure DevOps 管道,以对 Databricks CLI 进行身份验证并调用 Azure Databricks。
在您开始之前
在配置 Azure DevOps 身份验证之前完成以下步骤:
在 Azure 中创建服务主体,并将其添加到具有适当权限的 Azure Databricks 工作区。 如果没有此步骤,即使管道配置正确,身份验证也会失败。
对于Microsoft Entra ID 托管服务主体,请在 Azure 中创建Microsoft Entra ID 应用程序,然后将其添加到工作区。 请参阅 服务主体 和 管理服务主体。
将一个步骤添加到管道中,以便在代理上安装 Databricks CLI。
- script: | curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh displayName: 'Install Databricks CLI'小窍门
若要将 CLI 安装固定到特定版本而不是使用最新版本,请替换为
main版本标记(例如,v0.224.0)。
选择身份验证方法
Azure DevOps 通过 服务连接管理身份验证。 在“ 项目设置>服务连接”下的 Azure DevOps 门户中访问它们。
若要对 Databricks CLI 进行身份验证,请使用以下方法之一的 Azure 资源管理器 服务连接类型:
| 方法 | Description | 最适用于 |
|---|---|---|
| 工作负载身份联合 (建议) | 使用 OpenID Connect (OIDC) 获取令牌。 需要使用服务主体配置 Azure DevOps 生成的颁发者和使用者标识符。 | 安全、无机密的身份验证 |
| 带有客户端密钥的服务主体 | 使用客户端 ID 和机密生成生存期较短的 OAuth 令牌。 需要为服务主体生成机密。 | 需要在任务间共享凭据的场景 |
| 托管标识 | 使用分配给 VM 或容器的标识来运行管道。 仅适用于自托管运行器。 请参阅 Azure 文档。 | 具有已分配标识的自托管运行器 |
注释
尽可能使用工作负载身份联合。 它不依赖于机密,因此它比其他方法更安全。 它无需手动配置即可自动处理 AzureCLI@2 任务。 请参阅 创建使用工作负荷标识联合的服务连接。
配置 Azure CLI 身份验证
默认情况下,Databricks CLI 使用 Azure CLI 进行身份验证。 所有 Databricks CLI 命令都必须在任务内 AzureCLI@2 运行,这意味着每个任务都独立进行身份验证。 这引入了一些延迟,但需要最少的配置。
- task: AzureCLI@2
inputs:
azureSubscription: <your-service-connection-name>
useGlobalConfig: true
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
databricks bundle deploy
更新以下值:
-
azureSubscription:Azure 资源管理器服务连接的名称。 -
useGlobalConfig:必需。 确保由命令生成的databricks bundle子进程可以访问经过身份验证的会话。 -
DATABRICKS_HOST:如果尚未在捆绑配置或上一步中定义,请设置此值。
配置客户端密码身份验证
如果需要跨多个任务共享凭据,或者 Azure CLI 身份验证会增加太多的延迟,请使用客户端密码。
此方法从一个任务中的服务连接检索身份验证详细信息,然后将其导出为后续任务的作业范围的环境变量。
- task: AzureCLI@2
inputs:
azureSubscription: <your-service-connection-name>
addSpnToEnvironment: true
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
echo "##vso[task.setvariable variable=ARM_CLIENT_ID]${servicePrincipalId}"
echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET]${servicePrincipalKey}"
echo "##vso[task.setvariable variable=ARM_TENANT_ID]${tenantId}"
- script: |
export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
databricks bundle deploy
注意:
- 密钥
addSpnToEnvironment将servicePrincipalId、servicePrincipalKey和tenantId暴露于内联脚本。 - 这些命令会将
##vso任务范围的变量升级为 Databricks CLI 自动识别的作业范围的变量。 - 默认情况下,
ARM_CLIENT_SECRET所有后续步骤都可访问。 将issecret=true添加到变量定义中,然后将其显式传递给每个需要它的步骤,以限制访问。 无论此设置如何,机密都会在日志中屏蔽。
有关完整示例,请参阅 授权Microsoft Entra 服务主体访问 Git 文件夹。
配置托管身份验证
托管标识认证依靠 VM 或容器的配置,而不是依靠管道任务。 此方法不需要 AzureCLI@2 任务。
- script: |
export DATABRICKS_AZURE_RESOURCE_ID=/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Databricks/workspaces/<workspace-name>
export ARM_CLIENT_ID=<managed-identity-client-id>
export ARM_USE_MSI=true
export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
databricks current-user me
更新以下值:
-
DATABRICKS_AZURE_RESOURCE_ID:在 Azure 门户中工作区 的属性 下找到此值。 -
ARM_CLIENT_ID:托管标识的客户端 ID。 -
DATABRICKS_HOST:可选。 如果未设置,则从DATABRICKS_AZURE_RESOURCE_ID中推断该值。
托管标识必须在 Azure Databricks 工作区中具有 “参与者” 角色。