{"id":4498,"date":"2017-06-30T22:27:03","date_gmt":"2017-06-30T22:27:03","guid":{"rendered":"https:\/\/redmonk.com\/jgovernor\/?p=4498"},"modified":"2017-06-30T23:08:27","modified_gmt":"2017-06-30T23:08:27","slug":"more-from-trailheadx","status":"publish","type":"post","link":"https:\/\/redmonk.com\/jgovernor\/more-from-trailheadx\/","title":{"rendered":"More from TrailheaDX 2017"},"content":{"rendered":"<p><a href=\"http:\/\/jgovernor-media.redmonk.com\/jgovernor\/files\/2017\/06\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"image\" src=\"http:\/\/jgovernor-media.redmonk.com\/jgovernor\/files\/2017\/06\/image_thumb-1.png\" alt=\"image\" width=\"673\" height=\"247\" border=\"0\" \/><\/a><\/p>\n<p>The technical news from Trailhead DX fell into three categories \u2013 Continuous Integration\/Continuous Deployment (CI\/CD), AI\/Ml and Event-driven computing. In this post, I will take a quick look at the CI\/CD story story.<\/p>\n<p>Salesforce DX is now in open beta. It\u2019s a major upgrade to the way Salesforce code can be developed. The approach borrows heavily from <a href=\"https:\/\/www.heroku.com\/dx\">Heroku DX<\/a>, bringing pipelines for Continuous Integration\/Continuous Deployment to Apex and Lightning. Salesforce DX will be used by the ISVs rather than enterprises first. Software companies already generally practice agile development, with automated testing, but Salesforce hasn\u2019t made it easy to use new approaches with APEX and Lightning code.<\/p>\n<p>Salesforce DX introduces a new Command Line Interface (CLI), with the ability to pull down Org (the atomic unit of a Force app is the Org structure) metadata for local development, and a new packaging mechanism. One claimed side effect of moving beyond the \u201cHappy Soup\u201d of objects and calls in traditional legacy Salesforce code, to a more modular approach with automated testing, is that it will be easier for Salesforce and partners to embrace open source.<\/p>\n<p>The Salesforce DX Command Line Interface (CLI) is based on the Heroku CLI. Embracing the Heroku way is really important. Heroku is all about slick developer experience, in many ways it exemplifies modern software development. <a href=\"https:\/\/12factor.net\/\">12 Factor<\/a> development was codified by Adam Wiggins, one of Heroku\u2019s founders. The only real question is &#8211; what took Salesforce so long to adopt more Heroku developer experience design thinking?<\/p>\n<p>Atlassian and Github are both now creating courses on Trailhead. GitHub is of course on a mission to teach people about distributed version control systems and how to use Git and GitHub to manage source code and work more effectively in teams. Lack of knowledge is GitHub\u2019s biggest competitor. The Atlassian work meanwhile is interesting from an \u201centerprise software\u201d perspective. If Salesforce is serious about fundamentally changing how organisations build Apex and Lightning apps, it\u2019s going to need partners that specialize in that agile, CI\/CD and DevOps. So far the Atlassian relationship only goes so far as writing Trailhead modules. While Salesforce and Atlassian didn\u2019t announce any product integration, that will surely follow \u2013 for example managing issues and projects (JIRA), CI testing (Bamboo) and source code (Bitbucket). I would have expected to see more product integration out of the gate \u2013 having written recently about <a href=\"http:\/\/redmonk.com\/jgovernor\/2017\/06\/14\/the-race-to-own-the-pipeline-atlassian-aint-playin-introducing-devops-marketplace\/\">the race to pipeline dominance<\/a>, for example. But getting the tool out there is of course the first step.<\/p>\n<p>Unlike Atlassian, during the keynote Travis CI featured \u2013as an automation tool. Wade Wegner, VP Product Management walked me through his use of Travis CI for pipelines.\u00a0Salesforce DX also has a test runner for plugging in third party tools, such as <a href=\"https:\/\/provartesting.com\/\">Provar<\/a> \u2013APEX testing. But basically, all of the things could be added to test jobs. See the <a href=\"https:\/\/github.com\/forcedotcom\/LightningTestingService\">Lightning Test Service<\/a>.<\/p>\n<p>Demos with third party tooling included using Travis CI for headless OAuth, to manage keys in the development environment, running scripts and injecting variables. OAuth is a pain to manage, so this was a neat approach. Travis CI can then pick up test runs from tools for Apex or Lightning. Salesforce DX supports <a href=\"http:\/\/www.seleniumhq.org\/\">Selenium<\/a>, and <a href=\"https:\/\/jasmine.github.io\/2.0\/introduction.html\">Jasmine<\/a> or <a href=\"https:\/\/mochajs.org\/\">Mocha<\/a> for unit tests.<\/p>\n<p>Salesforce DX is immature, but potentially important. Apex and Lightning both need to be part of the new world of pipelines to have ongoing industry relevance.<\/p>\n<p>&nbsp;<\/p>\n<p>Salesforce is a client, paid T&amp;E. Travis CI is also a client.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The technical news from Trailhead DX fell into three categories \u2013 Continuous Integration\/Continuous Deployment (CI\/CD), AI\/Ml and Event-driven computing. In this post, I will take a quick look at the CI\/CD story story. Salesforce DX is now in open beta. It\u2019s a major upgrade to the way Salesforce code can be developed. The approach borrows<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[1],"tags":[],"class_list":["post-4498","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9wfjh-1ay","_links":{"self":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/posts\/4498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/comments?post=4498"}],"version-history":[{"count":0,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/posts\/4498\/revisions"}],"wp:attachment":[{"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/media?parent=4498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/categories?post=4498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redmonk.com\/jgovernor\/wp-json\/wp\/v2\/tags?post=4498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}