Dela paket och paketfiler

Organisationer underhåller ofta många paket, och i dessa mer avancerade CI/CD-scenarier delar dessa paket gemensam konfiguration och filer. Paket kan till exempel dela bibliotek som lagras på en delad plats, eller så kan beräkningsinställningar och variabler definieras i en konfigurationsfil på en delad plats.

Den här artikeln innehåller information om hur du konfigurerar två paket för att använda konfiguration och filer i en delad mapp. Fullständiga exempel på delat paket finns på GitHub-lagringsplatsen bundle-examples.

Mer metodtips för CI/CD och utvecklare finns i CI/CD-arbetsflöden på Databricks och Metodtips för utvecklare på Databricks.

Lagringsplatsstruktur

En vanlig metod och Databricks rekommendation är att lagra källan för många paket på en lagringsplats med en delad mapp.

Ett exempel på en lagringsplatsstruktur med fler än ett paket kan vara:

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

Konfiguration för fildelning

Om du vill inkludera kodfiler utanför ett paket anger du dem i paths nyckeln för synkroniseringsmappningen.

Till exempel med en shared mapp på en lagringsplats (på samma nivå som paketmappar) som innehåller:

  • en shared_library.py kodfil med innehållet:

    def multiply(a: int, b: int) -> int:
      return a * b
    
  • en variables.yml med innehållet:

    variables:
      cluster_id:
        default: 1234-567890-abcde123
    

Sedan skulle en paketkonfiguration som använder den delade kodfilen och paketvariabeln som definierats i den delade konfigurationen vara:

# 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)

Paketverifiering

Det är viktigt att alltid verifiera paketkonfigurationen, särskilt om paketen delar filer och konfiguration. Kommandot databricks bundle validate ser till att variabler, filer och sökvägar som anges i ditt paket finns och ärvs och konfigureras korrekt och matar ut information om problem så att du kan korrigera dem innan du distribuerar dem. Se verifiera databricks-paket.

Kör följande kommando för varje paket innan du distribuerar:

databricks bundle validate

Behörigheter för delade paket

I en organisation utvecklas, distribueras och körs paket ofta av olika personer med olika ansvarsområden och behörighetsnivåer. Alla användare kan behöva kunna visa paketen, vissa måste kunna distribuera paketändringar och köra resurser på målutvecklingsarbetsytan, några få måste kunna distribuera paketändringar och köra resurser i produktion och automatiserade arbetsflöden som använder tjänstens huvudnamn måste kunna köra resurser i ett paket. För att säkerställa att dina delade paket kan hanteras effektivt av alla användare i din organisation anger du behörigheter på toppnivå samt produktionsmålbehörigheter. Information om behörigheter på den översta nivån, som tillämpar behörigheter för alla resurser i ett paket, finns i behörigheter.

Tips/Råd

Deklarativa automationspaket i arbetsytan möjliggör enkelt samarbete med paket. Se Samarbeta om paket på arbetsytan.

Till exempel databricks.yml kan för ett delat paket vara:

# 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