# Continuous Integration

*Definition:* \
&#x20;*A development practice that requires developers to integrate code into a shared repository several times a day.* \
&#x20;*Each check-in is then verified by an automated build, allowing teams to detect problems early. (*<https://www.thoughtworks.com/continuous-integration>*)*

## Traditional ("waterfall") SDLC

Requirements --> Build --> Deploy --> Maintain --> Decommission

* Building occurs after requirements are complete
* Traditionally no transparency during development&#x20;
* Business requirements / needs can change before delivery of product.

## Agile SDLC

Gather enough requirements to start development --> Iteration 1 --> Feedback --> Iteration 2 -- Feedback -- etc.

* Goal is to deliver usable piece of project&#x20;
* Frequent deployments&#x20;
* User feed-back driven&#x20;
* Requirements placed into prioritized 'backlog'&#x20;

## About CI

* By-product of the XP (Extreme Programming) methodology and TDD (Test Driven Development)
* Aimed at preventing 'Integration Hell' at release time
* Automated Testing&#x20;
* Testing performed on 'Clones of Production'
* Developers only need to commit and push code -- automated build and deploy&#x20;
