I would like to view this page in
Un servidor de CI o «servidor de compilación» coordina todas las fases de un proceso de CI/CD, desde detectar cambios en el VCS hasta implementar nuevas compilaciones.
Usar un servidor de CI puede ayudarle a agilizar sus procesos de integración y entrega/implementación continuas (CI/CD). Un servidor de CI se encarga de supervisar el sistema de control de versiones (VCS), activar tareas automatizadas de compilación, prueba e implementación, cotejar los resultados e iniciar la siguiente fase del proceso.
Aunque es posible ejecutar procesos de CI/CD sin un servidor de compilación, muchos equipos de desarrollo optan por utilizar una herramienta de CI para coordinar el proceso y presentar los resultados de cada fase. En esta guía, veremos qué hace un servidor de CI y cómo puede ayudarle a sacar el máximo provecho de la CI/CD.
Un servidor de CI es el punto central de coordinación de todas las actividades de CI/CD. Usar un servidor de CI:
Además, usar un servidor de CI le ayudará a aprovechar las muchas ventajas de la CI/CD, como la información rápida sobre los cambios de código, la identificación temprana de errores o un lanzamiento más frecuente de las versiones.
Aunque el proceso exacto variará en función del equipo y los requisitos de la organización, un servidor de CI funciona de la siguiente manera:
Al principio de cualquier proceso de CI/CD, encontrará una integración con un sistema de control de versiones o de fuentes.
Normalmente, un servidor de CI está configurado para escuchar las confirmaciones en una rama concreta y desencadenar una nueva ejecución del proceso cada vez que se lleva a cabo un cambio. Esto permite garantizar que cada vez que un desarrollador comparte sus cambios, se compilan y se prueban para asegurar que la base de código en su conjunto sigue funcionando correctamente.
Algunos servidores de CI permiten ir un paso más allá y exigir a los desarrolladores que compilen y prueben los cambios de forma local antes de compartirlos en una rama de CI. Aunque esto no garantiza que la siguiente fase se lleve a cabo correctamente, sí que ayuda a reducir el número de compilaciones rotas y los retrasos que esto puede causar. Otra opción es integrar el servidor de CI con la herramienta de revisión de código, de modo que cada confirmación deba pasar una fase de revisión de código antes de poder compartirse.
La imposición de estas capas adicionales de lógica empresarial al principio del proceso ayuda a mantener el código base limpio y listo para su lanzamiento, al tiempo que minimiza las interrupciones y los retrasos en el proceso.
Cada vez que se detecta un cambio y se activa la ejecución de un proceso, el servidor de CI coordina las tareas de compilación y prueba. Normalmente, estas se asignan a máquinas de compilación específicas o «agentes». Sus agentes de compilación hacen el trabajo pesado de ejecutar las compilaciones y las pruebas de acuerdo con las instrucciones recibidas desde el servidor de CI.
Otra opción es ejecutar tareas de compilación y prueba en el propio servidor de CI, aunque esto puede provocar que se contengan los recursos y se reduzca el rendimiento en bases de código ocupadas.
Cuando se utiliza el servidor de CI para configurar la lógica de una etapa de su proceso, se puede especificar una serie de detalles y reglas. Por ejemplo, podría querer hacer lo siguiente:
Poder ejecutar ciertas tareas al mismo tiempo utilizando diferentes agentes de compilación puede hacer que su proceso sea más eficiente. Esto resulta útil si necesita ejecutar pruebas en diferentes sistemas operativos o si trabaja en una base de código muy grande con cientos de miles de pruebas, donde la única opción práctica es paralelizar. En este último caso, la configuración de una compilación compuesta agregará los resultados para que pueda tratar las tareas como una única fase de compilación.
Un servidor de compilación que se integre con la infraestructura alojada en la nube, como AWS, le permitirá disfrutar de recursos flexibles y escalables en los que ejecutar sus compilaciones y pruebas. Si sus necesidades de infraestructura son considerables, la compatibilidad con los agentes de compilación en contenedores y la integración con Kubernetes le permitirán gestionar sus recursos de compilación de manera eficiente, ya sea en la nube o localmente.
Una parte clave de su lógica empresarial consiste en definir lo que constituye un fallo en cada etapa de su proceso de CI/CD.
El servidor de CI debería permitirle configurar varias condiciones de fallo. A continuación, comprueba si estos criterios se han cumplido con el fin de determinar el estado de una fase concreta y decidir si se debe pasar a la siguiente fase del proceso.
Además de los fallos evidentes, como que una compilación devuelva un código de error o que las pruebas no se ejecuten, puede definir otras condiciones de fallo en función de los datos recogidos por su servidor de compilación.
Algunos ejemplos son la disminución de la cobertura de las pruebas en relación con la compilación anterior (lo que indica que no se han añadido pruebas para los últimos cambios de código) o el aumento del número de pruebas ignoradas en comparación con la última compilación satisfactoria.
Estas métricas también son un aviso útil cuando la calidad del código puede estar deteriorándose. Desencadenando un fallo por estas razones y limitando qué usuarios tienen permiso para anular estos fallos, puede favorecer el comportamiento que desea obtener.
Cuando un cambio tiene éxito, el servidor de CI almacena los artefactos del proceso de compilación. Estos pueden incluir binarios, instaladores, imágenes de contenedores y cualquier otro recurso necesario para implementar el software.
A continuación, puede implementar los mismos artefactos en entornos de preproducción para realizar más pruebas antes de implementarlos finalmente en producción. Esto garantiza que se pruebe el mismo resultado en todas las fases y es mucho más fiable que reconstruir a partir del código fuente antes de cada implementación. En particular, evita el riesgo de omitir dependencias e introducir otras incoherencias.
Tener un repositorio de artefactos de compilaciones realizadas con éxito también es útil cuando se necesita volver a una versión anterior del software o se intenta identificar cuándo se produjo un problema concreto.
Aunque el término «servidor de CI» sugiere que su uso se limita a la integración continua, la mayoría de los servidores de CI también ofrecen asistencia para la entrega y la implementación continuas.
Una vez creados los artefactos de compilación y ejecutado un conjunto inicial de pruebas durante la fase de integración continua, el siguiente paso es implantar esos artefactos en entornos de control de calidad para llevar a cabo más pruebas. A esto le sigue el almacenamiento provisional, que ofrece a las partes interesadas la oportunidad de probar la nueva compilación. A continuación, si todo funciona correctamente, se procede a la publicación.
Puede utilizar un servidor de CI para almacenar y gestionar parámetros para cada entorno del proceso. Esto le permite especificar si los scripts de implementación se desencadenan automáticamente en función del resultado de la fase anterior.
Una función importante de un servidor de CI es ofrecer comentarios rápidos sobre cada fase de la compilación y las pruebas. Los servidores de CI que se integran con el IDE o la plataforma de comunicaciones pueden enviarle una notificación cada vez que uno de sus cambios haya provocado un fallo en el proceso, sin necesidad de que supervise constantemente su progreso.
Los servidores de compilación también pueden:
Construir su propio servidor de CI puede parecer, a priori, una buena opción, ya que, al diseñar su propia solución, puede adaptarla a sus necesidades y evitar los costes de licencia.
Sin embargo, crear una herramienta personalizada es solo el principio del proceso. Una vez instalada, tendrá que invertir tiempo en mantenerla actualizada, lo que implica solucionar los errores que surjan y desarrollar nuevas funcionalidades a medida que cambien los requisitos.
También hay que tener en cuenta el esfuerzo que supone integrar un servidor de CI con la cadena de herramientas. Aunque su diseño inicial funcionará con el sistema de control de versiones, el sistema de seguimiento de incidencias, las herramientas de compilación y los marcos de trabajo de pruebas que utiliza actualmente, ¿qué ocurrirá cuando cambie a un nuevo producto o tecnología?
Si bien construir su propio servidor de CI le ofrece la flexibilidad de crear una herramienta adaptada a su caso de uso, el esfuerzo inicial y el mantenimiento continuo requieren un compromiso importante y a largo plazo.
Un servidor de integración continua desempeña un papel fundamental en la implementación de su proceso de CI/CD, coordinando y desencadenando los distintos pasos de su proceso, y cotejando y entregando datos de cada etapa. Eche un vistazo a nuestra Guía de herramientas de CI/CD para obtener consejos sobre cómo elegir el servidor de CI adecuado para su organización.
TeamCity es un servidor de CI que ofrece integraciones con los principales sistemas de control de versiones, como Git, Perforce, Mercurial o Subversion, así como con varios servicios de alojamiento. También encontrará compatibilidad con una amplia gama de herramientas de compilación y marcos de trabajo de pruebas, así como integraciones con IDE, sistemas de seguimiento de incidencias, plataformas de mensajería y gestores de contenedores.
Puede alojar su servidor de CI en las instalaciones o en el entorno en la nube que prefiera con TeamCity Professional o Enterprise, u optar por TeamCity Cloud para obtener una solución totalmente gestionada. Un conjunto flexible de activadores de proceso le permite configurar los procesos de CI/CD para que se adapten a sus necesidades, incluidas las confirmaciones comprobadas previamente, la compatibilidad con la rama de características y las compilaciones programadas. Una vez que haya configurado su lógica de proceso desde la interfaz de usuario, puede almacenar la configuración como código para obtener un proceso de CI/CD totalmente controlado por versiones.
La entrega continua o CD (Continuous Delivery) es la práctica de automatizar los pasos manuales que se requieren para compilar y lanzar software.
Al igual que las tabulaciones frente a los espacios, las estrategias de ramificación son uno de esos temas sensibles que desencadenan acalorados debates tanto online como offline.
¿Qué es exactamente un proceso de integración continua/entrega continua? ¿Y cómo se consigue uno? Descúbralo en este artículo.