SlideShare a Scribd company logo
Scaling up development of a modular code
base
Robert Munteanu, Adobe Systems
Prague, 19-20 October 2017
Robert Munteanu @rombert Prague, 19-20 October 2017
About me
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
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development
Robert Munteanu @rombert Prague, 19-20 October 2017
What is modular development?
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development vs modular deployment
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development vs modular deployment
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control: to split or not to split
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
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control: multiple repositories
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 ...'
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>'
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
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool and continuous
integration
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool: the aggregate build
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool: repository
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 */
}
}
}
Robert Munteanu @rombert Prague, 19-20 October 2017
(Integrated) development
environment
Robert Munteanu @rombert Prague, 19-20 October 2017
IDE: provisioning and project discovery
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>
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication: single channel
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication: multiple channels
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication: a split?
Robert Munteanu @rombert Prague, 19-20 October 2017
Demo
Robert Munteanu @rombert Prague, 19-20 October 2017
Wrap-up
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development - Sling
Robert Munteanu @rombert Prague, 19-20 October 2017
The big picture
Robert Munteanu @rombert Prague, 19-20 October 2017
The big picture
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
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

More Related Content

Similar to Scaling up development of a modular code base

DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay Dresden
 
ICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open Source
LetsConnect
 
Social Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open SourceSocial Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open Source
Paul Withers
 
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Horacio Gonzalez
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
Robert Munteanu
 
Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2
Óscar Recio Soria
 
Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016
Steve Hoffman
 
Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and
Pierre Joye
 
Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017
Matt Raible
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Paolo Cristofaro
 
ChainerUI v0.2, v0.3
ChainerUI v0.2, v0.3ChainerUI v0.2, v0.3
ChainerUI v0.2, v0.3
Preferred Networks
 
Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer
John Riviello
 
Streaming Visualization
Streaming VisualizationStreaming Visualization
Streaming Visualization
Guido Schmutz
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
Matt Raible
 
Git - the stupid content tracker
Git - the stupid content trackerGit - the stupid content tracker
Git - the stupid content tracker
Eric Johnson
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
Dave Cross
 
Building cognitive apps with Watson Work Services
Building cognitive apps with Watson Work ServicesBuilding cognitive apps with Watson Work Services
Building cognitive apps with Watson Work Services
LetsConnect
 
Using Ruby in Android Development
Using Ruby in Android DevelopmentUsing Ruby in Android Development
Using Ruby in Android Development
Adam Blum
 
Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018
Darío Kondratiuk
 

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

DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
 
ICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open Source
 
Social Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open SourceSocial Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open Source
 
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2
 
Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016
 
Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and
 
Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
 
ChainerUI v0.2, v0.3
ChainerUI v0.2, v0.3ChainerUI v0.2, v0.3
ChainerUI v0.2, v0.3
 
Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer
 
Streaming Visualization
Streaming VisualizationStreaming Visualization
Streaming Visualization
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
 
Git - the stupid content tracker
Git - the stupid content trackerGit - the stupid content tracker
Git - the stupid content tracker
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
 
Building cognitive apps with Watson Work Services
Building cognitive apps with Watson Work ServicesBuilding cognitive apps with Watson Work Services
Building cognitive apps with Watson Work Services
 
Using Ruby in Android Development
Using Ruby in Android DevelopmentUsing Ruby in Android Development
Using Ruby in Android Development
 
Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018
 

More from Robert Munteanu

Secure by Default Web Applications
Secure by Default Web ApplicationsSecure by Default Web Applications
Secure by Default Web Applications
Robert Munteanu
 
Sling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspective
Robert Munteanu
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
Robert Munteanu
 
Escape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud ServiceEscape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud Service
Robert Munteanu
 
Crash course in Kubernetes monitoring
Crash course in Kubernetes monitoringCrash course in Kubernetes monitoring
Crash course in Kubernetes monitoring
Robert Munteanu
 
Java agents for fun and (not so much) profit
Java agents for fun and (not so much) profitJava agents for fun and (not so much) profit
Java agents for fun and (not so much) profit
Robert Munteanu
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
Robert Munteanu
 
Cloud-native legacy applications
Cloud-native legacy applicationsCloud-native legacy applications
Cloud-native legacy applications
Robert Munteanu
 
Cloud-Native Sling
Cloud-Native SlingCloud-Native Sling
Cloud-Native Sling
Robert Munteanu
 
From Monolith to Modules - breaking apart a one size fits all product into mo...
From Monolith to Modules - breaking apart a one size fits all product into mo...From Monolith to Modules - breaking apart a one size fits all product into mo...
From Monolith to Modules - breaking apart a one size fits all product into mo...
Robert Munteanu
 
What's new in the Sling developer tooling?
What's new in the Sling developer tooling?What's new in the Sling developer tooling?
What's new in the Sling developer tooling?
Robert Munteanu
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
Robert Munteanu
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
Robert Munteanu
 
Zero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using DockerZero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using Docker
Robert Munteanu
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?
Robert Munteanu
 
Effective web application development with Apache Sling
Effective web application development with Apache SlingEffective web application development with Apache Sling
Effective web application development with Apache Sling
Robert Munteanu
 
Of microservices and microservices
Of microservices and microservicesOf microservices and microservices
Of microservices and microservices
Robert Munteanu
 
Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)
Robert Munteanu
 
Secure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache SlingSecure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache Sling
Robert Munteanu
 
Apache Sling as a Microservices Gateway
Apache Sling as a Microservices GatewayApache Sling as a Microservices Gateway
Apache Sling as a Microservices Gateway
Robert Munteanu
 

More from Robert Munteanu (20)

Secure by Default Web Applications
Secure by Default Web ApplicationsSecure by Default Web Applications
Secure by Default Web Applications
 
Sling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspective
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
 
Escape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud ServiceEscape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud Service
 
Crash course in Kubernetes monitoring
Crash course in Kubernetes monitoringCrash course in Kubernetes monitoring
Crash course in Kubernetes monitoring
 
Java agents for fun and (not so much) profit
Java agents for fun and (not so much) profitJava agents for fun and (not so much) profit
Java agents for fun and (not so much) profit
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
 
Cloud-native legacy applications
Cloud-native legacy applicationsCloud-native legacy applications
Cloud-native legacy applications
 
Cloud-Native Sling
Cloud-Native SlingCloud-Native Sling
Cloud-Native Sling
 
From Monolith to Modules - breaking apart a one size fits all product into mo...
From Monolith to Modules - breaking apart a one size fits all product into mo...From Monolith to Modules - breaking apart a one size fits all product into mo...
From Monolith to Modules - breaking apart a one size fits all product into mo...
 
What's new in the Sling developer tooling?
What's new in the Sling developer tooling?What's new in the Sling developer tooling?
What's new in the Sling developer tooling?
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Zero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using DockerZero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using Docker
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?
 
Effective web application development with Apache Sling
Effective web application development with Apache SlingEffective web application development with Apache Sling
Effective web application development with Apache Sling
 
Of microservices and microservices
Of microservices and microservicesOf microservices and microservices
Of microservices and microservices
 
Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)
 
Secure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache SlingSecure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache Sling
 
Apache Sling as a Microservices Gateway
Apache Sling as a Microservices GatewayApache Sling as a Microservices Gateway
Apache Sling as a Microservices Gateway
 

Recently uploaded

Microsoft-Power-Platform-Adoption-Planning.pptx
Microsoft-Power-Platform-Adoption-Planning.pptxMicrosoft-Power-Platform-Adoption-Planning.pptx
Microsoft-Power-Platform-Adoption-Planning.pptx
jrodriguezq3110
 
Optimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptxOptimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptx
WebConnect Pvt Ltd
 
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
Tier1 app
 
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Paul Brebner
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
ShulagnaSarkar2
 
Software Test Automation - A Comprehensive Guide on Automated Testing.pdf
Software Test Automation - A Comprehensive Guide on Automated Testing.pdfSoftware Test Automation - A Comprehensive Guide on Automated Testing.pdf
Software Test Automation - A Comprehensive Guide on Automated Testing.pdf
kalichargn70th171
 
Flutter vs. React Native: A Detailed Comparison for App Development in 2024
Flutter vs. React Native: A Detailed Comparison for App Development in 2024Flutter vs. React Native: A Detailed Comparison for App Development in 2024
Flutter vs. React Native: A Detailed Comparison for App Development in 2024
dhavalvaghelanectarb
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
wonyong hwang
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
kalichargn70th171
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
Jhone kinadey
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
sandeepmenon62
 
ppt on the brain chip neuralink.pptx
ppt  on   the brain  chip neuralink.pptxppt  on   the brain  chip neuralink.pptx
ppt on the brain chip neuralink.pptx
Reetu63
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Peter Caitens
 
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical OperationsEnsuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
OnePlan Solutions
 
Stork Product Overview: An AI-Powered Autonomous Delivery Fleet
Stork Product Overview: An AI-Powered Autonomous Delivery FleetStork Product Overview: An AI-Powered Autonomous Delivery Fleet
Stork Product Overview: An AI-Powered Autonomous Delivery Fleet
Vince Scalabrino
 
Streamlining End-to-End Testing Automation
Streamlining End-to-End Testing AutomationStreamlining End-to-End Testing Automation
Streamlining End-to-End Testing Automation
Anand Bagmar
 
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
campbellclarkson
 
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA ComplianceSecure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
ICS
 
Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...
Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...
Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...
Ortus Solutions, Corp
 

Recently uploaded (20)

Microsoft-Power-Platform-Adoption-Planning.pptx
Microsoft-Power-Platform-Adoption-Planning.pptxMicrosoft-Power-Platform-Adoption-Planning.pptx
Microsoft-Power-Platform-Adoption-Planning.pptx
 
Optimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptxOptimizing Your E-commerce with WooCommerce.pptx
Optimizing Your E-commerce with WooCommerce.pptx
 
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
 
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...
 
14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision14 th Edition of International conference on computer vision
14 th Edition of International conference on computer vision
 
Software Test Automation - A Comprehensive Guide on Automated Testing.pdf
Software Test Automation - A Comprehensive Guide on Automated Testing.pdfSoftware Test Automation - A Comprehensive Guide on Automated Testing.pdf
Software Test Automation - A Comprehensive Guide on Automated Testing.pdf
 
Flutter vs. React Native: A Detailed Comparison for App Development in 2024
Flutter vs. React Native: A Detailed Comparison for App Development in 2024Flutter vs. React Native: A Detailed Comparison for App Development in 2024
Flutter vs. React Native: A Detailed Comparison for App Development in 2024
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
 
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptxOperational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
Operational ease MuleSoft and Salesforce Service Cloud Solution v1.0.pptx
 
ppt on the brain chip neuralink.pptx
ppt  on   the brain  chip neuralink.pptxppt  on   the brain  chip neuralink.pptx
ppt on the brain chip neuralink.pptx
 
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom KittEnhanced Screen Flows UI/UX using SLDS with Tom Kitt
Enhanced Screen Flows UI/UX using SLDS with Tom Kitt
 
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical OperationsEnsuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
 
Stork Product Overview: An AI-Powered Autonomous Delivery Fleet
Stork Product Overview: An AI-Powered Autonomous Delivery FleetStork Product Overview: An AI-Powered Autonomous Delivery Fleet
Stork Product Overview: An AI-Powered Autonomous Delivery Fleet
 
Streamlining End-to-End Testing Automation
Streamlining End-to-End Testing AutomationStreamlining End-to-End Testing Automation
Streamlining End-to-End Testing Automation
 
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdfBaha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
Baha Majid WCA4Z IBM Z Customer Council Boston June 2024.pdf
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
 
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA ComplianceSecure-by-Design Using Hardware and Software Protection for FDA Compliance
Secure-by-Design Using Hardware and Software Protection for FDA Compliance
 
Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...
Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...
Strengthening Web Development with CommandBox 6: Seamless Transition and Scal...
 

Scaling up development of a modular code base

  • 1. Scaling up development of a modular code base Robert Munteanu, Adobe Systems Prague, 19-20 October 2017
  • 2. Robert Munteanu @rombert Prague, 19-20 October 2017 About me
  • 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development
  • 5. Robert Munteanu @rombert Prague, 19-20 October 2017 What is modular development?
  • 6. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development vs modular deployment
  • 7. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development vs modular deployment
  • 8. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control
  • 9. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: to split or not to split
  • 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: multiple repositories
  • 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. 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. 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool and continuous integration
  • 16. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: the aggregate build
  • 17. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: repository
  • 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. Robert Munteanu @rombert Prague, 19-20 October 2017 (Integrated) development environment
  • 20. Robert Munteanu @rombert Prague, 19-20 October 2017 IDE: provisioning and project discovery
  • 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication
  • 23. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: single channel
  • 24. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: multiple channels
  • 25. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: a split?
  • 26. Robert Munteanu @rombert Prague, 19-20 October 2017 Demo
  • 27. Robert Munteanu @rombert Prague, 19-20 October 2017 Wrap-up
  • 28. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development - Sling
  • 29. Robert Munteanu @rombert Prague, 19-20 October 2017 The big picture
  • 30. Robert Munteanu @rombert Prague, 19-20 October 2017 The big picture
  • 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. 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