我正在遵循此链接中所述的软件最佳实践指南。
我目前陷入了第 6 步,我尝试使用 github 操作工作流程来触发 databricks 上的单元测试。该文档讨论了使用访问令牌,但也建议改用 Azure AD/Entra ID。
我使用访问令牌成功运行了 github 工作流程,并尝试将其更新为使用 Azure AD。我按照此处给出的步骤进行操作。
首先,我创建了一个带有秘密的应用程序注册,并为其提供了对我的工作区的访问权限。然后,我在工作区中添加了 SPN,并为其授予了特定 Databricks 作业的“可以管理运行”权限。 github操作工作流程如下。
name: Run pre-merge Databricks tests
on:
pull_request:
workflow_dispatch:
env:
# Replace this value with your workspace instance name.
DATABRICKS_HOST: https://adb-xxxxxxxxxxxxxxxxxxx.azuredatabricks.net
jobs:
unit-test-notebook:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Generate AAD Token
run: |
echo "DATABRICKS_TOKEN1=$(curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
https://login.microsoftonline.com/${{ secrets.AZURE_SP_TENANT_ID }}/oauth2/v2.0/token \
-d 'client_id=${{ secrets.AZURE_SP_APPLICATION_ID }}' \
-d 'grant_type=client_credentials' \
-d 'scope=2ff814a6-3304-4ab8-85cb-cd0e6f879c1d%2F.default' \
-d 'client_secret=${{ secrets.AZURE_SP_CLIENT_SECRET }}' | jq -r '.access_token')" >> $GITHUB_ENV
- name: Checkout repo
uses: actions/checkout@v2
- name: Run test notebook
uses: databricks/run-notebook@main
with:
databricks-token: $DATABRICKS_TOKEN1
local-notebook-path: notebooks/run_unit_tests.py
existing-cluster-id: 1005-025142-oylnzzyy
git-commit: "${{ github.event.pull_request.head.sha }}"
# Grant all users view permission on the notebook's results, so that they can
# see the result of the notebook, if they have related access permissions.
access-control-list-json: >
[
{
"group_name": "users",
"permission_level": "CAN_VIEW"
}
]
run-name: "EDA transforms helper module unit tests"
当我运行此命令时,github 操作失败并出现以下错误。
Error: {"error_code":"PERMISSION_DENIED","message":"*** does not have View permissions on 83958068369529. Please contact the owner or an administrator for access."}
我无法找到有关此错误的任何信息,也无法判断 83958068369529 与什么相关。
为了进一步挖掘,在使用 AD 凭据从 Azure AD 获取不记名令牌后,我尝试通过 Postman 触发正在运行的 Databricks 作业 API,并且效果也很好。这告诉我 SPN 上的权限是正确的,并且 Databricks github 操作本身可能存在一些问题。
如果我查看此链接,它表示该功能处于公共预览状态。我想联系社区,检查是否有其他人遇到过类似的问题,或者这是否是此功能的测试版的记录问题。
您可以尝试根据您的要求将 Databricks 中的服务主体(您在 Entra 中创建)添加到用户组管理员或用户吗?
服务主体需要分配到一个组才能拥有工作区的权限