Successfully reported this slideshow.
Your SlideShare is downloading. ×

Scaling up development of a modular code base

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 32 Ad

Scaling up development of a modular code base

Download to read offline


Microservices are quickly becoming one of the preferred deployment models in the software industry. Much has been said about the runtime impact of microservices, but less about how they impact the development process.

This talk will discuss the details of moving from a single monolithic codebase to multiple repositories in terms of the development process. We will present the impact of modularisation on source control, continous integration, code reviews, IDEs and public discussion on chat/email.

After this talk attendees will have a better understanding on the impact of the development process of modular development.


Microservices are quickly becoming one of the preferred deployment models in the software industry. Much has been said about the runtime impact of microservices, but less about how they impact the development process.

This talk will discuss the details of moving from a single monolithic codebase to multiple repositories in terms of the development process. We will present the impact of modularisation on source control, continous integration, code reviews, IDEs and public discussion on chat/email.

After this talk attendees will have a better understanding on the impact of the development process of modular development.

Advertisement
Advertisement

More Related Content

Similar to Scaling up development of a modular code base (20)

More from Robert Munteanu (20)

Advertisement

Recently uploaded (20)

Scaling up development of a modular code base

  1. 1. Scaling up development of a modular code base Robert Munteanu, Adobe Systems Prague, 19-20 October 2017
  2. 2. Robert Munteanu @rombert Prague, 19-20 October 2017 About me
  3. 3. Robert Munteanu @rombert Prague, 19-20 October 2017 Agenda ● Modular development ● Source control ● Build tool and continuous integration ● (Integrated) development environment ● Communication ● Demo ● Wrap-up
  4. 4. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development
  5. 5. Robert Munteanu @rombert Prague, 19-20 October 2017 What is modular development?
  6. 6. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development vs modular deployment
  7. 7. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development vs modular deployment
  8. 8. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control
  9. 9. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: to split or not to split
  10. 10. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: single repository $ svn checkout https://svn.apache.org↵ /repos/asf/sling/trunk sling # change, commit atomically $ svn ls https://svn.apache.org↵ /repos/asf/sling/tags | wc -l 1478
  11. 11. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: multiple repositories
  12. 12. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: repo (Android) <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="origin" fetch=".." /> <default revision="master" remote="origin" /> <project path="api" name="api.git"/> <project path="impl" name="impl.git"/> </manifest> $ repo init -u git@github.com:org/manifest.git $ repo sync $ repo start new-feature api/ impl/ $ repo forall -c 'git push ...'
  13. 13. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: repo automation #!/bin/sh echo '<?xml version="1.0" encoding="UTF-8"?>' echo "<!-- generated by $(basename $0) -->" echo '<manifest>' echo ' <remote name="origin" fetch="."/>' echo ' <default revision="master" remote="origin"/>' for repo in $(curl -s https://api.github.com/users/rombert/repos?sort=updated | jq '.[] | .name | match ("TMP-sling-org.apache.sling.*") | .string' | tr -d '"' | sort); do name=${repo#TMP-sling-} echo " <project path="${name}" name="${repo}.git"/>" done echo '</manifest>'
  14. 14. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: migrating to individual repositories $ git clone https://github.com/apache/sling.git sling $ git clone sling org.apache.sling.engine $ cd org.apache.sling.engine $ git filter-branch --subdirectory-filter bundles/engine $ git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 git update-ref -d $ ls # only data in bundles/engine
  15. 15. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool and continuous integration
  16. 16. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: the aggregate build
  17. 17. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: repository
  18. 18. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: automating creation of module builds def modules = [ [ location: 'bundles/api' ], [ location: 'bundles/auth/core' ] /* many others skipped */ ] modules.each { module -> jdks.each { jdkKey -> mavenJob(jobName(module.location, jdkKey)) { logRotator { numToKeep(15) } triggers { snapshotDependencies(true) scm('H/15 * * * *') } goals("-U clean deploy") /* other instructions skipped */ } } }
  19. 19. Robert Munteanu @rombert Prague, 19-20 October 2017 (Integrated) development environment
  20. 20. Robert Munteanu @rombert Prague, 19-20 October 2017 IDE: provisioning and project discovery
  21. 21. Robert Munteanu @rombert Prague, 19-20 October 2017 IDE: shared preferences <!-- package your preferences as a Maven artifact ---> <dependency> <groupId>org.acme.tooling</groupId> <artifactId>acme-eclipse-formatter</artifactId> <version>1.0-SNAPSHOT</version> <packaging>eclipse-formatter</packaging> </dependency> <!-- configure the plugin in your parent pom --> <plugins> <plugin> <groupId>ro.lmn.maven.rip</groupId> <artifactId>eclipse-preferences-maven-plugin</artifactId> <version>0.0.2</version> <extensions>true</extensions> <configuration> <repository> <kind>jira</kind> <url>https://issues.apache.org/jira</url> </repository> <commitTemplate>${task.key} - ${task.description}nn</commitTemplate> </configuration> </plugin> </plugins>
  22. 22. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication
  23. 23. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: single channel
  24. 24. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: multiple channels
  25. 25. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: a split?
  26. 26. Robert Munteanu @rombert Prague, 19-20 October 2017 Demo
  27. 27. Robert Munteanu @rombert Prague, 19-20 October 2017 Wrap-up
  28. 28. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development - Sling
  29. 29. Robert Munteanu @rombert Prague, 19-20 October 2017 The big picture
  30. 30. Robert Munteanu @rombert Prague, 19-20 October 2017 The big picture
  31. 31. Robert Munteanu @rombert Prague, 19-20 October 2017 Supporting tools ● https://github.com/jenkinsci/job-dsl-plugin ● https://gerrit.googlesource.com/git-repo/ ● https://projects.eclipse.org/projects/tools.oomph
  32. 32. Robert Munteanu @rombert Prague, 19-20 October 2017 Examples of modular development ● https://svn.apache.org/repos/asf/sling/trunk/tooling/jenkins/ ● https://github.com/wcm-io-devops/eclipse-maven-plugin ● https://github.com/bdelacretaz/docker-jenkins-dsl-ready ● https://wiki.openstack.org/wiki/MailingListEtiquette

×