Large Scale Continuous Integration
Made by: Erik Romson Zenior
Presented by: Johannes Brodwall Lead Software Architect BBS
(1)
Wait a minute…
Architect?
Reuse and cooperation
Release strategy (one code line)
Principle: Everyone should be on one build server
(2)
Consequences
Size
Build time
Error notification is delayed Bad checkin Build starts Build breaks
Many developers
Whodoneit? 10 suspects Bad checkin Build starts Build breaks
(3)
How does it look?
(disclaimer)
20:04 4,09m
20:15 6,15m
20:24 7,29m
20:35 8,37m
21:28 11,36m
21:53 10,41m
22:12 12,05m
(4)
How does it work?
foo depends on bar-1.1 Maven
Continuous build: Quickly after checkin
(shouldve caught all mistakes)
Integration build: In due time
(creates (and deploys some) EARs etc)
Daily build: Nightly
(generates project-sites)
Technology: Maven + Cruisecontrol + massive amounts of custom code
Implementation: Cruisecontrol triggers a custom maven plugin which uses beanshell to access a custom Java API that executes Maven goals for modules
(I think)
(5)
Lessons learned
What is hard?
Somebody has to care about the build time!
Culture for following up when the build breaks
This one is mine. I forgot to check in a file.
But sometimes, things go wrong…
Anyone looking into this one? Could xxx please look here ASAP! Hes gone home I will check it out.
Notification mails must be easy to interpret
Many dependencies
Refactoring central modules is expensive
(but doable, even in a system with several 100 KLOC)
Dont leave the build red while you fix your problems
CVS update frequently!
Protect yourself with unit tests
(6)
The road goes ever on
Domain Driven Design build server
(cruisecontrol = cron on steroids)
Smaller units of reporting
Concurrent build
Build farm
Better visibility
Thank you for the attention Johannes Brodwall