使用服务主体在Databricks CLI签出Azure DevOps分支报错求助
1. 变量拼写错误导致Databricks CLI认证异常
脚本中定义的变量为oauth_databrick_secret,但export时误用了$oauthDatabrickSecret(大小写不统一),导致DATABRICKS_CLIENT_SECRET环境变量为空,直接影响Databricks CLI的服务主体认证,进而可能引发命令参数解析错误。
修复:统一变量名大小写:
oauth_databrick_secret="<oauth secret for $sp_name in Databricks>" # ... export DATABRICKS_CLIENT_SECRET=$oauth_databrick_secret
2. 核心错误:令牌用途完全不匹配
你当前获取的是Databricks资源的访问令牌,但databricks git-credentials create需要的是Azure DevOps Git仓库的访问令牌,两者归属不同资源,无法混用。
服务主体访问Azure DevOps Git仓库,需获取针对Azure DevOps资源的令牌(资源ID为499b84ac-1321-427f-aa17-267ca6975798),而非Databricks的资源ID。
修复:替换令牌获取命令:
# 获取Azure DevOps的访问令牌,而非Databricks的 resource_id_azure_devops="499b84ac-1321-427f-aa17-267ca6975798" access_token=$(az account get-access-token --query accessToken -o tsv --resource $resource_id_azure_devops)
3. Git用户名的正确设置
Azure DevOps中,服务主体的Git用户名需使用其客户端ID($sp_id),而非服务主体名称——服务主体在Azure DevOps中的身份标识是client ID,而非显示名称。
修复:调整--git-username参数值:
databricks git-credentials create azureDevOpsServices --personal-access-token $access_token --git-username $sp_id
完整修正后的脚本
sp_name="<name of the Azure App registration>" sp_id="<the app id (client id) of $sp_name>" sp_secret="<the secret of the app id of $sp_name>" tenant_id="<tenant id>" resource_id_azure_devops="499b84ac-1321-427f-aa17-267ca6975798" # Azure DevOps oauth_databrick_secret="<oauth secret for $sp_name in Databricks>" # 服务主体登录Azure az login --allow-no-subscriptions --service-principal -u $sp_id -p $sp_secret --tenant $tenant_id # 获取Azure DevOps访问令牌 access_token=$(az account get-access-token --query accessToken -o tsv --resource $resource_id_azure_devops) # 配置Databricks CLI服务主体认证环境变量 export DATABRICKS_HOST="https://adb-xxxxxxxxxx.xx.azuredatabricks.net/" export DATABRICKS_CLIENT_ID=$sp_id export DATABRICKS_CLIENT_SECRET=$oauth_databrick_secret # 创建Git凭据(使用Azure DevOps令牌和服务主体client ID作为用户名) databricks git-credentials create azureDevOpsServices --personal-access-token $access_token --git-username $sp_id # 更新Databricks仓库 databricks repos update xxxxx
关于关联账户截图的说明
如果截图显示的是Databricks工作区中服务主体的OAuth配置状态,只要确认已正确添加对应OAuth密钥(即脚本中oauth_databrick_secret的值),该配置就无问题,和当前命令错误无直接关联。若OAuth配置有误,会先在Databricks CLI认证阶段报错,而非Git凭据创建阶段的参数错误。
内容的提问来源于stack exchange,提问作者Judith

