Continuous Integration

Eliminate blind spots so you can build and deliver software more rapidly.

Integrate at least daily

Continuous Integration (CI) is a development practice that requires developers to integrate code into a
shared repository several times a day. Each check-in is then verified by an automated build,
allowing teams to detect problems early.

By integrating regularly, you can detect errors quickly, and locate them more easily.

Solve problems quickly

Because you’re integrating so frequently, there is significantly less back-tracking to discover where
things went wrong, so you can spend more time building features.

Continuous Integration is cheap. Not continuously integrating is costly. If you don’t follow a continuous
approach, you’ll have longer periods between integrations. This makes it exponentially more difficult
to find and fix problems. Such integration problems can easily knock a project off-schedule,
or cause it to fail altogether.

Continuous Integration brings multiple benefits to your organization:

Say goodbye to long and tense integrations

Increase visibility which enables greater communication

Catch issues fast and nip them in the bud

Spend less time debugging and more time adding features

Proceed in the confidence you’re building on a solid foundation

Stop waiting to find out if your code’s going to work

Reduce integration problems allowing you to deliver software more rapidly

“Continuous Integration doesn’t get rid of bugs, but it does make them
dramatically easier to find and remove.”

- Martin Fowler, Chief Scientist, ThoughtWorks

More than a process

Continuous Integration is backed by several important principles and practices.

The Practices

Maintain a single source repository

Automate the build

Make your build self-testing

Every commit should build on an integration machine

Keep the build fast

Test in a clone of the production environment

Make it easy for anyone to get the latest executable

Everyone can see what’s happening

Automate deployment

How to do it

Developers check out code into their private workspaces.

When done, commit the changes to the repository.

The CI server monitors the repository and checks out changes when they occur.

The CI server builds the system and runs unit and integration tests.

The CI server releases deployable artefacts for testing.

The CI server assigns a build label to the version of the code it just built.

The CI server informs the team of the successful build.

If the build or tests fail, the CI server alerts the team.

The team fix the issue at the earliest opportunity.

Continue to continually integrate and test throughout the project.

Team Responsibilities

Check in frequently

Don’t check in broken code

Don’t check in untested code

Don’t check in when the build is broken

Don’t go home after checking in until the system builds

Many teams develop rituals around these policies, meaning the teams effectively manage themselves,
removing the need to enforce policies from on high.

Continuous Deployment

Continuous Deployment is closely related to Continuous Integration and refers to the release into
production of software that passes the automated tests.

Essentially, “it is the practice of releasing every good build to users,” explains Jez Humble,
author of Continuous Delivery.

By adopting both Continuous Integration and Continuous Deployment, you not only reduce risks and
catch bugs quickly, but also move rapidly to working software.

With low-risk releases, you can quickly adapt to business requirements and user needs.
This allows for greater collaboration between ops and delivery, fuelling real change in your organisation,
and turning your release process into a business advantage.

After many years of working with customers to construct deployment pipelines, ThoughtWorks developed Go as the first tool designed specifically for the practice of continuous delivery.
It automates and streamlines the build-test-release cycle for worry-free, continuous delivery of your product. Go is now open source and free.

Snap lets teams get started with their continuous delivery journey in minutes. Powerful deployment pipelines wrap familiar continuous integration stages to provide fast feedback and control over the deployment process.