SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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 MonolithicAll 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 SoftwareAll 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 20150529VMUG IT
 
Security of OpenDaylight platform
Security of OpenDaylight platformSecurity of OpenDaylight platform
Security of OpenDaylight platformOpenDaylight
 
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 wayEduard Moraru
 
Automated testing with Openshift
Automated testing with OpenshiftAutomated testing with Openshift
Automated testing with OpenshiftOleg 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 ContainerNETWAYS
 
Make sure your code works
Make sure your code worksMake sure your code works
Make sure your code worksHenrik Skupin
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation toolIoan Eugen Stan
 
The automated tests inside Openshift
The automated tests inside OpenshiftThe automated tests inside Openshift
The automated tests inside OpenshiftOleg Popov
 
XWiki's Development Process
XWiki's Development ProcessXWiki's Development Process
XWiki's Development ProcessEduard 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 NativeCodiLime
 
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
 

Was ist angesagt? (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...
 

Andere mochten auch

Why hardware accelerator matters
Why hardware accelerator mattersWhy hardware accelerator matters
Why hardware accelerator mattersLman Chu
 
200810 Communities&Conversations
200810 Communities&Conversations200810 Communities&Conversations
200810 Communities&ConversationsRob Inskeep
 
9 27-2012 -long
9 27-2012 -long9 27-2012 -long
9 27-2012 -longSky 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
 
Top 5 digital trends of 2016
Top 5 digital trends of 2016Top 5 digital trends of 2016
Top 5 digital trends of 2016Gianluca Girard
 
Responsive design in ten minutes
Responsive design in ten minutesResponsive design in ten minutes
Responsive design in ten minutesDotkumo
 
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 Arshadkaka 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 DevelopmentDarren 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
 
Xxxxxx karim a hamir 2015 resume
Xxxxxx karim a  hamir 2015 resumeXxxxxx karim a  hamir 2015 resume
Xxxxxx karim a hamir 2015 resumeKarim Hamir
 
Monster Loyalty presentation - annotated slides
Monster Loyalty presentation - annotated slidesMonster Loyalty presentation - annotated slides
Monster Loyalty presentation - annotated slidesJackie 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
 

Andere mochten auch (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...
 

Ähnlich wie 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 BlinkBruno Abinader
 
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 + CVMFSBruce 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 MongoDBMongoDB
 
software technology benchmarking
software  technology benchmarkingsoftware  technology benchmarking
software technology benchmarkingMallikarjuna 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.pdfDmitry Osipa
 
Git presentation
Git presentationGit presentation
Git presentationjordimash
 
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 PipelineGlobalLogic 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 OpenPOWERIndrajit 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 CoveritySamsung Open Source Group
 
Microservices Architecture and Containers.
Microservices Architecture and Containers.Microservices Architecture and Containers.
Microservices Architecture and Containers.imjacobclark
 
Angular2 - A story from the trenches
Angular2 - A story from the trenchesAngular2 - A story from the trenches
Angular2 - A story from the trenchesJohannes 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_MSLana 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZABSYZ Inc
 

Kürzlich hochgeladen (20)

2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
Salesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZSalesforce Implementation Services PPT By ABSYZ
Salesforce Implementation Services PPT By ABSYZ
 

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?