Infrastructure-as-code for the lakehouse: describe jobs, pipelines, and other resources in YAML and ship them across dev/staging/prod with one CLI.
Databricks Asset Bundles (DABs) are a Databricks CLI feature that packages your code plus a declarative YAML description of resources into a version-controlled "bundle" you validate, deploy, and run across environments.
DABs are the recommended approach to CI/CD on Databricks. Instead of clicking jobs and pipelines into existence per workspace, you define them once as source files and promote the same definition from dev to prod — bringing source control, code review, testing, and automated deployment to data and AI projects.
The root config. Top-level mappings: bundle, include, variables, resources, targets, workspace, sync, artifacts.
Define Lakeflow Jobs, Lakeflow Spark Declarative Pipelines, dashboards, model serving endpoints, and MLflow experiments/models — typically split across resources/*.yml.
Named deployment targets (dev, staging, prod) override workspace, variables, and resources. Exactly one is default: true; modes are development or production.
Custom vars via ${var.x} (set by target, --var, or BUNDLE_VAR_*); built-ins like ${bundle.target} and lookups that resolve an object ID by name.
bundle init → validate → deploy -t <target> → run. Validate checks syntax; deploy materializes resources; run executes a job or pipeline.
Wire the same commands into GitHub Actions, Azure DevOps, or Jenkins; authenticate as a service principal or via OAuth token federation (no stored secrets).
resources/*.yml, variables, and per-environment targets, all in version control.databricks.ymlbundle:
name: hello_bundle
resources:
jobs:
nightly_etl:
name: "[${bundle.target}] nightly_etl" # target name flows into the job name
tasks:
- task_key: main
notebook_task:
notebook_path: ./src/etl.py
targets:
dev:
default: true
mode: development # prefixes "[dev you]", pauses schedules
prod:
mode: production
[dev <user>], pauses schedules/triggers, and tags resources dev — convenient, but it still writes to the target workspace.run_as and permissions.resources/*.yml use ../src/...; from databricks.yml use ./src/... — a frequent foot-gun.databricks.yml describes your jobs and pipelines, and the CLI promotes the same definition from dev to prod."validate → deploy -t <target> → run; targets carry mode and variable overrides, so dev and prod share code but differ in config."Verified against docs.databricks.com · June 2026