extending continuous integration

81
Extending Continuous Integration

Upload: johannes-brodwall

Post on 05-Dec-2014

1.365 views

Category:

Technology


1 download

DESCRIPTION

How to automate a release tool chain

TRANSCRIPT

Page 1: Extending Continuous Integration

Extending Continuous Integration

Page 2: Extending Continuous Integration

About the speaker

• Johannes Brodwall

• Lame duck Lead software architect at BBS

• Organizer Oslo XP meetup

• Organizer Smidig 2008

• Blog: http://brodwall.com/johannes/blog

.meetup.com/13

Page 3: Extending Continuous Integration

What’s the point of Continuous Integration?

Page 4: Extending Continuous Integration

•Pay now to insure against defects

•Pay less to deploy to production

•Release whenever you want

Page 5: Extending Continuous Integration

What is Continuous Integration?

Page 6: Extending Continuous Integration
Page 7: Extending Continuous Integration
Page 8: Extending Continuous Integration
Page 9: Extending Continuous Integration

•Unit test

•Functional tests

System run in test harness

Page 10: Extending Continuous Integration

Result:

Page 11: Extending Continuous Integration

Every check in is is now tested

Page 12: Extending Continuous Integration
Page 13: Extending Continuous Integration

Will this find all our defects?

Page 14: Extending Continuous Integration

No!

Page 15: Extending Continuous Integration

• Limited to our test harness

• Limited to our imagination

• And then there’s performance

Page 16: Extending Continuous Integration

So what should we do?

Page 17: Extending Continuous Integration

(Hint: CI is about paying now to avoid paying later)

Page 18: Extending Continuous Integration

Pay more now!

Page 19: Extending Continuous Integration

Our approach: Automated system test

Page 20: Extending Continuous Integration

•Realistic setup

•Realistic load

•Realistic variation

Page 21: Extending Continuous Integration
Page 22: Extending Continuous Integration

How to automate system tests

1.Automated build (and test)

2.Scrap old data

3.Install latest snapshot

4.Download production data

5.Replay production data

6.Verify result

7.Send results and logs via email

Page 23: Extending Continuous Integration

”Did you meet any problems?”

Page 24: Extending Continuous Integration

No

Page 25: Extending Continuous Integration

No,Only challenges!

Page 26: Extending Continuous Integration

The hard bits

1.Installation

2.Integration

3.Simulation

4.Verification

Page 27: Extending Continuous Integration

Installation

Page 28: Extending Continuous Integration

How to automate installation

1.Easy, scripted, always working install

2.Simplify(Replace WebSphere with Jetty)

(Combine components)

3.Reduce integration

4.All nodes look the same

Page 29: Extending Continuous Integration

(Side effects)

•Easy installation

•Simpler design

•Simpler architecture

Page 30: Extending Continuous Integration

Integration

Page 31: Extending Continuous Integration

IntegrationDealing with dependencies

Page 32: Extending Continuous Integration

Dealing with integration

1.Don’t integrate - Do it yourself!

2.Simulate other system1.Fake responses

2.Keep canned data (data centric)

3.Integrate with test version

Page 33: Extending Continuous Integration

Simulation

Page 34: Extending Continuous Integration

SimulationPut realistic load on the system

Page 35: Extending Continuous Integration

SimulationDepends on what you system does

Page 36: Extending Continuous Integration

How to simulate production

• In our case: Files

• Crawler (Dyrkorn & Watne)

• Load generator (D&W)

• Record HTTP requests

Page 37: Extending Continuous Integration

Verification

Page 38: Extending Continuous Integration

VerificationFinding out if it worked

Page 39: Extending Continuous Integration

How to verify results

• Compare with production

• Verify integrity

• Check logs

Page 40: Extending Continuous Integration

Comparing

1.Store test result in database

2.Store production result in database

3.Full outer join on key fields

4.Find missing or mismatched status

5.Filter out know deviations

Page 41: Extending Continuous Integration
Page 42: Extending Continuous Integration

Date

Page 43: Extending Continuous Integration

Number of files

Page 44: Extending Continuous Integration

Okay

Page 45: Extending Continuous Integration

Missing

Page 46: Extending Continuous Integration

Extra

Page 47: Extending Continuous Integration

ExtraMismatched

Page 48: Extending Continuous Integration

ExtraExtraExtraKnown deviations

Page 49: Extending Continuous Integration

Consistency checks

SQL expressions that pick out things that are weird

Page 50: Extending Continuous Integration

Logging

It matters!

Error logs should be empty if everything is okay

Page 51: Extending Continuous Integration

Result:

Page 52: Extending Continuous Integration

Every build is now system tested

Page 53: Extending Continuous Integration
Page 54: Extending Continuous Integration

Will this find all our defects?

Page 55: Extending Continuous Integration

No!

Page 56: Extending Continuous Integration

• Limited integration

• Limited stability

Page 57: Extending Continuous Integration

No!Automated staging

Page 58: Extending Continuous Integration

No!Automated staging

Page 59: Extending Continuous Integration

Automated staging

• ”Next” version

• Lock-step with production

• Promote after a week

• Monitor 9:00-16:00

Page 60: Extending Continuous Integration
Page 61: Extending Continuous Integration
Page 62: Extending Continuous Integration

Only when you can think as an operator, can you master your system

Page 63: Extending Continuous Integration

Result:

Page 64: Extending Continuous Integration

Every release is hardened

Page 65: Extending Continuous Integration
Page 66: Extending Continuous Integration

Will this find all our defects?

Page 67: Extending Continuous Integration

No!

Page 68: Extending Continuous Integration

• Wrong requirements

• Poor solutions

• New user behavior exposes bugs

• Bugs we didn’t care enough about

Page 69: Extending Continuous Integration

The goal:Release after every iteration

Page 70: Extending Continuous Integration
Page 71: Extending Continuous Integration

The sad reality:Pilot release after every

iteration

Page 72: Extending Continuous Integration

Pilotproduction

Page 73: Extending Continuous Integration

Why releases every iteration?

Page 74: Extending Continuous Integration

• Find more bugs

• Try the easy solution first

• Find new requirement faster

Exploit opportunity

Page 75: Extending Continuous Integration

Result:

Page 76: Extending Continuous Integration

Compiler Unit test Systemtest Staging Prod

Defect cost

RealismFind all the bugs cheaply!

Page 77: Extending Continuous Integration

Make sure it always works

Page 78: Extending Continuous Integration

Pay more now to pay less later

Page 79: Extending Continuous Integration

The goal:Release after every iteration

Page 80: Extending Continuous Integration

(And throw away the bugtracker)

Page 81: Extending Continuous Integration

Thank you!