large scale continuous integration. made by: erik romson zenior

73
Large Scale Continuous Integration

Upload: ashton-mcmahon

Post on 26-Mar-2015

228 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Large Scale Continuous Integration

Page 2: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Made by:Erik RomsonZenior

Page 3: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Presented by:Johannes BrodwallLead Software ArchitectBBS

Page 4: Large Scale Continuous Integration. Made by: Erik Romson Zenior
Page 5: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(1)

Page 6: Large Scale Continuous Integration. Made by: Erik Romson Zenior

“Wait a minute…”

Page 7: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Architect?

Page 8: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Reuse and cooperation

«delsystem»Delsystem1

«delsystem»Delsystem2

«delsystem»Delsystem3

«delsystem»Delsystem4

«delsystem»Delsystem5

Page 9: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Release strategy (one code line)

Development

When the code is stable, a branch is made

Trunk

Test Production

Development Test Production

Rel. 1.0.0 Rel. 1.0.1 Rel. 1.0.2 Rel. 1.0.3Rel. 1.0.4

Rel. 2.0.1

Ends when the new version goes into production

Page 10: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Principle: Everyone should be on one build server

Page 11: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(2)

Page 12: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Consequences

Page 13: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Size

Page 14: Large Scale Continuous Integration. Made by: Erik Romson Zenior

0

50

100

150

200

250

300

350

400

450

500

Novem

ber

Desem

ber

Janu

ar

Febr

uar

Mar

sApr

il

Module count

KLOC (estimate)

Developers(estimate)

Page 15: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Build time

Page 16: Large Scale Continuous Integration. Made by: Erik Romson Zenior

0

5

10

15

20

25

30

35

Novem

ber

Desem

ber

Janu

ar

Febr

uar

Mar

sApr

il

MinimumTypiskMaksimum

Page 17: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Error notification is delayed

TrunkCheckinCheckin CheckinCheckinCheckinCheckinCheckinCheckin

Skyldig

CheckinCheckinCheckinCheckin

Ändringar inkl. fel

Brutet byggBad checkin Buildstarts

Build breaks

Page 18: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Many developers

CruiseControlContinuous

BuildCVS

checks incode

all changes

checks incode

checks incode

checks incode

checks incode

Page 19: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Whodoneit?10 suspects

TrunkCheckinCheckin CheckinCheckinCheckinCheckinCheckinCheckin

Skyldig

CheckinCheckinCheckinCheckin

Ändringar inkl. fel

Brutet byggBad checkin Buildstarts

Build breaks

Page 20: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(3)

Page 21: Large Scale Continuous Integration. Made by: Erik Romson Zenior

How does it look?

Page 22: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(disclaimer)

Page 23: Large Scale Continuous Integration. Made by: Erik Romson Zenior

20:04 4,09m

Page 24: Large Scale Continuous Integration. Made by: Erik Romson Zenior

20:15 6,15m

Page 25: Large Scale Continuous Integration. Made by: Erik Romson Zenior

20:24 7,29m

Page 26: Large Scale Continuous Integration. Made by: Erik Romson Zenior

20:35 8,37m

Page 27: Large Scale Continuous Integration. Made by: Erik Romson Zenior
Page 28: Large Scale Continuous Integration. Made by: Erik Romson Zenior

21:28 11,36m

Page 29: Large Scale Continuous Integration. Made by: Erik Romson Zenior

21:53 10,41m

Page 30: Large Scale Continuous Integration. Made by: Erik Romson Zenior

22:12 12,05m

Page 31: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(4)

Page 32: Large Scale Continuous Integration. Made by: Erik Romson Zenior

How does it work?

Page 33: Large Scale Continuous Integration. Made by: Erik Romson Zenior

CruiseControlContinuous

Build

CruiseControlIntegration

Build

CruiseControlDaily Build

CVS

checks incode

all changes

Uses compileand tested code

Triggers build

Installscompiled andtested code

Repository

Update tested and compiled code from repository

daily

Test ServerDeploys

applicationand run tests

Page 34: Large Scale Continuous Integration. Made by: Erik Romson Zenior

foo depends onbar-1.1

Maven

Page 35: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Continuous build: Quickly after checkin

Page 36: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(should’ve caught all mistakes)

Page 37: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Integration build: In due time

Page 38: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(creates (and deploys some) EARs etc)

Page 39: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Daily build: Nightly

Page 40: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(generates project-sites)

Page 41: Large Scale Continuous Integration. Made by: Erik Romson Zenior

CruiseControlContinuous

Build

CruiseControlIntegration

Build

CruiseControlDaily Build

CVS

checks incode

all changes

Uses compileand tested code

Triggers build

Installscompiled andtested code

Repository

Update tested and compiled code from repository

daily

Test ServerDeploys

applicationand run tests

Page 42: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Technology: Maven + Cruisecontrol + massive amounts of custom code

Page 43: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Implementation:Cruisecontrol triggers a custom maven plugin which uses beanshell to access a custom Java API that executes Maven goals for modules

Page 44: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(I think)

Page 45: Large Scale Continuous Integration. Made by: Erik Romson Zenior
Page 46: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(5)

Page 47: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Lessons learned

Page 48: Large Scale Continuous Integration. Made by: Erik Romson Zenior

What is hard?

Page 49: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Somebody has to care about the build time!

Page 50: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Culture for following up when the build breaks

Page 51: Large Scale Continuous Integration. Made by: Erik Romson Zenior

This one is mine. I forgot to check in a file.

Page 52: Large Scale Continuous Integration. Made by: Erik Romson Zenior

But sometimes, things go wrong…

Page 53: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Anyone looking into this one?

Could xxx please look here ASAP!

He’s gone home I will check it out.

Page 54: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Notification mails must be easy to interpret

Page 55: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Many dependencies

Page 56: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Buildserver

CVS Server

Mailserver

Databas

Artifactrepository

Page 57: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Refactoring central modules is expensive

Page 58: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(but doable, even in a system with several 100 KLOC)

Page 59: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Don’t leave the build red while you fix your problems

Page 60: Large Scale Continuous Integration. Made by: Erik Romson Zenior

CVS update frequently!

Page 61: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Protect yourself with unit tests

Page 62: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(6)

Page 63: Large Scale Continuous Integration. Made by: Erik Romson Zenior

The road goes ever on

Page 64: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Domain Driven Design build server

Page 65: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Module

Dependency

BuildAttempt

ChangeSet

BuildStep

*parent

*dependent

1*

*

Page 66: Large Scale Continuous Integration. Made by: Erik Romson Zenior

(cruisecontrol = cron on steroids)

Page 67: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Smaller units of reporting

Page 68: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Concurrent build

Page 69: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Build farm

Page 70: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Buildconfiguration

BuildMaster

Build Worker

Build Worker

Build WorkerSource repository

Artifact repository

1. calculatechangeset

2. takework unit

3. get latest

4. publish artifact

Page 71: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Better visibility

Page 72: Large Scale Continuous Integration. Made by: Erik Romson Zenior
Page 73: Large Scale Continuous Integration. Made by: Erik Romson Zenior

Thank you for the attention

Johannes Brodwall<[email protected]>