> For the complete documentation index, see [llms.txt](https://ricardomol.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ricardomol.gitbook.io/notes/devops/ci.md).

# CI

## Continuous Integration

**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.

### Benefits

* No more long and tense integrations
* **Increase visibility** enabling greater communication
* Catch issues early
* Less time debugging and more time adding features
* Build a solid foundation
* Stop waiting to find out if your code’s going to work
* **Reduce integration problems**&#x20;

### 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 version
* Everyone can see what’s happening&#x20;
* **Automate deployment**<br>

### 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 artifacts 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 fixes the issue at the earliest opportunity
* Continue to continually integrate and test throughout the project<br>

#### 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

## Tools

### Jenkins

### Travis

### Gitlab CI
