{"id":33694,"date":"2023-10-18T09:35:31","date_gmt":"2023-10-18T16:35:31","guid":{"rendered":"https:\/\/salesforcedevops.net\/?p=33694"},"modified":"2024-01-21T09:27:14","modified_gmt":"2024-01-21T17:27:14","slug":"how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows","status":"publish","type":"post","link":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/","title":{"rendered":"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows"},"content":{"rendered":"\n<p class=\"has-drop-cap wp-block-paragraph\"><a href=\"https:\/\/origin.salesforcedevops.net\/index.php\/2023\/10\/04\/well-architected-devops-with-muselab-d2x\/\">Last time<\/a>, I introduced MuseLab D2X and why we built it to help Salesforce developers more easily build Well-Architected DevOps that leverage the full power of GitHub and CumulusCI. In this follow-up, I\u2019ll walk through the step-by-step process of kicking off a new project with D2X Launchpad, so you can see how simple \u2014 and powerful \u2014 this new approach can be.<\/p>\n\n\n\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"><h2>Table of contents<\/h2><ul><li><a href=\"#h-let-s-get-started\" data-level=\"2\">Let&#8217;s Get Started!<\/a><\/li><li><a href=\"#h-d2x-amp-cumulusci\" data-level=\"2\">D2X &amp; CumulusCI<\/a><\/li><li><a href=\"#h-universal-and-project-configuration\" data-level=\"2\">Universal and Project Configuration<\/a><\/li><li><a href=\"#h-release-operations-automation-with-cumulusci\" data-level=\"2\">Release Operations Automation with CumulusCI<\/a><\/li><li><a href=\"#h-dependency-management-with-cumulusci\" data-level=\"2\">Dependency Management with CumulusCI<\/a><\/li><li><a href=\"#h-cumulusci-s-custom-task-framework\" data-level=\"2\">CumulusCI\u2019s Custom Task Framework<\/a><\/li><li><a href=\"#h-conclusion\" data-level=\"2\">Conclusion<\/a><\/li><li><a href=\"#h-resources\" data-level=\"2\">Resources<\/a><\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-let-s-get-started\">Let&#8217;s Get Started!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ready to dive in? D2X Launchpad provides a user-friendly web interface to launch new GitHub repositories, fully configured for D2X. Once you&#8217;ve set up your GitHub repository, the D2X Project Tutorial offers a step-by-step guide to finalizing your project&#8217;s setup and getting started with development.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You\u2019ll need to complete some one-time setup in GitHub that works for all your D2X projects:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Collect credentials to Salesforce DevHub<\/li>\n\n\n\n<li>Collect credentials to GitHub<\/li>\n\n\n\n<li>Create GitHub Actions secrets<\/li>\n\n\n\n<li>Create GitHub Codespaces secrets<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Every D2X project you create is then automatically connected to your DevHub and GitHub to run a fully automated software development lifecycle with GitHub as the source of truth. Your team only needs to learn a few commands using the CumulusCI command line interface, cci, to type into the GitHub Codespaces terminal:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create GitHub repository with D2X Launchpad<\/li>\n\n\n\n<li>Fire up your first Codespace and start developing package in a feature branch<\/li>\n\n\n\n<li>Create a dev org<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cci flow run dev_org<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open the org and make changes:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cci org browser<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>List, filter, retrieve using source tracking:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cci task run list_changes\ncci task run list_changes --include CustomField\ncci task run retrieve_changes --include CustomField<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Capture all the data in the org as the project\u2019s initial default sample dataset. This will then load automatically into all new scratch orgs<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cci task run capture_sample_data<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Or, capture all the data in the org as the project\u2019s qa dataset, which are loaded into new qa scratch orgs.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>cci task run capture_sample_data --dataset qa<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Commit and push: Pushes kick off automated Feature Test builds<\/li>\n\n\n\n<li>Create a Pull Request to merge the feature branch to main<\/li>\n\n\n\n<li>Merges kick off beta package creation (if using packaging)<\/li>\n\n\n\n<li>Run the Production Release GitHub Actions workflow to create a production release<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-d2x-amp-cumulusci\">D2X &amp; CumulusCI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Much of D2X\u2019s functionality comes from CumulusCI, an open source Salesforce automation framework built by Salesforce.org over the last decade to handle the unique DevOps requirements of some of the most installed ISV packages on the platform: Salesforce\u2019s Nonprofit Cloud and Education Cloud. I had a front-row seat to the creation of CumulusCI, having founded and led the team that continues to develop CumulusCI today at Salesforce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CumulusCI is a robust, mature automation orchestration framework that replaces shell scripts with a YAML configuration. CumulusCI\u2019s universal configuration provides a best-practices default configuration which projects override and extend to define their product automation recipes. Covering all of CumulusCI\u2019s functionality here is beyond the scope of this article, but there are links in the Resources section to more about CumulusCI.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D2X makes CumulusCI more accessible to the ecosystem by wrapping it in a common Docker-based runtime environment and providing preconfigured project templates and reusable workflows that ensure your project uses the full capabilities of CumulusCI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-universal-and-project-configuration\">Universal and Project Configuration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A project\u2019s automation configuration is core to CumulusCI\u2019s functionality. You use CumulusCI\u2019s Universal Configuration to start the project. You can learn a lot about CumulusCI by reading through the Universal Configuration\u2019s cumulusci.yml. That\u2019s the starting point for all CumulusCI projects. It bakes in proven best practices for a fully source control based lifecycle that provides most of what your project needs out of the box.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But CumulusCI can\u2019t really know the needs of your particular project. It provides a framework for defining the automation specific to your project. Each project has its own cumulusci.yml file that contains its extensions and overrides of the Universal Configuration to create the Project Configuration. The project\u2019s cumulusci.yml is then automatically merged on top of the Universal Configuration. This constructs the Project Configuration that is used by client applications like cci, which is the command line interface for running CumulusCI automation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This approach has many advantages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consistent set of commands that works across repositories so users need to learn a few commands to be productive<\/li>\n\n\n\n<li>Command consistency allows for reusable CI\/CD scripts applied to many repositories with low overhead<\/li>\n\n\n\n<li>Projects can wire in custom automation unique to the project in the cumulusci.yml file<\/li>\n\n\n\n<li>Use of composable objects enables reuse by other projects<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-release-operations-automation-with-cumulusci\">Release Operations Automation with CumulusCI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CumulusCI includes full release operations automation for package based development, eliminating the operational cost of product releases. CumulusCI creates release artifacts in the GitHub repository using commit status (feature test packages) and tags and releases (beta and production releases).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For 2GP release operations specifically, CumulusCI provides a significantly improved developer experience. Gone are the days of manually creating packages, copying package ids, copying package version ids, and manually managing dependencies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D2X Launchpad pre-configures GitHub Actions builds that run the relevant CumulusCI release operation flows as changes are made to the repository.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-dependency-management-with-cumulusci\">Dependency Management with CumulusCI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The release artifacts created by release operations automation can then be used by CumulusCI\u2019s dependency management to create a recursive package dependency manager, allowing a project to define a dependency on another project\u2019s GitHub repository. CumulusCI dynamically inspects dependencies at build time to find their latest release and all of that release\u2019s dependencies recursively. CumulusCI\u2019s environment automation recipes use the dependency manager to automate installing all dependencies into scratch orgs, allowing seamless composable development.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, the following lines in a project\u2019s cumulusci.yml file specify a dependency on the popular open-source Distributed Lookup Rollup Summaries (DLRS), which is itself built with CumulusCI:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>project:\n    dependencies:\n        - github: https:\/\/github.com\/SFDO-Community\/declarative-lookup-rollup-summaries<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">With this simple change, the project is now defined as an extension that depends on DLRS. All scratch orgs built using CumulusCI will automatically have the latest version of DLRS installed. This simple example demonstrates a unique superpower of CumulusCI that is especially useful when approaching the Well-Architected concepts of Composability and Packageability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cumulusci-s-custom-task-framework\">CumulusCI\u2019s Custom Task Framework<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, CumulusCI has a custom task framework for implementing any custom automation your project needs. CumulusCI comes with many tasks to automate common operations, but that doesn\u2019t have to limit you. CumulusCI provides an extensible framework for building Product Delivery Model recipes in source control so you can reliably deliver complete product experiences of all your projects to new or existing orgs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In the dynamic world of Salesforce, staying ahead of the curve is crucial. With the Salesforce Well-Architected Framework as our guide and MuseLab D2X as our tool, achieving a robust and efficient DevOps process has never been easier. Whether you&#8217;re a seasoned Salesforce developer or just starting out, D2X offers the tools, resources, and guidance to ensure your projects are well-architected, adaptable, and ready for the future.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-resources\">Resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/cumulusci.readthedocs.io\">CumulusCI Documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/trailhead.salesforce.com\/content\/learn\/trails\/build-applications-with-cumulusci\">Trailhead: Build Applications with CumulusCI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.salesforce.com\/tools\/salesforcecli\">Salesforce CLI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/launchpad.muselab.com\/\">D2X Launchpad<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/muselab-d2x\/d2x\">D2X GitHub Repository<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/d2x.readthedocs.io\">D2X Documentation<\/a><a href=\"http:\/\/o\">Salesforce Well-Architected Framework<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/muselab.com\">MuseLab<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Last time, I introduced MuseLab D2X and why we built it to help Salesforce developers more easily build Well-Architected DevOps that leverage the full power of GitHub and CumulusCI. In&hellip;<\/p>\n","protected":false},"author":4,"featured_media":33698,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","footnotes":""},"categories":[7],"tags":[1475,1476,1474],"post_series":[],"class_list":["post-33694","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","tag-d2x","tag-howto","tag-muselab","entry","has-media"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.2 (Yoast SEO v22.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows - SalesforceDevops.net<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows - SalesforceDevops.net\" \/>\n<meta property=\"og:description\" content=\"Last time, I introduced MuseLab D2X and why we built it to help Salesforce developers more easily build Well-Architected DevOps that leverage the full power of GitHub and CumulusCI. In&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\" \/>\n<meta property=\"og:site_name\" content=\"SalesforceDevops.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/salesforcedevopsnet\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-18T16:35:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-21T17:27:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jason Lantz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@salesforcedevop\" \/>\n<meta name=\"twitter:site\" content=\"@salesforcedevop\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jason Lantz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\"},\"author\":{\"name\":\"Jason Lantz\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/c57ea8cb59330beee6a0a925942533ae\"},\"headline\":\"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows\",\"datePublished\":\"2023-10-18T16:35:31+00:00\",\"dateModified\":\"2024-01-21T17:27:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\"},\"wordCount\":1193,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\"},\"image\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png\",\"keywords\":[\"D2X\",\"HowTo\",\"MuseLab\"],\"articleSection\":[\"How To\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#respond\"]}],\"copyrightYear\":\"2023\",\"copyrightHolder\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\"},\"accessibilityFeature\":[\"tableOfContents\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\",\"url\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\",\"name\":\"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows - SalesforceDevops.net\",\"isPartOf\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png\",\"datePublished\":\"2023-10-18T16:35:31+00:00\",\"dateModified\":\"2024-01-21T17:27:14+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage\",\"url\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png\",\"contentUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png\",\"width\":1200,\"height\":675,\"caption\":\"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#website\",\"url\":\"https:\/\/cms.salesforcedevops.net\/\",\"name\":\"SalesforceDevops.net\",\"description\":\"Elevating Salesforce Devops with Insights and Innovation\",\"publisher\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cms.salesforcedevops.net\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#organization\",\"name\":\"SalesforceDevops.net\",\"url\":\"https:\/\/cms.salesforcedevops.net\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg\",\"contentUrl\":\"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg\",\"width\":325,\"height\":101,\"caption\":\"SalesforceDevops.net\"},\"image\":{\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/salesforcedevopsnet\",\"https:\/\/twitter.com\/salesforcedevop\",\"https:\/\/www.linkedin.com\/in\/vernonkeenan\",\"https:\/\/www.youtube.com\/channel\/UCOgOn9rD5gyXSOmV7-Q0n7g\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/c57ea8cb59330beee6a0a925942533ae\",\"name\":\"Jason Lantz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/3cf\/3cfd5d9f85ca262662cf1eb626d0b9b4x96.jpg\",\"contentUrl\":\"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/3cf\/3cfd5d9f85ca262662cf1eb626d0b9b4x96.jpg\",\"caption\":\"Jason Lantz\"},\"sameAs\":[\"https:\/\/muselab.com\/\"],\"url\":\"https:\/\/cms.salesforcedevops.net\/index.php\/author\/jasonmuselab-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows - SalesforceDevops.net","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:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/","og_locale":"en_US","og_type":"article","og_title":"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows - SalesforceDevops.net","og_description":"Last time, I introduced MuseLab D2X and why we built it to help Salesforce developers more easily build Well-Architected DevOps that leverage the full power of GitHub and CumulusCI. In&hellip;","og_url":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/","og_site_name":"SalesforceDevops.net","article_publisher":"https:\/\/www.facebook.com\/salesforcedevopsnet","article_published_time":"2023-10-18T16:35:31+00:00","article_modified_time":"2024-01-21T17:27:14+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png","type":"image\/png"}],"author":"Jason Lantz","twitter_card":"summary_large_image","twitter_creator":"@salesforcedevop","twitter_site":"@salesforcedevop","twitter_misc":{"Written by":"Jason Lantz","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#article","isPartOf":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/"},"author":{"name":"Jason Lantz","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/c57ea8cb59330beee6a0a925942533ae"},"headline":"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows","datePublished":"2023-10-18T16:35:31+00:00","dateModified":"2024-01-21T17:27:14+00:00","mainEntityOfPage":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/"},"wordCount":1193,"commentCount":0,"publisher":{"@id":"https:\/\/cms.salesforcedevops.net\/#organization"},"image":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage"},"thumbnailUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png","keywords":["D2X","HowTo","MuseLab"],"articleSection":["How To"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#respond"]}],"copyrightYear":"2023","copyrightHolder":{"@id":"https:\/\/cms.salesforcedevops.net\/#organization"},"accessibilityFeature":["tableOfContents"]},{"@type":"WebPage","@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/","url":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/","name":"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows - SalesforceDevops.net","isPartOf":{"@id":"https:\/\/cms.salesforcedevops.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage"},"image":{"@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage"},"thumbnailUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png","datePublished":"2023-10-18T16:35:31+00:00","dateModified":"2024-01-21T17:27:14+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cms.salesforcedevops.net\/index.php\/2023\/10\/18\/how-to-use-muselab-d2x-to-supercharge-salesforce-devops-workflows\/#primaryimage","url":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png","contentUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png","width":1200,"height":675,"caption":"How to Use MuseLab D2X to Supercharge Salesforce DevOps Workflows"},{"@type":"WebSite","@id":"https:\/\/cms.salesforcedevops.net\/#website","url":"https:\/\/cms.salesforcedevops.net\/","name":"SalesforceDevops.net","description":"Elevating Salesforce Devops with Insights and Innovation","publisher":{"@id":"https:\/\/cms.salesforcedevops.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cms.salesforcedevops.net\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cms.salesforcedevops.net\/#organization","name":"SalesforceDevops.net","url":"https:\/\/cms.salesforcedevops.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/","url":"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg","contentUrl":"https:\/\/origin.salesforcedevops.net\/wp-content\/uploads\/2021\/04\/logo-horiz-325.jpg","width":325,"height":101,"caption":"SalesforceDevops.net"},"image":{"@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/salesforcedevopsnet","https:\/\/twitter.com\/salesforcedevop","https:\/\/www.linkedin.com\/in\/vernonkeenan","https:\/\/www.youtube.com\/channel\/UCOgOn9rD5gyXSOmV7-Q0n7g"]},{"@type":"Person","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/c57ea8cb59330beee6a0a925942533ae","name":"Jason Lantz","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cms.salesforcedevops.net\/#\/schema\/person\/image\/","url":"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/3cf\/3cfd5d9f85ca262662cf1eb626d0b9b4x96.jpg","contentUrl":"https:\/\/cms.salesforcedevops.net\/wp-content\/wphb-cache\/gravatar\/3cf\/3cfd5d9f85ca262662cf1eb626d0b9b4x96.jpg","caption":"Jason Lantz"},"sameAs":["https:\/\/muselab.com\/"],"url":"https:\/\/cms.salesforcedevops.net\/index.php\/author\/jasonmuselab-com\/"}]}},"uagb_featured_image_src":{"full":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",1200,675,false],"thumbnail":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8-150x150.png",150,150,true],"medium":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8-300x169.png",300,169,true],"medium_large":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8-768x432.png",768,432,true],"large":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8-1024x576.png",980,551,true],"1536x1536":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8-1536x864.png",1536,864,true],"2048x2048":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",1200,675,false],"lightbox":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",1200,675,false],"search_results":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8-125x125.png",125,125,true],"blog_entry":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",750,422,false],"blog_post":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",750,422,false],"blog_post_full":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",1200,675,false],"blog_related":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",1200,675,false],"gallery":["https:\/\/cms.salesforcedevops.net\/wp-content\/uploads\/2023\/10\/zoom_background1920x1080-rid_f7a05ab2-8b18-4ee1-8732-10f15fb3a9b8.png",1200,675,false]},"uagb_author_info":{"display_name":"Jason Lantz","author_link":"https:\/\/cms.salesforcedevops.net\/index.php\/author\/jasonmuselab-com\/"},"uagb_comment_info":0,"uagb_excerpt":"Last time, I introduced MuseLab D2X and why we built it to help Salesforce developers more easily build Well-Architected DevOps that leverage the full power of GitHub and CumulusCI. In&hellip;","_links":{"self":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts\/33694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/comments?post=33694"}],"version-history":[{"count":7,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts\/33694\/revisions"}],"predecessor-version":[{"id":34922,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/posts\/33694\/revisions\/34922"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/media\/33698"}],"wp:attachment":[{"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/media?parent=33694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/categories?post=33694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/tags?post=33694"},{"taxonomy":"post_series","embeddable":true,"href":"https:\/\/cms.salesforcedevops.net\/index.php\/wp-json\/wp\/v2\/post_series?post=33694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}