共用方式為


在 Azure Databricks 上使用 Azure DevOps 進行驗證

本頁說明如何配置 Azure DevOps 管道以驗證 Databricks CLI 並向 Azure Databricks 發送 API 請求。

開始之前

在設定 Azure DevOps 驗證前,請先完成以下步驟:

  1. 在 Azure 建立服務主體,並以適當的權限將其加入你的 Azure Databricks 工作空間。 如果沒有這個步驟,即使管線設定正確,認證也會失敗。

    對於 Microsoft Entra ID 的管理服務主體,請在 Azure 建立一個 Microsoft Entra ID 應用程式,然後將其加入你的工作空間。 請參閱 服務主體管理服務主體

  2. 在你的管線中新增一個步驟,在代理上安裝 Databricks CLI:

    - script: |
        curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
      displayName: 'Install Databricks CLI'
    

    小提示

    若要將 CLI 安裝釘選到特定版本而非使用最新版本,請以版本標籤取代 main (例如, v0.224.0)。

選擇一種認證方法

Azure DevOps 透過 服務連線來管理認證。 在 Azure DevOps 入口網站的專案設定>中存取它們:服務連線

在 Azure DevOps 中的 [項目設定] 底下選取 [服務連線]

要驗證 Databricks CLI,請使用以下方法之一的 Azure Resource Manager 服務連線類型:

方法 Description 適用對象
工作負載身份聯盟 (推薦) 使用 OpenID Connect(OIDC)來取得代幣。 需要用你的服務主體帳戶設定 Azure DevOps 產生的發行者和主體識別碼。 安全且無秘密的認證
服務主體與客戶端秘密 使用用戶端 ID 和秘密來產生短壽命的 OAuth 標記。 需要為服務主體產生一個金鑰。 需要跨任務共享憑證的情境
受控識別 使用分配給運行管線的虛擬機或容器的身份。 僅適用於自架跑者。 請參閱 Azure 文件 自架運行者,並有指定身份

備註

盡可能使用工作負載身份聯盟。 它不依賴秘密,因此比其他方法更安全。 它會自動執行 AzureCLI@2 任務,無需手動設定。 參見 建立使用工作負載身份聯邦的服務連接

配置 Azure CLI 認證

Databricks CLI 預設使用 Azure CLI 進行認證。 所有 Databricks 的 CLI 指令都必須在任務 AzureCLI@2 中執行,這表示每個任務獨立認證。 這會帶來一些延遲,但所需的設定非常簡單。

- task: AzureCLI@2
  inputs:
    azureSubscription: <your-service-connection-name>
    useGlobalConfig: true
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
      databricks bundle deploy

更新這些數值:

  • azureSubscription: 你的 Azure Resource Manager 服務連線名稱。
  • useGlobalConfig:必填。 確保由 databricks bundle 指令產生的子程序能存取已認證的會話。
  • DATABRICKS_HOST:如果你的組合組或前一個步驟還沒定義,請設定這個。

設定用戶端秘密認證

當你需要在多個任務間共享憑證,或 Azure CLI 認證增加延遲時,可以使用用戶端秘密。

此方法在一個任務中從服務連線取得認證細節,然後匯出為後續任務的作業範圍環境變數。

- task: AzureCLI@2
  inputs:
    azureSubscription: <your-service-connection-name>
    addSpnToEnvironment: true
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      echo "##vso[task.setvariable variable=ARM_CLIENT_ID]${servicePrincipalId}"
      echo "##vso[task.setvariable variable=ARM_CLIENT_SECRET]${servicePrincipalKey}"
      echo "##vso[task.setvariable variable=ARM_TENANT_ID]${tenantId}"

- script: |
    export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
    databricks bundle deploy

注意:

  • addSpnToEnvironment 鍵使 servicePrincipalIdservicePrincipalKeytenantId 能夠在內嵌腳本中被使用。
  • 指令將 ##vso 任務範圍變數升格為工作範圍變數,Databricks CLI 會自動辨識。
  • 在預設狀態下,ARM_CLIENT_SECRET 可被所有後續步驟存取。 若要限制存取權限,請在變數定義中加入 issecret=true ,然後明確傳給每個需要的步驟。 無論如何設定,秘密都會被日誌遮蔽。

完整範例請參見 授權 Microsoft Entra 服務主體存取 Git 資料夾

設定管理身份驗證

管理身份驗證依賴虛擬機或容器設定,而非管線任務。 這種方法不需要完成這個 AzureCLI@2 任務。

- script: |
    export DATABRICKS_AZURE_RESOURCE_ID=/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Databricks/workspaces/<workspace-name>
    export ARM_CLIENT_ID=<managed-identity-client-id>
    export ARM_USE_MSI=true
    export DATABRICKS_HOST=https://adb-<workspace-id>.<region>.azuredatabricks.net
    databricks current-user me

更新這些數值:

  • DATABRICKS_AZURE_RESOURCE_ID: 在 Azure 入口網站的 Workspace 屬性 中找到這個值。
  • ARM_CLIENT_ID:管理身份的用戶端 ID。
  • DATABRICKS_HOST:選擇性。 若未設定,則該值從DATABRICKS_AZURE_RESOURCE_ID推斷出。

管理身份必須在 Azure Databricks 工作空間中扮演 貢獻者 角色。

另請參閱