組織通常會維護許多套件組合,在這些更進階的 CI/CD 案例中,這些套件組合會共用一般組態和檔案。 例如,套件組合可以共用儲存在共用位置的連結庫,或者計算設定和變數可以在共用位置的組態檔中定義。
本文提供如何設定兩個套件組合以在共享資料夾中使用組態和檔案的相關信息。 完整的共用套件組合範例位於 套件組合範例 GitHub 存放庫中。
欲了解更多 CI/CD 及開發者最佳實務,請參閱 Databricks 上的 CI/CD 工作流程 及 Databricks 上的開發者最佳實務。
存放庫結構
一個常見的做法以及 Databricks 的建議是將多個套件的原始碼存放在同一個儲存庫中,並共用一個資料夾。
具有多個套件組合的範例存放庫結構可能是:
databricks-bundle-repo/
├── shared
│ ├── variables.yml # has variable definitions like cluster_id
│ └── shared_library.py # has shared code used in multiple bundles
├── job_bundle
│ ├── databricks.yml # uses ${var.cluster_id} defined in variables.yml
│ ├── resources/
│ │ └── job_bundle.job.yml
│ ├── src/
│ │ ├── notebook.ipynb
│ │ └── my_python.py # uses ../shared/shared_library.py
│ └── README.md
├── pipeline_bundle
│ ├── databricks.yml
│ ├── resources/
│ │ ├── pipeline_bundle.job.yml # uses ${var.cluster_id} defined in variables.yml
│ │ └── pipeline_bundle.pipeline.yml
│ ├── src/
│ │ └── my_pipeline.ipynb
│ └── README.md
檔案共用的組態
若要在套件組合之外包含程式碼檔案,請在paths索引鍵中指定它們。
例如,假設有一個儲存庫中的shared資料夾(與套件資料夾位於相同層級),其中包含:
shared_library.py包含內容的程式代碼檔案:def multiply(a: int, b: int) -> int: return a * bvariables.yml包含內容:variables: cluster_id: default: 1234-567890-abcde123
然後,使用共用程式碼文件和在共用配置中定義的套件變數的套件配置將會是:
# databricks.yml
bundle:
name: job_bundle
sync:
paths:
- ../shared
- ./src
include:
- resources/*.yml
- ../shared/*.yml
targets:
dev:
mode: development
default: true
workspace:
host: https://my-workspace.cloud.databricks.com
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE
# job_bundle.yml
resources:
jobs:
my_python_job:
name: my_python_job
tasks:
- task_key: python_task
spark_python_task:
python_file: src/my_python.py # uses ../shared/shared_library.py
my_notebook_job:
name: my_notebook_job
tasks:
- task_key: notebook_task
existing_cluster_id: ${var.cluster_id} # defined in ../shared/variables.yml
notebook_task:
notebook_path: src/notebook.ipynb
# my_python.py
import os
import sys
# Traverse to the sync root path.
# Note: this requires :re[DBR] >= 14 or serverless.
shared_path = os.getcwd() + "/../../shared"
# Add the shared directory to the Python path.
sys.path.append(shared_path)
# Import a function from shared_library.py
from shared_library import multiply
# Use the function.
result = multiply(2, 3)
print(result)
組合包驗證
請務必一律驗證您的套件組合組態,特別是當您的套件組合共用檔案和組態時。
databricks bundle validate命令可確保套件組合中指定的變數、檔案和路徑存在,且已正確繼承和設定,並輸出問題的相關信息,以便在部署之前加以更正。 請參閱 databricks 套件組合驗證。
在部署之前,請先針對每個套件組合執行下列命令:
databricks bundle validate
共享套件的許可權
在組織內,套件組合通常會由具有不同責任和許可權等級的不同個人開發、部署及執行。 所有使用者可能需要能夠檢視套件組合、有些用戶必須能夠部署套件組合變更,並在目標開發工作區中執行資源、少數使用者必須能夠在生產環境中部署套件組合變更和執行資源,以及使用服務主體的自動化工作流程必須能夠在套件組合中執行資源。 若要確保您的共用套件組合可以有效地由組織中的所有使用者管理,請設定最上層許可權以及生產目標許可權。 如需最上層許可權的相關信息,其會將許可權套用至套件組合中的所有資源,請參閱 許可權。
小提示
工作空間中的宣告式自動化套件讓套件的協作變得輕鬆。 請參閱 在工作區中的套件組合上共同作業。
例如,databricks.yml 可能是共用套件組合:
# databricks.yml
bundle:
name: shared_bundle
include:
- resources/*.yml
permissions:
- level: CAN_VIEW
group_name: all_users
- level: CAN_MANAGE
group_name: data_engineering_users
- level: CAN_RUN
service_principal_name: 123456-abcdef
targets:
dev:
mode: development
default: true
workspace:
host: https://my-workspace.cloud.databricks.com
prod:
mode: production
workspace:
host: https://my-workspace.cloud.databricks.com
root_path: /Workspace/Users/someone@example.com/.bundle/${bundle.name}/${bundle.target}
permissions:
- user_name: someone@example.com
level: CAN_MANAGE