共用方式為


使用 Git 和 Databricks Git 資料夾的 CI/CD 技術 (Repos)

瞭解在 CI/CD 工作流程中使用 Databricks Git 資料夾的技術。 藉由在工作區中設定 Databricks Git 資料夾,您可以使用 Git 存放庫中項目檔的原始檔控制,並將整合到資料工程管線中。

下圖顯示技術和工作流程的概觀。

Git 資料夾的 CI/CD 技術概觀。

如需使用 Azure Databricks 的 CI/CD 概觀,請參閱 什麼是 Azure Databricks 上的 CI/CD?

開發流程

Databricks Git 資料夾具有用戶層級的資料夾。 當使用者第一次複製遠端存放庫時,系統會自動建立用戶層級資料夾。 您可以將使用者資料夾中的 Databricks Git 資料夾視為每個使用者的「本機結帳」,以及使用者對其程式碼進行變更的位置。

在 Databricks Git 資料夾中的使用者資料夾中,複製遠端存放庫。 最佳做法是 建立新功能分支 ,或為您的工作選取先前建立的分支,而不是直接認可和推送主要分支的變更。 您可以在該分支中進行變更、認可和推送變更。 當您準備好合併程式代碼時,您可以在 Git 資料夾 UI 中執行此動作。

需求

此工作流程需要您已 設定 Git 整合

注意

Databricks 建議每個開發人員在自己的功能分支上運作。 如需如何解決合併衝突的資訊,請參閱 解決合併衝突

在 Git 資料夾中共同作業

下列工作流程會使用以 feature-b main分支為基礎的分支。

  1. 將現有的 Git 存放庫複製到 Databricks 工作區
  2. 使用 Git 資料夾 UI 從 主要分支建立功能分支 。 此範例會使用單一功能分支 feature-b 來簡化。 您可以建立和使用多個功能分支來執行您的工作。
  3. 對存放庫中的 Azure Databricks 筆記本和其他檔案進行修改。
  4. 認可變更並將其推送至您的 Git 提供者
  5. 參與者現在可以將 Git 存放庫複製到自己的用戶資料夾。
    1. 在新的分支上,同事會變更 Git 資料夾中的筆記本和其他檔案。
    2. 參與者 認可並將其變更推送至 Git 提供者
  6. 若要合併來自其他分支的變更,或重新建置 Databricks 中的 feature-b 分支,請在 Git 資料夾 UI 中使用下列其中一個工作流程:
  7. 當您準備好將工作合併至遠端 Git 存放庫和main分支時,請使用 Git 資料夾 UI 來合併來自 feature-b 的變更。 如果您想要的話,您可以改為將變更直接合併至 Git 存放庫,以備份 Git 資料夾。

生產作業工作流程

Databricks Git 資料夾提供兩個選項來執行生產作業:

  • 選項 1:在作業定義中提供遠端 Git 參考。 例如,在 Git 存放庫的分支中 main 執行特定筆記本。
  • 選項 2:設定生產 Git 存放庫,並呼叫 Repos API 以程式設計方式更新。 針對複製此遠端存放庫的 Databricks Git 資料夾執行作業。 Repos API 呼叫應該是作業中的第一個工作。

選項 1:使用遠端存放庫中的筆記本執行作業

使用位於遠端 Git 存放庫中的筆記本執行 Azure Databricks 作業,以簡化作業定義程式,並保留單一事實來源。 此 Git 參考可以是 Git 認可、標記或分支,並由您在作業定義中提供。

這有助於防止非預期的生產作業變更,例如當使用者在生產存放庫或切換分支中進行本機編輯時。 它也會自動執行CD步驟,因為您不需要在 Databricks 中建立個別的生產 Git 資料夾、管理其許可權,並讓它保持更新。

請參閱 在 Azure Databricks 作業中使用版本控制的原始程式碼。

選項 2:設定生產 Git 資料夾和 Git 自動化

在此選項中,您會設定生產 Git 資料夾和自動化,以在合併時更新 Git 資料夾。

步驟 1:設定最上層資料夾

系統管理員會建立非使用者最上層資料夾。 這些最上層資料夾最常見的使用案例是建立開發、預備和生產資料夾,其中包含適用於開發、預備和生產之適當版本或分支的 Databricks Git 資料夾。 例如,如果您的公司使用 main 分支進行生產,則“production” Git 資料夾必須 main 取出分支。

這些最上層資料夾的許可權通常是工作區內所有非系統管理員使用者的唯讀許可權。 針對這類最上層資料夾,我們建議您只提供具有 CAN EDIT 和 CAN MANAGE 許可權的服務主體,以避免工作區使用者意外編輯您的生產程序代碼。

最上層 Git 資料夾。

步驟 2:使用 Git 資料夾 API 設定 Databricks Git 資料夾的自動更新

若要在 Databricks 中保留最新版本的 Git 資料夾,您可以設定 Git 自動化來呼叫 Repos API。 在您的 Git 提供者中,設定自動化,在將 PR 成功合併到主要分支之後,請在適當的 Git 資料夾中呼叫 Repos API 端點,將它更新為最新版本。

例如,在 GitHub 上,您可以使用 GitHub Actions 來達成此目的。 如需詳細資訊,請參閱 Repos API

若要從 Databricks 筆記本數據格內呼叫任何 Databricks REST API,請先使用 安裝 Databricks SDK 與 %pip install databricks-sdk --upgrade (如需最新的 Databricks REST API),然後從 匯入 ApiClientdatabricks.sdk.core

注意

如果 %pip install databricks-sdk --upgrade 傳回「找不到套件」的錯誤,則 databricks-sdk 尚未安裝套件。 在沒有旗標的情況下 --upgrade 重新執行命令: %pip install databricks-sdk

您也可以從筆記本執行 Databricks SDK API,以擷取工作區的服務主體。 以下是使用 Python 和 Databricks SDK for Python 的範例。

您也可以使用 、Postman 或 Terraform 等 curl工具。 您無法使用 Azure Databricks 使用者介面。

若要深入瞭解 Azure Databricks 上的服務主體,請參閱 管理服務主體。 如需服務主體和 CI/CD 的相關信息,請參閱 CI/CD 的服務主體。 如需從筆記本使用 Databricks SDK 的詳細資訊,請參閱 從 Databricks 筆記本中使用適用於 Python 的 Databricks SDK。

搭配 Databricks Git 資料夾使用服務主體

若要使用服務主體執行上述工作流程:

  1. 使用 Azure Databricks 建立服務主體。
  2. 新增 Git 認證:為您的服務主體使用 Git 提供者 PAT。

若要設定服務主體,然後新增 Git 提供者認證:

  1. 建立服務主體。 請參閱 使用服務主體執行作業。
  2. 建立服務主體的 Microsoft Entra 識別碼令牌。
  3. 建立服務主體之後,您可以使用服務主體 API 將它新增至 Azure Databricks 工作區
  4. 使用 Microsoft Entra ID 令牌和 Git 認證 API,將您的 Git 提供者認證新增至工作區。

Terraform 整合

您也可以使用 Terraformdatabricks_repo,在完全自動化的設定中管理 Databricks Git 資料夾:

resource "databricks_repo" "this" {
  url = "https://github.com/user/demo.git"
}

若要使用 Terraform 將 Git 認證新增至服務主體,請新增下列設定:

  provider "databricks" {
    # Configuration options
  }

  provider "databricks" {
    alias = "sp"
    host = "https://....cloud.databricks.com"
    token = databricks_obo_token.this.token_value
  }

  resource "databricks_service_principal" "sp" {
    display_name = "service_principal_name_here"
  }

  resource "databricks_obo_token" "this" {
    application_id   = databricks_service_principal.sp.application_id
    comment          = "PAT on behalf of ${databricks_service_principal.sp.display_name}"
    lifetime_seconds = 3600
  }

  resource "databricks_git_credential" "sp" {
    provider = databricks.sp
    depends_on = [databricks_obo_token.this]
    git_username          = "myuser"
    git_provider          = "azureDevOpsServices"
    personal_access_token = "sometoken"
  }

使用 Databricks Git 資料夾設定自動化 CI/CD 管線

以下是一個簡單的自動化,可以當做 GitHub Action 來執行。

需求

  1. 您已在 Databricks 工作區中建立 Git 資料夾,以追蹤要合併的基底分支。
  2. 您有一個 Python 套件,其會建立要放置於 DBFS 位置的成品。 您的程式代碼必須:
    • 更新與您慣用分支相關聯的存放庫(例如 development),以包含最新版的筆記本。
    • 建置任何成品,並將其複製到連結庫路徑。
    • 取代最後一個組建成品版本,以避免必須手動更新作業中的成品版本。

步驟

注意

步驟 1 必須由 Git 存放庫的系統管理員執行。

  1. 設定秘密,讓您的程式代碼可以存取 Databricks 工作區。 將下列秘密新增至 Github 存放庫:

  2. 流覽至 Git 存放庫的 [動作] 索引標籤,然後按兩下 [ 新增工作流程] 按鈕。 在頁面頂端,選取 [自行 設定工作流程],並貼上此腳本:

    GitHub Actions UI 中的「自行設定工作流程」連結

    # This is a basic automation workflow to help you get started with GitHub Actions.
    
    name: CI
    
      # Controls when the workflow will run
      on:
        # Triggers the workflow on push for main and dev branch
        push:
          branches:
            # Set your base branch name here
            - your-base-branch-name
    
      # A workflow run is made up of one or more jobs that can run sequentially or in parallel
      jobs:
        # This workflow contains a single job called "deploy"
        deploy:
          # The type of runner that the job will run on
          runs-on: ubuntu-latest
          env:
            DBFS_LIB_PATH: dbfs:/path/to/libraries/
            REPO_PATH: /Repos/path/here
            LATEST_WHEEL_NAME: latest_wheel_name.whl
    
          # Steps represent a sequence of tasks that will be executed as part of the job
          steps:
          # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
          - uses: actions/checkout@v2
    
          - name: Setup Python
            uses: actions/setup-python@v2
            with:
            # Version range or exact version of a Python version to use, using SemVer's version range syntax.
              python-version: 3.8
    
          - name: Install mods
            run: |
              pip install databricks-cli
              pip install pytest setuptools wheel
    
          - name: Configure CLI
            run: |
              echo "${{ secrets.DEPLOYMENT_TARGET_URL }} ${{ secrets.DEPLOYMENT_TARGET_TOKEN }}" | databricks configure --token
    
          - name: Extract branch name
            shell: bash
            run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
            id: extract_branch
    
          - name: Update Databricks Git folder
            run: |
              databricks repos update --path ${{env.REPO_PATH}} --branch "${{ steps.extract_branch.outputs.branch }}"
    
          - name: Build Wheel and send to Databricks workspace DBFS location
            run: |
              cd $GITHUB_WORKSPACE
              python setup.py bdist_wheel
              dbfs cp --overwrite ./dist/* ${{env.DBFS_LIB_PATH}}
              # there is only one wheel file; this line copies it with the original version number in file name and overwrites if that version of wheel exists; it does not affect the other files in the path
              dbfs cp --overwrite ./dist/* ${{env.DBFS_LIB_PATH}}${{env.LATEST_WHEEL_NAME}} # this line copies the wheel file and overwrites the latest version with it
    
  3. 使用您自己的環境變數值更新下列環境變數值:

    • DBFS_LIB_PATH:您將在此自動化中使用的 DBFS 連結庫路徑(輪子),其開頭為 dbfs:。 例如,dbfs:/mnt/myproject/libraries
    • REPO_PATH:D atabricks 工作區中要更新筆記本的 Git 資料夾路徑。 例如: /Repos/Develop
    • LATEST_WHEEL_NAME:上次編譯 Python 轉輪檔案的名稱 (.whl)。 這可用來避免在 Databricks 作業中手動更新轉輪版本。 例如: your_wheel-latest-py3-none-any.whl
  4. 選取 [ 認可變更... ],將腳本認可為 GitHub Actions 工作流程。 合併此工作流程的提取要求之後,請移至 Git 存放庫的 [動作] 索引標籤,並確認動作是否成功。