# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ricardomol.gitbook.io/notes/devops/ci.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
