You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CI/CD中自动获取Databricks工作区URL与访问令牌

自动获取Databricks Domain与Token实现CI/CD集成

一、获取Databricks工作区Domain(Workspace URL)

当通过ARM模板创建Databricks工作区后,可通过以下步骤自动获取Domain:

  1. 在ARM模板中定义输出参数
    在ARM模板的outputs段添加工作区URL的输出,确保部署完成后能捕获该值:
    "outputs": {
      "databricksWorkspaceUrl": {
        "type": "string",
        "value": "[reference(resourceId('Microsoft.Databricks/workspaces', parameters('workspaceName'))).workspaceUrl]"
      }
    }
    
  2. 在构建流水线中捕获输出并传递到发布流水线
    • 在Azure DevOps的ARM部署任务中,勾选**“输出变量”**选项,将databricksWorkspaceUrl保存为构建流水线变量。
    • 发布流水线通过链接构建工件或直接引用构建变量的方式,将该值传递到发布阶段。

二、自动生成并获取Databricks Access Token

推荐两种安全的自动生成方式:

方式1:通过Azure AD服务主体生成Token

利用Azure CLI直接生成适用于Databricks的AD令牌,无需提前创建Databricks本地Token:

  1. 在发布流水线中添加Azure CLI任务,执行以下命令:
    az account get-access-token --resource 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d --query accessToken -o tsv
    
    注:2ff814a6-3304-4ab8-85cb-cd0e6f879c1d是Databricks服务的固定资源ID,所有Azure租户通用。
  2. 将命令输出保存为保密流水线变量(例如DBRKS_TOKEN),避免明文泄露。

方式2:通过Databricks API创建专用Token

如果需要创建带有特定权限、有效期的Databricks本地Token,可先通过AD令牌调用API生成:

import requests

def create_databricks_token(domain, aad_token):
    response = requests.post(
        f"https://{domain}/api/2.0/token/create",
        headers={'Authorization': f'Bearer {aad_token}'},
        json={
            "lifetime_seconds": 3600,  # 设置1小时有效期,按需调整
            "comment": "CI/CD pipeline专用Token"
        }
    )
    if response.status_code == 200:
        return response.json()['token_value']
    else:
        raise Exception(f"Token创建失败: {response.json()}")

三、在发布流水线中传递变量到Python脚本

修改你的Python集群创建脚本,从环境变量读取Domain和Token:

import os
import requests

def cluster_create():
    DOMAIN = os.environ.get("DBRKS_DOMAIN")
    TOKEN = os.environ.get("DBRKS_TOKEN")
    
    response = requests.post(
        f'https://{DOMAIN}/api/2.0/clusters/create',
        headers={'Authorization': f'Bearer {TOKEN}'},
        json={
            "cluster_name": "cluster",
            "spark_version": "7.3.x-scala2.12",
            "node_type_id": "Standard_DS3_v2",
            "autotermination_minutes": 10,
            "autoscale" : {
                "min_workers": 1,
                "max_workers": 3
            }
        }
    )
    if response.status_code == 200:
        cluster_id = response.json()['cluster_id']
        print(cluster_id)
        os.environ["DBRKS_CLUSTER_ID"] = cluster_id
        return cluster_id
    else:
        print(f"集群创建失败: {response.json()['error_code']}: {response.json()['message']}")
        raise Exception("Cluster creation failed")

在发布流水线的Python脚本任务中,设置环境变量:

  • 添加DBRKS_DOMAIN=$(databricksWorkspaceUrl)
  • 添加DBRKS_TOKEN=$(DBRKS_TOKEN)(标记为保密变量)

注意事项

  • Token安全:将Token变量标记为保密,避免在流水线日志中明文显示;设置较短有效期,每次发布时重新生成。
  • 权限最小化:确保用于生成Token的Azure AD服务主体仅拥有Databricks工作区的必要权限(如集群创建、库安装)。

内容的提问来源于stack exchange,提问作者Syamala Kumar Rama Koti Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:05:18