---
# System prepended metadata

title: G## Integración Contínua de manera correcta

---

# G## Integración Contínua de manera correcta

## Tabla de contenidos

  * [Objetivos](#objetivos)
  * [¿Qué es integración contínua?](#-qu--es-integraci-n-cont-nua-)
    + [Definición](#definici-n)
  * [¿Qué **NO** es CI?](#-qu----no---es-ci-)
  * [Buenas prácticas de CI](#buenas-pr-cticas-de-ci)
  * [Recursos extras](#recursos-extras)


## Objetivos

* Guiar a los ingenieros de Solify a integrar sus productos de trabajo con la línea base (main, master, trunk, etc.) de la manera correcta.

## ¿Qué es integración contínua?

### Definición

Una de las definiciones más completas es [la de Atlassian](https://www.atlassian.com/continuous-delivery/continuous-integration#:~:text=Continuous%20integration%20(CI)%20is%20the,builds%20and%20tests%20then%20run.):

> Integración Contínua (CI) es la práctica de automatizar la **integración** de cambios al código de múltiples contribuidores en un solo proyecto de software.

Podemos complementar con que CI es una de las buenas prácticas de [DevOps](https://www.atlassian.com/devops), ya que permite a los desarrolladores mezclar sus cambios a un repositorio central en donde las construcciones (builds) y pruebas (tests) son ejecutadas.

## ¿Qué **NO** es CI?

Existen muchos modelos de ramas para los sistemas de versiones (ejemplo: Git) que recomiendan la implementación de [_Feature Branches_](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow) o _Ramas de Características_ en las que se implementan _features_ o _características_ completas del sistema. En este modelo, el tiempo de vida de una rama (código separado de la "realidad") va desde un par de días hasta semanas o meses. Este extenso tiempo de vida impide que se integren los cambios a la base de código (code base) de manera contínua. Por lo tanto, Feature Branches **no son** Integración Contínua.

## Buenas prácticas de CI

Para verdaderamente realizar entrega contínua, las ramas en nuestros repositorios deben tener una vida de máximo un día, y realizar merges (integraciones a la lína base, main, master, trunk, etc.) periódicamente. 

Una de las preocupaciones más usuales con la verdadera integración contínua es tener características y funcionalidades incompletas en el producto en producción, pero esto puede ser resuelto de muchas maneras. Una de estas soluciones (además de las más sencillas) es implementar el uso de [_Feature Toggles_](https://martinfowler.com/articles/feature-toggles.html) o _Feature Flags_. Si hacemos integración de una funcionalidad parcial, podemos ocultarla de manera muy sencilla con una simple condición, y así se evita el mal funcionamento al usuario final de nuestros sistemas. 

## Recursos extras

[Video - Continuous Integration vs Feature Branch Workflow • Dave Farley • GOTO 2021](https://www.youtube.com/watch?v=pXovk-5J0Lg)
