{"id":4999,"date":"2026-05-25T15:53:36","date_gmt":"2026-05-25T15:53:36","guid":{"rendered":"https:\/\/ranaghazzi.com\/?p=4999"},"modified":"2026-05-26T02:17:27","modified_gmt":"2026-05-26T02:17:27","slug":"ci-cd-on-databricks","status":"publish","type":"post","link":"https:\/\/ranaghazzi.com\/?p=4999","title":{"rendered":"CI\/CD on Databricks"},"content":{"rendered":"<p><style>\n    .light-font-container, .light-font-container p, .light-font-container h2, .light-font-container li {<br \/>\n        font-weight: #FFFFFF !important;<br \/>\n    }<br \/>\n<\/style>\n<\/p>\n<div class=\"light-font-container\" style=\"background-color: #FFFFFF ; padding: 40px; border-radius: 15px;\">\n\n\n<h1 class=\"wp-block-heading has-text-align-center\">CI\/CD on Databricks<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Databricks Asset Bundles (DABs)<\/h2>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-1 wp-block-paragraph\">CI\/CD on Databricks centers on automating the testing and deployment of data pipelines, notebooks, and jobs across environments using\u00a0Databricks Asset Bundles (DABs)\u00a0as the primary infrastructure-as-code tool, with everything version-controlled in Git. <\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-2 wp-block-paragraph\">The CI side covers linting, unit testing with pytest or Nutter, and bundle validation on every code push, while the CD side automates promotion from dev to staging to prod using platform tools like GitHub Actions or Azure DevOps.<\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-3 wp-block-paragraph\"> Credentials are managed through service principals and Databricks Secrets \u2014 never hardcoded \u2014 and\u00a0Unity Catalog\u00a0provides clean environment separation at the data layer. <\/p>\n\n\n\n<h2 class=\"wp-block-heading has-contrast-color has-text-color has-link-color wp-elements-4\">Key best practices include:<\/h2>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-5 wp-block-paragraph\"> idempotent jobs, <\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-6 wp-block-paragraph\">separate workspaces per environment, <\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-7 wp-block-paragraph\">all deploys running through the pipeline (never from a local machine), <\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-8 wp-block-paragraph\">And post-deploy observability via job run history, Delta table history, and external monitoring tools. <\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-9 wp-block-paragraph\">The recommended modern stack combines GitHub Actions, DABs, Unity Catalog, and MLflow for end-to-end automated delivery of Databricks workloads.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-contrast-color has-text-color has-link-color wp-elements-10\"><strong>The recommended modern approach (replaces legacy\u00a0databricks-cli\u00a0deploys).<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<ul class=\"wp-block-list has-contrast-color has-text-color has-link-color wp-elements-11\">\n<li>Version-controlled as YAML in your repo<\/li>\n\n\n\n<li>Define everything in\u00a0databricks.yml<\/li>\n\n\n\n<li>Supports\u00a0multi-environment\u00a0targets (dev, staging, prod)<\/li>\n\n\n\n<li>Deploy with:\u00a0databricks bundle deploy &#8211;target prod<\/li>\n\n\n\n<li>Run with:\u00a0databricks bundle run .<\/li>\n\n\n\n<li>Supports: Jobs, DLT pipelines, notebooks, Python wheels, Model Serving endpoints<\/li>\n<\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CI\/CD on Databricks Databricks Asset Bundles (DABs) CI\/CD on Databricks centers on automating the testing and deployment of data pipelines, notebooks, and jobs across environments using\u00a0Databricks Asset Bundles (DABs)\u00a0as the primary infrastructure-as-code tool, with everything version-controlled in Git. The CI side covers linting, unit testing with pytest or Nutter, and bundle validation on every code [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4999","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>CI\/CD on Databricks - Rana Nasri Ghazzi<\/title>\n<meta name=\"description\" content=\"Explore Rana Ghazzi&#039;s data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI &amp; Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ranaghazzi.com\/?p=4999\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CI\/CD on Databricks - Rana Nasri Ghazzi\" \/>\n<meta property=\"og:description\" content=\"Explore Rana Ghazzi&#039;s data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI &amp; Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ranaghazzi.com\/?p=4999\" \/>\n<meta property=\"og:site_name\" content=\"Rana Nasri Ghazzi\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-25T15:53:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-26T02:17:27+00:00\" \/>\n<meta name=\"author\" content=\"Rana Ghazzi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rana Ghazzi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999\"},\"author\":{\"name\":\"Rana Ghazzi\",\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/#\\\/schema\\\/person\\\/d8ee34f53cb0df9faaf816fb5363a4cc\"},\"headline\":\"CI\\\/CD on Databricks\",\"datePublished\":\"2026-05-25T15:53:36+00:00\",\"dateModified\":\"2026-05-26T02:17:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999\"},\"wordCount\":208,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/#\\\/schema\\\/person\\\/d8ee34f53cb0df9faaf816fb5363a4cc\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999\",\"url\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999\",\"name\":\"CI\\\/CD on Databricks - Rana Nasri Ghazzi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/#website\"},\"datePublished\":\"2026-05-25T15:53:36+00:00\",\"dateModified\":\"2026-05-26T02:17:27+00:00\",\"description\":\"Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/?p=4999#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ranaghazzi.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CI\\\/CD on Databricks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/#website\",\"url\":\"https:\\\/\\\/ranaghazzi.com\\\/\",\"name\":\"Rana Nasri Ghazzi\",\"description\":\"Turning Data into Decisions\",\"publisher\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/#\\\/schema\\\/person\\\/d8ee34f53cb0df9faaf816fb5363a4cc\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ranaghazzi.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/#\\\/schema\\\/person\\\/d8ee34f53cb0df9faaf816fb5363a4cc\",\"name\":\"Rana Ghazzi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/logo.png\",\"url\":\"https:\\\/\\\/ranaghazzi.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/ranaghazzi.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/logo.png\",\"width\":1024,\"height\":1024,\"caption\":\"Rana Ghazzi\"},\"logo\":{\"@id\":\"https:\\\/\\\/ranaghazzi.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/logo.png\"},\"url\":\"https:\\\/\\\/ranaghazzi.com\\\/?author=2\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CI\/CD on Databricks - Rana Nasri Ghazzi","description":"Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ranaghazzi.com\/?p=4999","og_locale":"en_US","og_type":"article","og_title":"CI\/CD on Databricks - Rana Nasri Ghazzi","og_description":"Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.","og_url":"https:\/\/ranaghazzi.com\/?p=4999","og_site_name":"Rana Nasri Ghazzi","article_published_time":"2026-05-25T15:53:36+00:00","article_modified_time":"2026-05-26T02:17:27+00:00","author":"Rana Ghazzi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rana Ghazzi","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ranaghazzi.com\/?p=4999#article","isPartOf":{"@id":"https:\/\/ranaghazzi.com\/?p=4999"},"author":{"name":"Rana Ghazzi","@id":"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc"},"headline":"CI\/CD on Databricks","datePublished":"2026-05-25T15:53:36+00:00","dateModified":"2026-05-26T02:17:27+00:00","mainEntityOfPage":{"@id":"https:\/\/ranaghazzi.com\/?p=4999"},"wordCount":208,"commentCount":0,"publisher":{"@id":"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ranaghazzi.com\/?p=4999#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ranaghazzi.com\/?p=4999","url":"https:\/\/ranaghazzi.com\/?p=4999","name":"CI\/CD on Databricks - Rana Nasri Ghazzi","isPartOf":{"@id":"https:\/\/ranaghazzi.com\/#website"},"datePublished":"2026-05-25T15:53:36+00:00","dateModified":"2026-05-26T02:17:27+00:00","description":"Explore Rana Ghazzi's data analytics portfolio \u2014 dashboards, visualizations, and insights built with Tableau, Power BI & Python.","breadcrumb":{"@id":"https:\/\/ranaghazzi.com\/?p=4999#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ranaghazzi.com\/?p=4999"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ranaghazzi.com\/?p=4999#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ranaghazzi.com\/"},{"@type":"ListItem","position":2,"name":"CI\/CD on Databricks"}]},{"@type":"WebSite","@id":"https:\/\/ranaghazzi.com\/#website","url":"https:\/\/ranaghazzi.com\/","name":"Rana Nasri Ghazzi","description":"Turning Data into Decisions","publisher":{"@id":"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ranaghazzi.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/ranaghazzi.com\/#\/schema\/person\/d8ee34f53cb0df9faaf816fb5363a4cc","name":"Rana Ghazzi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png","url":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png","contentUrl":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png","width":1024,"height":1024,"caption":"Rana Ghazzi"},"logo":{"@id":"https:\/\/ranaghazzi.com\/wp-content\/uploads\/2025\/11\/logo.png"},"url":"https:\/\/ranaghazzi.com\/?author=2"}]}},"_links":{"self":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/posts\/4999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4999"}],"version-history":[{"count":17,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/posts\/4999\/revisions"}],"predecessor-version":[{"id":5084,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=\/wp\/v2\/posts\/4999\/revisions\/5084"}],"wp:attachment":[{"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ranaghazzi.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}