extending continuous integration
DESCRIPTION
How to automate a release tool chainTRANSCRIPT
![Page 1: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/1.jpg)
Extending Continuous Integration
![Page 2: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/2.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/3.jpg)
What’s the point of Continuous Integration?
![Page 4: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/4.jpg)
•Pay now to insure against defects
•Pay less to deploy to production
•Release whenever you want
![Page 5: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/5.jpg)
What is Continuous Integration?
![Page 6: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/6.jpg)
![Page 7: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/7.jpg)
![Page 8: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/8.jpg)
![Page 9: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/9.jpg)
•Unit test
•Functional tests
System run in test harness
![Page 10: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/10.jpg)
Result:
![Page 11: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/11.jpg)
Every check in is is now tested
![Page 12: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/12.jpg)
![Page 13: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/13.jpg)
Will this find all our defects?
![Page 14: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/14.jpg)
No!
![Page 15: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/15.jpg)
• Limited to our test harness
• Limited to our imagination
• And then there’s performance
![Page 16: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/16.jpg)
So what should we do?
![Page 17: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/17.jpg)
(Hint: CI is about paying now to avoid paying later)
![Page 18: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/18.jpg)
Pay more now!
![Page 19: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/19.jpg)
Our approach: Automated system test
![Page 20: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/20.jpg)
•Realistic setup
•Realistic load
•Realistic variation
![Page 21: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/21.jpg)
![Page 22: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/22.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/23.jpg)
”Did you meet any problems?”
![Page 24: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/24.jpg)
No
![Page 25: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/25.jpg)
No,Only challenges!
![Page 26: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/26.jpg)
The hard bits
1.Installation
2.Integration
3.Simulation
4.Verification
![Page 27: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/27.jpg)
Installation
![Page 28: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/28.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/29.jpg)
(Side effects)
•Easy installation
•Simpler design
•Simpler architecture
![Page 30: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/30.jpg)
Integration
![Page 31: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/31.jpg)
IntegrationDealing with dependencies
![Page 32: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/32.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/33.jpg)
Simulation
![Page 34: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/34.jpg)
SimulationPut realistic load on the system
![Page 35: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/35.jpg)
SimulationDepends on what you system does
![Page 36: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/36.jpg)
How to simulate production
• In our case: Files
• Crawler (Dyrkorn & Watne)
• Load generator (D&W)
• Record HTTP requests
![Page 37: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/37.jpg)
Verification
![Page 38: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/38.jpg)
VerificationFinding out if it worked
![Page 39: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/39.jpg)
How to verify results
• Compare with production
• Verify integrity
• Check logs
![Page 40: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/40.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/41.jpg)
![Page 42: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/42.jpg)
Date
![Page 43: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/43.jpg)
Number of files
![Page 44: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/44.jpg)
Okay
![Page 45: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/45.jpg)
Missing
![Page 46: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/46.jpg)
Extra
![Page 47: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/47.jpg)
ExtraMismatched
![Page 48: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/48.jpg)
ExtraExtraExtraKnown deviations
![Page 49: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/49.jpg)
Consistency checks
SQL expressions that pick out things that are weird
![Page 50: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/50.jpg)
Logging
It matters!
Error logs should be empty if everything is okay
![Page 51: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/51.jpg)
Result:
![Page 52: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/52.jpg)
Every build is now system tested
![Page 53: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/53.jpg)
![Page 54: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/54.jpg)
Will this find all our defects?
![Page 55: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/55.jpg)
No!
![Page 56: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/56.jpg)
• Limited integration
• Limited stability
![Page 57: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/57.jpg)
No!Automated staging
![Page 58: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/58.jpg)
No!Automated staging
![Page 59: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/59.jpg)
Automated staging
• ”Next” version
• Lock-step with production
• Promote after a week
• Monitor 9:00-16:00
![Page 60: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/60.jpg)
![Page 61: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/61.jpg)
![Page 62: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/62.jpg)
Only when you can think as an operator, can you master your system
![Page 63: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/63.jpg)
Result:
![Page 64: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/64.jpg)
Every release is hardened
![Page 65: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/65.jpg)
![Page 66: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/66.jpg)
Will this find all our defects?
![Page 67: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/67.jpg)
No!
![Page 68: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/68.jpg)
• Wrong requirements
• Poor solutions
• New user behavior exposes bugs
• Bugs we didn’t care enough about
![Page 69: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/69.jpg)
The goal:Release after every iteration
![Page 70: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/70.jpg)
![Page 71: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/71.jpg)
The sad reality:Pilot release after every
iteration
![Page 72: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/72.jpg)
Pilotproduction
![Page 73: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/73.jpg)
Why releases every iteration?
![Page 74: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/74.jpg)
• Find more bugs
• Try the easy solution first
• Find new requirement faster
Exploit opportunity
![Page 75: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/75.jpg)
Result:
![Page 76: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/76.jpg)
Compiler Unit test Systemtest Staging Prod
Defect cost
RealismFind all the bugs cheaply!
![Page 77: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/77.jpg)
Make sure it always works
![Page 78: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/78.jpg)
Pay more now to pay less later
![Page 79: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/79.jpg)
The goal:Release after every iteration
![Page 80: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/80.jpg)
(And throw away the bugtracker)
![Page 81: Extending Continuous Integration](https://reader033.vdocument.in/reader033/viewer/2022061206/5481d3d4b47959ce0c8b4605/html5/thumbnails/81.jpg)
Thank you!