首页 > 解决方案 > 使用 databricks cli 创建配置文件而不传递参数

问题描述

我正在尝试在天蓝色的 devops 管道中使用 databricks-cli。为此,我需要创建一个配置文件,使用:

databricks configure --profile Profile --token

问题是,当我运行该命令时,它会要求我提供主机和令牌,这会破坏我等待用户输入的管道。我想知道是否可以在不传递参数的情况下做到这一点。

我已经尝试过了:

echo "configuring databrick-cli authentication"

declare DATABRICKS_URL="https://westeurope.azuredatabricks.net"
declare DATABRICKS_ACCESS_TOKEN="authentication_token_generated_from_databricks_ux"

declare dbconfig=$(<~/.databrickscfg)
if [[ $dbconfig = *"host = "* && $dbconfig = *"token = "* ]]; then
  echo "file [~/.databrickscfg] is already configured"
else
  if [[ -z "$DATABRICKS_URL" || -z "$DATABRICKS_ACCESS_TOKEN" ]]; then
    echo "file [~/.databrickscfg] is not configured, but [DATABRICKS_URL],[DATABRICKS_ACCESS_TOKEN] env vars are not set"
  else
    echo "populating [~/.databrickscfg]"
    > ~/.databrickscfg
    echo "[DEFAULT]" >> ~/.databrickscfg
    echo "host = $DATABRICKS_URL" >> ~/.databrickscfg
    echo "token = $DATABRICKS_ACCESS_TOKEN" >> ~/.databrickscfg
    echo "" >> ~/.databrickscfg
  fi
fi

我正在尝试将主机和令牌放入,databrickscfg但它只是挂在那里,我猜它正在等待用户再次输入

在此处输入图像描述

我究竟做错了什么?

标签: shellazure-devopsdatabricksdatabricks-cli

解决方案


您可以通过同时传递多个值来配置命令来实现这一点,就像这里为 Databricks Connect 所做的那样

echo "$(databricks_host)
    $(databricks_token)" | databricks configure --token

但实际上,您可以只使用环境变量DATABRICKS_HOST,并且DATABRICKS_TOKEN文档中所述- Databricks CLI 将获取它们。

您需要考虑的唯一一件事 - 像 Databricks 令牌这样的敏感数据需要安全地存储在管道定义中,并且您需要以特殊方式访问它们 - 通过env(完整定义在这里):

    - script: |
        echo "[{{cookiecutter.profile}}]" >> ~/.databrickscfg
        echo "host = $DATABRICKS_HOST" >> ~/.databrickscfg
        echo "token = $DATABRICKS_TOKEN" >> ~/.databrickscfg
      env:
        DATABRICKS_HOST: $(DATABRICKS_HOST)
        DATABRICKS_TOKEN: $(DATABRICKS_TOKEN)

PS 您可以使用cicd-templates 项目为 Azure DevOps(或 Github Actions)生成模板,该模板可与 Databricks 一起使用。


推荐阅读