SlideShare a Scribd company logo
viktor@jv-ration.com | @sadovnikov
Dealing with
Large Code Bases
Continuous Delivery Amsterdam
August 2016
viktor@jv-ration.com | @sadovnikov
Viktor Sadovnikov
● 1985 - first keyboard touch
● 1988 - first line of code
● 1993 - first computer at home
● 1994 - first paid line of code
● 2001 - first code to test another code
● 2005 - first build server run
● 2007 - first automated deployments
2
@sadovnikov
viktor@jv-ration.com | @sadovnikov
Common
Build Project
3
viktor@jv-ration.com | @sadovnikov
Common Build Project
Initial Scope
4
Source Repository From CVS to SVN
Build Tool From mix of Maven, Ant and Eclipse to Maven;
Dependencies from Nexus
Artifacts Repository From “something” to Nexus; deployable from Jenkins only;
Build Server From “something” to Jenkins;
Automate creation of builds jobs
Migration Done by projects themselves or (mainly stale) by us;
Extensive migration checklist
viktor@jv-ration.com | @sadovnikov
Common Build Project
“Bonus” Scope
5
Platform Moving builds from Windows to Linux
Upgrades Upgrading JDK during migration
Packaging 2 tailored packaging types
Deployment Number of applications shared dependencies at runtime
viktor@jv-ration.com | @sadovnikov
Common Build Project
Volumes
6
Maven modules
(artifacts)
3.500 (trunks only): 1.760 jars, 250 wars
External dependencies 2.200 libraries
Build jobs +/- 4.000 jobs (including branches)
Jenkins installations 12 instances;
later moved to 4 masters with pool of slaves
viktor@jv-ration.com | @sadovnikov
Challenges
and Lack of
Tooling
7
Tooling for
Software
Development
viktor@jv-ration.com | @sadovnikov
#1. Finding the Code
● Finding code of a dependency in SVN to check available tags (versions), to
find out correct group and artifact IDs, to contact developers;
● Enquiries about existing projects
8
● FishEye from Atlassian… works only on SVN
● SonarQube from SonarSource… finds everything
Solutions:
viktor@jv-ration.com | @sadovnikov
#2. Changing Shared Libraries
● Can I stop compiling for JDK 5?
● How much effort will my change cause?
● Do they use correct (after migration) and recent versions?
● What is used? How is used?
9
● NoneSolutions:
viktor@jv-ration.com | @sadovnikov
#3. Conflicts of Versions
● Direct dependency does not match transitive dependency
● What needs to be released before I can use changed shared library?
● Why do I get “entire world” as my compile dependency?
● (WRONG) Why do my builds pick-up old SNAPSHOT?
10
● Manual execution of Maven Dependency plugin (-Dverbose)
● Parsing the results
● On level of modules, not projects
Solutions:
viktor@jv-ration.com | @sadovnikov
#4. Finding the Builds
● 12 Jenkins instances and 4.000 build jobs
● Hard requirement of every project migration
11
● grep on build job configuration files… on all 12 servers
● Ctrl+F on Jenkins “all” page… unless the builds are renamed
● Referencing builds in pom.xml… gets obsolete quickly
Solutions:
viktor@jv-ration.com | @sadovnikov
development
environment
Cross
examiner
12
viktor@jv-ration.com | @sadovnikov
Evolution of deCrex
deCrex - Development Environment Cross Examiner - scanner and analyzer of
source repositories and build servers
13
main() to
generate
JSON.
Running from
IntelliJ
Daily triggered
from Jenkins to
publish JSON
An intranet
application,
running
internally
Publically
available
installation to
scan OSS
Started simple... ...and could not stop
https://ossa.jv-ration.com
viktor@jv-ration.com | @sadovnikov
#1. Finding the Code
● Search for Maven
Modules and builds
● Based on IDs, names,
descriptions
14
viktor@jv-ration.com | @sadovnikov
#2. Changing Shared Libraries
● List of direct dependees
● Versions direct
dependees depend on
● Quick access to details
of dependees
15
viktor@jv-ration.com | @sadovnikov
#3. Conflicts of Versions
● Build Jobs you project
depends on
● 7 Releases to push
changes in “Spring Data
Build” to “Spring Boot
Build”
● There are cycle
dependencies among
builds
16
viktor@jv-ration.com | @sadovnikov
#4. Finding the Builds
● From modules to builds
● From builds to modules
17
viktor@jv-ration.com | @sadovnikov
Dealing with Code:
OSS approach in
Enterprises
18
viktor@jv-ration.com | @sadovnikov
Dealing with Code:
many vs. mono
19
viktor@jv-ration.com | @sadovnikov
Two Approaches
20
OSS Approach. Many-repos
● Every logically complete unit
(project) is in its own repo with
its own release cycle
● Build tools resolve
dependencies using artifact
repositories
● Most familiar approach, heavily
used in OSS projects
Monolithic Repos. Monorepos
● Single repository with all code
● No version constraints for
internal code
● All internal code is a part of the
build
● Used by companies like
Google, Facebook, Deis.io,
Twitter, Salesforce...
viktor@jv-ration.com | @sadovnikov
Many-repos Approach
● Clean boundaries between
projects
● Easier reusable in other contexts
code
● Fine-tuned access control
● Lighter, faster builds
21
● Refactoring becomes an
incompatible change
● Diamond dependencies and
interdependencies in internal code
● Loss of atomicity of commits
● Temptation to pick a version and
“stabilize” - stagnate
● Not fixing bugs in “not my code”
● Growth of obsolete and deprecated
code
viktor@jv-ration.com | @sadovnikov
Monorepos Approach
● Refactoring enabler: changing
APIs, removing obsolete code
● Atomic commits for large changes
● No switching between repos
● Collaboration among teams
● Less management (CI and repo)
● Code Management: search,
moving files around
22
● Ownership of the code is
detached from repo authorization
● Implementation problems: pulling
too much, mixed commit logs, etc
● Fully distributed SCM is
problematic
● Latency and requirements of
builds
viktor@jv-ration.com | @sadovnikov
Recognitions of Many-Repos Shortcomings
● Semantic Versioning
contract between me and you: since I can't know what you're doing, I promise not to do certain
things with my library so that you can use it with some confidence
● GIT Submodules and Subtrees
“you want to be able to treat the two projects as separate yet still be able to use one from within the
other”
● GitLab
Issues, Milestones and Merge Requests combined on group level
● @depricated
● Spring Boot
79 modules under one aggregator
23
viktor@jv-ration.com | @sadovnikov
deCrex - Wrapper for Many-repos
Enables use of many-repos with clean project boundaries and code ownership,
lighter builds and distributed SCM by adding
● insights on dependees of every project,
● reporting on
○ stagnated dependencies and interdependencies in internal code,
○ projects without dependees - either a “delivery” or an obsolete code,
● Build Plan to ease CI setup,
● searching through “monorepo”
24
viktor@jv-ration.com | @sadovnikov
Upcoming Changes
● Ease of installation on premises
● UI improvements
● Extending support for build tools (Gradle) and servers
(Travis CI), SCM (puur GIT)
25
● Configuring “Monorepo members”
● Managing “ownership” of the code
● Notifying code owners about stagnated dependencies
● Interested in scanning your code?
viktor@jv-ration.com | @sadovnikov
Q&A
https://ossa.jv-ration.com
26
@sadovnikov

More Related Content

What's hot

Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Sauce Labs
 
IstioD - From Microservices to Monolithic
IstioD - From Microservices to MonolithicIstioD - From Microservices to Monolithic
IstioD - From Microservices to Monolithic
All Things Open
 
Preventing Supply Chain Attacks on Open Source Software
Preventing Supply Chain Attacks on Open Source SoftwarePreventing Supply Chain Attacks on Open Source Software
Preventing Supply Chain Attacks on Open Source Software
All Things Open
 
SDN NFV NV OpenNetwork @ VMUG.IT 20150529
SDN NFV NV OpenNetwork @ VMUG.IT 20150529SDN NFV NV OpenNetwork @ VMUG.IT 20150529
SDN NFV NV OpenNetwork @ VMUG.IT 20150529
VMUG IT
 
DevOps in realtime
DevOps in realtimeDevOps in realtime
DevOps in realtime
Andriy Samilyak
 
Security of OpenDaylight platform
Security of OpenDaylight platformSecurity of OpenDaylight platform
Security of OpenDaylight platform
OpenDaylight
 
Git Overview
Git OverviewGit Overview
Git Overview
Mallikarjuna G D
 
Qt5.pptx
Qt5.pptxQt5.pptx
Qt5.pptx
Steven Song
 
CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...
CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...
CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...
CodiLime
 
Development Process, the XWiki way
Development Process, the XWiki wayDevelopment Process, the XWiki way
Development Process, the XWiki way
Eduard Moraru
 
Automated testing with Openshift
Automated testing with OpenshiftAutomated testing with Openshift
Automated testing with Openshift
Oleg Popov
 
OSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of Container
OSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of ContainerOSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of Container
OSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of Container
NETWAYS
 
Make sure your code works
Make sure your code worksMake sure your code works
Make sure your code works
Henrik Skupin
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
Ioan Eugen Stan
 
The automated tests inside Openshift
The automated tests inside OpenshiftThe automated tests inside Openshift
The automated tests inside Openshift
Oleg Popov
 
Report portal
Report portalReport portal
Report portal
COMAQA.BY
 
XWiki's Development Process
XWiki's Development ProcessXWiki's Development Process
XWiki's Development Process
Eduard Moraru
 
CodiLime Tech Talk - Wojciech Urbański: Cloud Native
CodiLime Tech Talk - Wojciech Urbański: Cloud NativeCodiLime Tech Talk - Wojciech Urbański: Cloud Native
CodiLime Tech Talk - Wojciech Urbański: Cloud Native
CodiLime
 
ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...
ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...
ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...
OW2
 

What's hot (19)

Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
Slow, Flaky and Legacy Tests: FTFY - Our New Testing Strategy at Net-A-Porter...
 
IstioD - From Microservices to Monolithic
IstioD - From Microservices to MonolithicIstioD - From Microservices to Monolithic
IstioD - From Microservices to Monolithic
 
Preventing Supply Chain Attacks on Open Source Software
Preventing Supply Chain Attacks on Open Source SoftwarePreventing Supply Chain Attacks on Open Source Software
Preventing Supply Chain Attacks on Open Source Software
 
SDN NFV NV OpenNetwork @ VMUG.IT 20150529
SDN NFV NV OpenNetwork @ VMUG.IT 20150529SDN NFV NV OpenNetwork @ VMUG.IT 20150529
SDN NFV NV OpenNetwork @ VMUG.IT 20150529
 
DevOps in realtime
DevOps in realtimeDevOps in realtime
DevOps in realtime
 
Security of OpenDaylight platform
Security of OpenDaylight platformSecurity of OpenDaylight platform
Security of OpenDaylight platform
 
Git Overview
Git OverviewGit Overview
Git Overview
 
Qt5.pptx
Qt5.pptxQt5.pptx
Qt5.pptx
 
CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...
CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...
CodiLime Tech Talk - Dawid Trzebiatowski i Wojciech Urbański: Opening the Flo...
 
Development Process, the XWiki way
Development Process, the XWiki wayDevelopment Process, the XWiki way
Development Process, the XWiki way
 
Automated testing with Openshift
Automated testing with OpenshiftAutomated testing with Openshift
Automated testing with Openshift
 
OSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of Container
OSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of ContainerOSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of Container
OSDC 2017 - Dr. Udo Seidel - VMwares (open source) Way of Container
 
Make sure your code works
Make sure your code worksMake sure your code works
Make sure your code works
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
 
The automated tests inside Openshift
The automated tests inside OpenshiftThe automated tests inside Openshift
The automated tests inside Openshift
 
Report portal
Report portalReport portal
Report portal
 
XWiki's Development Process
XWiki's Development ProcessXWiki's Development Process
XWiki's Development Process
 
CodiLime Tech Talk - Wojciech Urbański: Cloud Native
CodiLime Tech Talk - Wojciech Urbański: Cloud NativeCodiLime Tech Talk - Wojciech Urbański: Cloud Native
CodiLime Tech Talk - Wojciech Urbański: Cloud Native
 
ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...
ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...
ETICS supporting compliance and interoperability, Gabriele Giammatteo, Engine...
 

Viewers also liked

Why hardware accelerator matters
Why hardware accelerator mattersWhy hardware accelerator matters
Why hardware accelerator matters
Lman Chu
 
Beepi and Digital Dealer
Beepi and Digital DealerBeepi and Digital Dealer
Beepi and Digital Dealer
Go Between Conseil
 
200810 Communities&Conversations
200810 Communities&Conversations200810 Communities&Conversations
200810 Communities&Conversations
Rob Inskeep
 
9 27-2012 -long
9 27-2012 -long9 27-2012 -long
9 27-2012 -long
Sky Lar
 
Certidão de Acervo Técnico EMURB-SP
Certidão de Acervo Técnico EMURB-SPCertidão de Acervo Técnico EMURB-SP
Certidão de Acervo Técnico EMURB-SPGladston Bernardi
 
Burnette - Building a culture of trust
Burnette - Building a culture of trust Burnette - Building a culture of trust
Burnette - Building a culture of trust
HR Florida State Council, Inc.
 
Top 5 digital trends of 2016
Top 5 digital trends of 2016Top 5 digital trends of 2016
Top 5 digital trends of 2016
Gianluca Girard
 
PerfilInnews
PerfilInnewsPerfilInnews
PerfilInnews
Eduardo Ritschel
 
Social Media for Artistic People
Social Media for Artistic PeopleSocial Media for Artistic People
Social Media for Artistic People
Tim Vahsholtz, Quartzlight Marketing
 
Responsive design in ten minutes
Responsive design in ten minutesResponsive design in ten minutes
Responsive design in ten minutes
Dotkumo
 
Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...
Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...
Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...
Sarah Page
 
poverty by Armghan Arshad
poverty by Armghan Arshadpoverty by Armghan Arshad
poverty by Armghan Arshad
kaka ptaka
 
Lean Manufacturing Is Not Like Software Development
Lean Manufacturing Is Not Like Software DevelopmentLean Manufacturing Is Not Like Software Development
Lean Manufacturing Is Not Like Software Development
Darren Duarte
 
Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"
Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"
Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"
WebVisions
 
2015 Intellectual Property (IP) Year in Review
2015 Intellectual Property (IP) Year in Review2015 Intellectual Property (IP) Year in Review
2015 Intellectual Property (IP) Year in Review
Knobbe Martens - Intellectual Property Law
 
Xxxxxx karim a hamir 2015 resume
Xxxxxx karim a  hamir 2015 resumeXxxxxx karim a  hamir 2015 resume
Xxxxxx karim a hamir 2015 resume
Karim Hamir
 
Monster Loyalty presentation - annotated slides
Monster Loyalty presentation - annotated slidesMonster Loyalty presentation - annotated slides
Monster Loyalty presentation - annotated slides
Jackie Huba
 
The Current State of Trade Secret Law and How the New Federal Statute Will Sh...
The Current State of Trade Secret Law and How the New Federal Statute Will Sh...The Current State of Trade Secret Law and How the New Federal Statute Will Sh...
The Current State of Trade Secret Law and How the New Federal Statute Will Sh...
Knobbe Martens - Intellectual Property Law
 

Viewers also liked (19)

Why hardware accelerator matters
Why hardware accelerator mattersWhy hardware accelerator matters
Why hardware accelerator matters
 
Beepi and Digital Dealer
Beepi and Digital DealerBeepi and Digital Dealer
Beepi and Digital Dealer
 
200810 Communities&Conversations
200810 Communities&Conversations200810 Communities&Conversations
200810 Communities&Conversations
 
9 27-2012 -long
9 27-2012 -long9 27-2012 -long
9 27-2012 -long
 
Certidão de Acervo Técnico EMURB-SP
Certidão de Acervo Técnico EMURB-SPCertidão de Acervo Técnico EMURB-SP
Certidão de Acervo Técnico EMURB-SP
 
9a Promoció IWE/IWT
9a Promoció IWE/IWT9a Promoció IWE/IWT
9a Promoció IWE/IWT
 
Burnette - Building a culture of trust
Burnette - Building a culture of trust Burnette - Building a culture of trust
Burnette - Building a culture of trust
 
Top 5 digital trends of 2016
Top 5 digital trends of 2016Top 5 digital trends of 2016
Top 5 digital trends of 2016
 
PerfilInnews
PerfilInnewsPerfilInnews
PerfilInnews
 
Social Media for Artistic People
Social Media for Artistic PeopleSocial Media for Artistic People
Social Media for Artistic People
 
Responsive design in ten minutes
Responsive design in ten minutesResponsive design in ten minutes
Responsive design in ten minutes
 
Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...
Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...
Social Media for Arts Service Organizations: No Strategy? No Time? No Staff? ...
 
poverty by Armghan Arshad
poverty by Armghan Arshadpoverty by Armghan Arshad
poverty by Armghan Arshad
 
Lean Manufacturing Is Not Like Software Development
Lean Manufacturing Is Not Like Software DevelopmentLean Manufacturing Is Not Like Software Development
Lean Manufacturing Is Not Like Software Development
 
Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"
Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"
Kent Nichols, "Downshifting Your Life to Rev Up Your Creativity"
 
2015 Intellectual Property (IP) Year in Review
2015 Intellectual Property (IP) Year in Review2015 Intellectual Property (IP) Year in Review
2015 Intellectual Property (IP) Year in Review
 
Xxxxxx karim a hamir 2015 resume
Xxxxxx karim a  hamir 2015 resumeXxxxxx karim a  hamir 2015 resume
Xxxxxx karim a hamir 2015 resume
 
Monster Loyalty presentation - annotated slides
Monster Loyalty presentation - annotated slidesMonster Loyalty presentation - annotated slides
Monster Loyalty presentation - annotated slides
 
The Current State of Trade Secret Law and How the New Federal Statute Will Sh...
The Current State of Trade Secret Law and How the New Federal Statute Will Sh...The Current State of Trade Secret Law and How the New Federal Statute Will Sh...
The Current State of Trade Secret Law and How the New Federal Statute Will Sh...
 

Similar to Dealing with large code bases. cd ams meetup

Lessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and BlinkLessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and Blink
Bruno Abinader
 
Developing NuGet
Developing NuGetDeveloping NuGet
Developing NuGet
Jeff Handley
 
Distributed Development, Centralised Delivery - SAGrid Jenkins + CVMFS
Distributed Development, Centralised Delivery - SAGrid Jenkins + CVMFSDistributed Development, Centralised Delivery - SAGrid Jenkins + CVMFS
Distributed Development, Centralised Delivery - SAGrid Jenkins + CVMFS
Bruce Becker
 
Webinar: From Development to Production with Docker and MongoDB
Webinar: From Development to Production with Docker and MongoDBWebinar: From Development to Production with Docker and MongoDB
Webinar: From Development to Production with Docker and MongoDB
MongoDB
 
software technology benchmarking
software  technology benchmarkingsoftware  technology benchmarking
software technology benchmarking
Mallikarjuna G D
 
Creating An App for 650 million customers v.2.pdf
Creating An App for 650 million customers v.2.pdfCreating An App for 650 million customers v.2.pdf
Creating An App for 650 million customers v.2.pdf
Dmitry Osipa
 
Git presentation
Git presentationGit presentation
Git presentation
jordimash
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life
DevOps.com
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
GlobalLogic Ukraine
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
Vitebsk Miniq
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Indrajit Poddar
 
FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...
FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...
FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...
Fasten Project
 
Static Analysis of Your OSS Project with Coverity
Static Analysis of Your OSS Project with CoverityStatic Analysis of Your OSS Project with Coverity
Static Analysis of Your OSS Project with Coverity
Samsung Open Source Group
 
Microservices Architecture and Containers.
Microservices Architecture and Containers.Microservices Architecture and Containers.
Microservices Architecture and Containers.
imjacobclark
 
Build tool
Build toolBuild tool
Build tool
Mallikarjuna G D
 
Angular2 - A story from the trenches
Angular2 - A story from the trenchesAngular2 - A story from the trenches
Angular2 - A story from the trenches
Johannes Rudolph
 
What is the merge window?
What is the merge window?What is the merge window?
What is the merge window?
Macpaul Lin
 
TransitioningToMicroServonDocker_MS
TransitioningToMicroServonDocker_MSTransitioningToMicroServonDocker_MS
TransitioningToMicroServonDocker_MS
Lana Kalashnyk
 
Node js vs golang -which one is better ?
Node js vs golang -which one is better ?Node js vs golang -which one is better ?
Node js vs golang -which one is better ?
ForceBolt
 
Versioning for Developers
Versioning for DevelopersVersioning for Developers
Versioning for Developers
Michelangelo van Dam
 

Similar to Dealing with large code bases. cd ams meetup (20)

Lessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and BlinkLessons from Contributing to WebKit and Blink
Lessons from Contributing to WebKit and Blink
 
Developing NuGet
Developing NuGetDeveloping NuGet
Developing NuGet
 
Distributed Development, Centralised Delivery - SAGrid Jenkins + CVMFS
Distributed Development, Centralised Delivery - SAGrid Jenkins + CVMFSDistributed Development, Centralised Delivery - SAGrid Jenkins + CVMFS
Distributed Development, Centralised Delivery - SAGrid Jenkins + CVMFS
 
Webinar: From Development to Production with Docker and MongoDB
Webinar: From Development to Production with Docker and MongoDBWebinar: From Development to Production with Docker and MongoDB
Webinar: From Development to Production with Docker and MongoDB
 
software technology benchmarking
software  technology benchmarkingsoftware  technology benchmarking
software technology benchmarking
 
Creating An App for 650 million customers v.2.pdf
Creating An App for 650 million customers v.2.pdfCreating An App for 650 million customers v.2.pdf
Creating An App for 650 million customers v.2.pdf
 
Git presentation
Git presentationGit presentation
Git presentation
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life
 
Modern Web-site Development Pipeline
Modern Web-site Development PipelineModern Web-site Development Pipeline
Modern Web-site Development Pipeline
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
 
FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...
FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...
FASTEN presentation at OSS2021, by Michele Scarlato, Endocode, May 12, 2021, ...
 
Static Analysis of Your OSS Project with Coverity
Static Analysis of Your OSS Project with CoverityStatic Analysis of Your OSS Project with Coverity
Static Analysis of Your OSS Project with Coverity
 
Microservices Architecture and Containers.
Microservices Architecture and Containers.Microservices Architecture and Containers.
Microservices Architecture and Containers.
 
Build tool
Build toolBuild tool
Build tool
 
Angular2 - A story from the trenches
Angular2 - A story from the trenchesAngular2 - A story from the trenches
Angular2 - A story from the trenches
 
What is the merge window?
What is the merge window?What is the merge window?
What is the merge window?
 
TransitioningToMicroServonDocker_MS
TransitioningToMicroServonDocker_MSTransitioningToMicroServonDocker_MS
TransitioningToMicroServonDocker_MS
 
Node js vs golang -which one is better ?
Node js vs golang -which one is better ?Node js vs golang -which one is better ?
Node js vs golang -which one is better ?
 
Versioning for Developers
Versioning for DevelopersVersioning for Developers
Versioning for Developers
 

Recently uploaded

SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Undress Baby
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 

Recently uploaded (20)

SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdfRevolutionizing Visual Effects Mastering AI Face Swaps.pdf
Revolutionizing Visual Effects Mastering AI Face Swaps.pdf
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 

Dealing with large code bases. cd ams meetup

  • 1. viktor@jv-ration.com | @sadovnikov Dealing with Large Code Bases Continuous Delivery Amsterdam August 2016
  • 2. viktor@jv-ration.com | @sadovnikov Viktor Sadovnikov ● 1985 - first keyboard touch ● 1988 - first line of code ● 1993 - first computer at home ● 1994 - first paid line of code ● 2001 - first code to test another code ● 2005 - first build server run ● 2007 - first automated deployments 2 @sadovnikov
  • 4. viktor@jv-ration.com | @sadovnikov Common Build Project Initial Scope 4 Source Repository From CVS to SVN Build Tool From mix of Maven, Ant and Eclipse to Maven; Dependencies from Nexus Artifacts Repository From “something” to Nexus; deployable from Jenkins only; Build Server From “something” to Jenkins; Automate creation of builds jobs Migration Done by projects themselves or (mainly stale) by us; Extensive migration checklist
  • 5. viktor@jv-ration.com | @sadovnikov Common Build Project “Bonus” Scope 5 Platform Moving builds from Windows to Linux Upgrades Upgrading JDK during migration Packaging 2 tailored packaging types Deployment Number of applications shared dependencies at runtime
  • 6. viktor@jv-ration.com | @sadovnikov Common Build Project Volumes 6 Maven modules (artifacts) 3.500 (trunks only): 1.760 jars, 250 wars External dependencies 2.200 libraries Build jobs +/- 4.000 jobs (including branches) Jenkins installations 12 instances; later moved to 4 masters with pool of slaves
  • 7. viktor@jv-ration.com | @sadovnikov Challenges and Lack of Tooling 7 Tooling for Software Development
  • 8. viktor@jv-ration.com | @sadovnikov #1. Finding the Code ● Finding code of a dependency in SVN to check available tags (versions), to find out correct group and artifact IDs, to contact developers; ● Enquiries about existing projects 8 ● FishEye from Atlassian… works only on SVN ● SonarQube from SonarSource… finds everything Solutions:
  • 9. viktor@jv-ration.com | @sadovnikov #2. Changing Shared Libraries ● Can I stop compiling for JDK 5? ● How much effort will my change cause? ● Do they use correct (after migration) and recent versions? ● What is used? How is used? 9 ● NoneSolutions:
  • 10. viktor@jv-ration.com | @sadovnikov #3. Conflicts of Versions ● Direct dependency does not match transitive dependency ● What needs to be released before I can use changed shared library? ● Why do I get “entire world” as my compile dependency? ● (WRONG) Why do my builds pick-up old SNAPSHOT? 10 ● Manual execution of Maven Dependency plugin (-Dverbose) ● Parsing the results ● On level of modules, not projects Solutions:
  • 11. viktor@jv-ration.com | @sadovnikov #4. Finding the Builds ● 12 Jenkins instances and 4.000 build jobs ● Hard requirement of every project migration 11 ● grep on build job configuration files… on all 12 servers ● Ctrl+F on Jenkins “all” page… unless the builds are renamed ● Referencing builds in pom.xml… gets obsolete quickly Solutions:
  • 13. viktor@jv-ration.com | @sadovnikov Evolution of deCrex deCrex - Development Environment Cross Examiner - scanner and analyzer of source repositories and build servers 13 main() to generate JSON. Running from IntelliJ Daily triggered from Jenkins to publish JSON An intranet application, running internally Publically available installation to scan OSS Started simple... ...and could not stop https://ossa.jv-ration.com
  • 14. viktor@jv-ration.com | @sadovnikov #1. Finding the Code ● Search for Maven Modules and builds ● Based on IDs, names, descriptions 14
  • 15. viktor@jv-ration.com | @sadovnikov #2. Changing Shared Libraries ● List of direct dependees ● Versions direct dependees depend on ● Quick access to details of dependees 15
  • 16. viktor@jv-ration.com | @sadovnikov #3. Conflicts of Versions ● Build Jobs you project depends on ● 7 Releases to push changes in “Spring Data Build” to “Spring Boot Build” ● There are cycle dependencies among builds 16
  • 17. viktor@jv-ration.com | @sadovnikov #4. Finding the Builds ● From modules to builds ● From builds to modules 17
  • 18. viktor@jv-ration.com | @sadovnikov Dealing with Code: OSS approach in Enterprises 18
  • 19. viktor@jv-ration.com | @sadovnikov Dealing with Code: many vs. mono 19
  • 20. viktor@jv-ration.com | @sadovnikov Two Approaches 20 OSS Approach. Many-repos ● Every logically complete unit (project) is in its own repo with its own release cycle ● Build tools resolve dependencies using artifact repositories ● Most familiar approach, heavily used in OSS projects Monolithic Repos. Monorepos ● Single repository with all code ● No version constraints for internal code ● All internal code is a part of the build ● Used by companies like Google, Facebook, Deis.io, Twitter, Salesforce...
  • 21. viktor@jv-ration.com | @sadovnikov Many-repos Approach ● Clean boundaries between projects ● Easier reusable in other contexts code ● Fine-tuned access control ● Lighter, faster builds 21 ● Refactoring becomes an incompatible change ● Diamond dependencies and interdependencies in internal code ● Loss of atomicity of commits ● Temptation to pick a version and “stabilize” - stagnate ● Not fixing bugs in “not my code” ● Growth of obsolete and deprecated code
  • 22. viktor@jv-ration.com | @sadovnikov Monorepos Approach ● Refactoring enabler: changing APIs, removing obsolete code ● Atomic commits for large changes ● No switching between repos ● Collaboration among teams ● Less management (CI and repo) ● Code Management: search, moving files around 22 ● Ownership of the code is detached from repo authorization ● Implementation problems: pulling too much, mixed commit logs, etc ● Fully distributed SCM is problematic ● Latency and requirements of builds
  • 23. viktor@jv-ration.com | @sadovnikov Recognitions of Many-Repos Shortcomings ● Semantic Versioning contract between me and you: since I can't know what you're doing, I promise not to do certain things with my library so that you can use it with some confidence ● GIT Submodules and Subtrees “you want to be able to treat the two projects as separate yet still be able to use one from within the other” ● GitLab Issues, Milestones and Merge Requests combined on group level ● @depricated ● Spring Boot 79 modules under one aggregator 23
  • 24. viktor@jv-ration.com | @sadovnikov deCrex - Wrapper for Many-repos Enables use of many-repos with clean project boundaries and code ownership, lighter builds and distributed SCM by adding ● insights on dependees of every project, ● reporting on ○ stagnated dependencies and interdependencies in internal code, ○ projects without dependees - either a “delivery” or an obsolete code, ● Build Plan to ease CI setup, ● searching through “monorepo” 24
  • 25. viktor@jv-ration.com | @sadovnikov Upcoming Changes ● Ease of installation on premises ● UI improvements ● Extending support for build tools (Gradle) and servers (Travis CI), SCM (puur GIT) 25 ● Configuring “Monorepo members” ● Managing “ownership” of the code ● Notifying code owners about stagnated dependencies ● Interested in scanning your code?