Better Builds : Faster Feedback


What we will talk about

Continuous Integration concepts across different technologies

Identifying feedback loops in CI

Parallelizing builds

CI Tools

CruiseControl - Java, .NET, ruby

Hudson - was open source, free to use - now Oracle

Jenkins - fork of Hudson - free


Someone somewhere broke my code ... maybe

Large scale integration

Different teams on different development cycle

Failing builds because other teams are not testing - yet

Delivery rush causes everyone to ignore other builds

Selenium builds took hours so were ignored

Continuous Integration takes too long

Tests are flaky

Too many things printed on the report

Delivery pressure is a distraction to quality

Retail Store

Run Unit and Functional CI as basic build

Make smoke tests as part of the basic build

Distribute responsibility to the integrating parties

Contextual selenium tests

Group acceptance test by area

Integration points are identified by selenium tags

Long running tests are run once a day



Better visibility of builds

Confidence to check-in code

Reliable Delivery

Lots of apps ... rapid delivery cycle

Continuous Integration for a datacenter

Inventory management, Configuration Management, Network Management, etc.

Many small applications => Application suite

Reduce cycle time of provisioning servers

In the beginning there were 28 apps and 37 builds(including integration builds)

Usually the team worked on 1-2 related apps at a time.

Lacked awareness of complete application

Team did not know what is broken


Feedback helped the key stake holders

Forced redesign - balance maintenance with velocity

Dependent applications were merged

Retired old applications

Complex legacy code ... 72 hours of deployment

Large Scale, Legacy, Mission Critical .NET application

Low coverage test suite

No build etiquette

Need to build new features rapidly


Building the build pipeline

Initial build time was 2 mins

As the coverage started increasing the build time started growing

Establish a work etiquette for builds and continuous integration.

Canary in the coalmine


Time to add a smoke test suite

Time to add an acceptance test suite

Time to split test suite by responsibility and application area


Delivery every month

Deployment during the day - Non-event

Multiple streams of development

Tests take too long to run

Making builds efficient

Parallelize builds

Spork, Parallel Tests, Selenium Grid

Go, Jenkins Agents

Cloud for testing

Amazon cloud EC2 is cost effective for short term usage

Don't ignore the learning curve

Security restrictions make it hard to deploy

Data movement can be very expensive

Lessons learnt

Continuous Integration concepts translate across different technologies

Identifying feedback loops in CI that fit the context leads to faster corrective action

Resource management is not trivial

Thank you