我正在尝试让 Databricks 工作流作为服务主体运行。我正在使用 Bitbucket 云存储库访问令牌,以便 Databricks 服务主体使用的 git 凭据不会与单个用户绑定。
基于 Databricks API 创建 git 凭证,由于除了
git_username
ID 之外没有定义的 <hash>@bots.bitbucket.org
ID,目前尚不清楚存储库访问令牌应如何适合。 (鉴于用户名有详细记录,它适用于个人访问令牌)。
我尝试了 git user.name 的各种变体,Bitbucket 为我提供了作为存储库访问令牌的一部分。
我希望将
git_username
和 personal_access_token
的正确神奇组合传递给 Databricks API 以成功进行身份验证。不幸的是它没有记录。
您似乎有两个问题:
我假设您正在使用Bitbucket Cloud。
Bitbucket 存储库访问令牌 是让 Bitbucket 访问“机器人”帐户(例如 CI/CD)的好方法,或者在您的情况下,访问在另一个系统中运行的自动化工作流程。生成的令牌与存储库而不是与人相关联,因此如果有人离开您的组织,令牌将继续工作。
当Token生成后,Bitbucket提供了多种形式的如何使用它。仔细看看这个:
如何将此令牌与您的 Git 存储库一起使用
要使用此令牌克隆此存储库,请运行:
git clone https://x-token-auth:<long-token-here>@bitbucket.org/company/repository.git
还不完全清楚,但它说用户名是
x-token-auth
,密码是提供的长令牌。 这非常重要!!
在服务主体上设置 git 凭据并不容易。您需要使用
curl
或 Postman 来生成配置。 (为什么他们不把它放在用户界面中,我不知道!)
步骤是:
on-behalf-of
调用生成 服务主体的个人访问令牌(可在Databricks 自动化服务主体 | AWS 上的 Databricks 中找到说明)
CI/CD 的服务主体 | AWS 上的 Databricks:
curl -X POST \
${DATABRICKS_HOST}/api/2.0/git-credentials \
--header 'Authorization: Bearer <service-principal-access-token>' \
--data @set-git-credentials.json \
| jq .
重要的部分在json
配置文件中:
set-git-credentials.json:
{
"personal_access_token": "<Git Provider Access Token>",
"git_username": "x-token-auth",
"git_provider": "bitbucketCloud"
}
注意git_username
如何使用Bitbucket之前提到的
x-token-auth
吗?这是最重要的部分。另外,请确保
git_provider
设置为
bitbucketCloud
。顺便说一句,如果你弄错了,
删除 git 凭证的过程会非常痛苦。您需要获取与 git 凭据关联的ID。它在使用上面的 git-credentials
命令后显示,该命令返回类似:
{
"credential_id": 749722601042,
"git_provider": "bitbucketCloud",
"git_username": "x-token-auth"
}
然后您可以将 credential_id
与删除凭证 | 一起使用REST API 参考 | AWS 上的 Databricks API 调用删除现有凭证,然后尝试再次设置它们。如果您不记得
credential_id
,您可以使用获取 Git 凭证 | REST API 参考 | AWS 上的 Databricks 来检索它。
底线: 确保使用 x-token-auth
作为用户名。