{"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-a7939a39a2f0684c8200ee7c100a476d 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-f026078e939bb430efd842ad203ca536 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-f63ca8ec2774a85fec7ec4a3cf859c44 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-0839516a34421fcdbb17d1a555f0c4e3\">Key best practices include:<\/h2>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-fed2bce338c1a9b64395e940518f7af2 wp-block-paragraph\"> idempotent jobs, <\/p>\n\n\n\n<p class=\"has-contrast-color has-text-color has-link-color wp-elements-41caae6740ba97222392036aafb1d67d 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-a541eec95714174a3fd9b58f5cd0f23e 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-f45b6da42f889e4148b877c39df0e393 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-9fe33e5d70a768a1a07a1577439d316a 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-7d06fd5ea794ab7a436103e170514eb5\"><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-6a8b87e3a49402a4a1c627a5d8e8ff9a\">\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 v27.2 - 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}]}}