+ All Categories
Home > Documents > Large Scale Continuous Integration. Made by: Erik Romson Zenior.

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

Date post: 26-Mar-2015
Category:
Upload: ashton-mcmahon
View: 220 times
Download: 3 times
Share this document with a friend
Popular Tags:
73
Large Scale Continuous Integration
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]>


Recommended