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

Azure DevOps CI/CD推送Databricks笔记本时认证卡滞求助

解决Azure DevOps流水线Databricks PAT认证卡住的问题

你的流水线卡在认证步骤,核心问题是原认证逻辑错误且使用了交互式命令,需要对代码做以下几处修正:

1. 替换交互式认证为非交互式配置

原代码中databricks configure --token是交互式命令,会等待用户输入导致流水线卡住;同时databricks tokens create是创建新Token的操作,完全没必要——你已经有现成的PAT,直接用它配置CLI即可。

推荐通过直接写入Databricks CLI配置文件完成非交互式认证,稳定且无需依赖环境变量:

# 生成Databricks CLI配置文件
cat > ~/.databrickscfg << EOF
[DEFAULT]
host = $(databricksWorkspaceUrl)
token = $(databricksPAT)
EOF

2. 补全workspace import命令的必要参数

原databricks workspace import缺少目标路径、格式和覆盖模式,会执行失败。需要补充:

  • 目标工作区完整路径(比如/Workspace/Production/Notebook1)
  • --format指定笔记本格式(SOURCE对应.py/.ipynb等源文件,DBC是Databricks专属格式)
  • --mode overwrite(可选,需要覆盖已有笔记本时添加)

示例:

databricks workspace import --format SOURCE --mode overwrite $(Build.SourcesDirectory)/notebooks/Notebook1.py /Workspace/Production/Notebook1

3. 完善runs submit的集群配置

原集群配置仅包含spark_version,缺少必要参数会导致提交失败,需补充node_type_id、num_workers等核心配置:

databricks runs submit --json '{
  "run_name": "My Notebook Run",
  "new_cluster": {
    "spark_version": "7.3.x-scala2.12",
    "node_type_id": "Standard_DS3_v2",
    "num_workers": 1
  },
  "notebook_task": {
    "notebook_path": "/Workspace/Production/Notebook1"
  }
}'

修正后的完整流水线代码

variables:
  databricksWorkspaceUrl: 'https://<your-workspace-region>.azuredatabricks.net' # 替换为你的Databricks工作区URL
  databricksPAT: $(DatabricksPAT) # 建议在Azure DevOps变量组中配置为保密变量,禁止明文写入

trigger:
- development

pool:
  vmImage: 'ubuntu-latest'
  
steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    addToPath: true

- checkout: self

- script: |
    echo "Starting Databricks notebook upload..."
    # Install Databricks CLI
    pip install databricks-cli

    # 非交互式配置Databricks CLI认证
    echo "Authenticating with Databricks..."
    cat > ~/.databrickscfg << EOF
[DEFAULT]
host = $(databricksWorkspaceUrl)
token = $(databricksPAT)
EOF

    # 验证配置是否生效(可选,用于调试)
    databricks workspace list /

    # 上传笔记本到Databricks工作区
    echo "Uploading notebooks to Databricks..."
    databricks workspace import --format SOURCE --mode overwrite $(Build.SourcesDirectory)/notebooks/Notebook1.py /Workspace/Production/Notebook1
    databricks workspace import --format SOURCE --mode overwrite $(Build.SourcesDirectory)/notebooks/Notebook2.ipynb /Workspace/Production/Notebook2
    echo "Notebooks uploaded successfully."

    # 触发Databricks作业
    echo "Triggering Databricks pipeline..."
    databricks runs submit --json '{
      "run_name": "My Notebook Run",
      "new_cluster": {
        "spark_version": "7.3.x-scala2.12",
        "node_type_id": "Standard_DS3_v2",
        "num_workers": 1
      },
      "notebook_task": {
        "notebook_path": "/Workspace/Production/Notebook1"
      }
    }'
    echo "Databricks pipeline triggered."
  displayName: 'Upload Notebooks to Databricks and Trigger Databricks Pipeline'

额外注意事项

  • 不要在代码中明文存储databricksPAT,在Azure DevOps中将其设置为保密变量,避免泄露。
  • 确保你的PAT拥有足够权限:workspace import需要工作区写入权限,runs submit需要集群创建和作业提交权限。

内容的提问来源于stack exchange,提问作者SanjanaSanju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:33:25