¿Qué es un servidor de CI?

La integración continua (CI) es una práctica de DevOps diseñada para evitar los problemas que surgen al integrar los cambios de forma tardía: conflictos al combinar y errores de compilación, seguidos de innumerables errores y de la constatación de que su software no hace realmente lo que sus usuarios necesitan.

Con la integración continua, puede confirmar, compilar y testear los cambios de código de todos los participantes sobre la marcha. Integrar con frecuencia a lo largo de un proyecto significa que se pueden minimizar los conflictos, comprobar cómo interactúan los cambios de cada uno y abordar cualquier error antes de que arraigue y se convierta en la base de otras funcionalidades.

CI forms the first half of a continuous integration and delivery/deployment (CI/CD) pipeline – the ongoing process of committing, building, testing, staging and releasing each change, which delivers feedback at every stage and enables you to constantly iterate and improve.

La implementación de CI/CD requiere cambios culturales que permitan la colaboración entre las diferentes funciones, la adopción de nuevos procesos y flujos de trabajo, y herramientas para automatizar los pasos involucrados y permitir un proceso eficiente.

Un servidor de CI (o servidor de compilación) desempeña un papel clave en la implementación y gestión del proceso completo. Hace las funciones del pegamento que une todas las etapas del proceso aplicando su lógica empresarial para coordinar las tareas automatizadas y cotejar y publicar el feedback. En este artículo, veremos con más detalle lo que hace un servidor CI y cómo puede ayudarle a sacar el máximo provecho de la CI/CD.

Integración con el control de fuentes

At the start of any CI/CD pipeline is an integration with your version or source control system.

La implementación básica consiste en configurar el servidor de CI/CD para que escuche las confirmaciones en la rama maestra y desencadene el proceso cuando se realice un cambio.

Aunque esto garantiza que cada confirmación se verifique y testee, deja un amplio margen para que los individuos confirmen algo que estropee la compilación, lo que hace que el proceso se detenga e impida que se verifiquen otros cambios hasta que el código erróneo sea retirado o corregido.

Configurar el servidor de CI para que compile y pruebe los cambios antes de confirmarlos ayuda a evitar este tipo de problemas y crea un bucle de feeback adicional para cada desarrollador.

Es importante destacar que el servidor de compilación desempeña el papel de facilitador y de ejecutor: se encarga de ejecutar la compilación y las pruebas en una máquina remota y devuelve los resultados a la persona, pero también hace que ese proceso sea una condición para confirmar al maestro o con una rama de características.

Otro paso que puede considerar es la integración de su servidor de CI con su herramienta de revisión de código, de modo que cada confirmación debe superar la revisión de código antes de ser confirmada, pero sólo después de haber sido compilada y testeada con éxito.

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.

Gestión de las compilaciones

Cuando se trata de las fases de compilación y prueba de un proceso de CI/CD, su servidor de CI es el cerebro de la operación, puesto que coordina las tareas y asigna trabajos a los agentes de compilación basándose en varios criterios.

Sus agentes de compilación, sin embargo, hacen el trabajo pesado de ejecutar las compilaciones y las pruebas de acuerdo con las instrucciones recibidas desde el servidor de CI.

Es una buena práctica mantener el servidor de compilación separado de los agentes de compilación en los que se ejecutan las compilaciones y las pruebas, al menos en una configuración de producción, para evitar la contención de recursos y los problemas de rendimiento.

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, es posible que desee ejecutar ciertas pruebas en las confirmaciones de la rama maestra, pero no cuando se ejecuta una compilación previa a la confirmación en una rama de desarrollo, o es posible que desee controlar cuántas compilaciones pueden llamar a una base de datos de prueba al mismo tiempo.

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 está trabajando en una base de código enorme con pruebas que se cuentan por cientos de miles y la única opción práctica es paralelizar. In the latter case, setting up a composite build will aggregate the results so you can treat the tasks as a single build step.

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.

Definición de fallos

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.

Your CI server should allow you to configure various failure conditions, which it will then apply and use to determine the status of a particular step and whether to proceed to the next stage of the pipeline.

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 otros tipos de fallos basados en 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 sirven como aviso útil de que 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.

Permitir la entrega continua

Aunque el nombre de "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 más niveles de prueba, seguidos de la puesta en escena para que los interesados puedan probarlo y, a continuación, si todo parece correcto, lanzarlo al mercado.

As well as providing an artifact repository to store the outputs from each build so you can deploy them as needed, a CI/CD server can also store and manage parameters for each environment in your pipeline. A continuación, puede especificar si sus scripts de implementación se desencadenan automáticamente en función del resultado de la etapa anterior.

Seguimiento del progreso

Proporcionar un feedback rápido de cada etapa es un elemento clave de un proceso de CI/CD.

Un servidor de compilación puede proporcionar información sobre los trabajos en cola, informes en tiempo real sobre las compilaciones y las pruebas mientras están en curso, y el estado de los pasos de compilación completados.

Al habilitar las notificaciones, puede asegurarse de que usted y su equipo estén al tanto de cualquier problema tan pronto como surja, mientras que la integración con las herramientas de seguimiento de errores significa que puede ver los detalles de las correcciones que se incluyeron en una confirmación y profundizar rápidamente en la causa de un fallo. Los datos históricos pueden proporcionar información útil para mejorar su proceso, así como para definir las condiciones como parte de la lógica de dicho proceso.

Conclusión

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. Have a look at our Guide to CI/CD tools for tips on how to choose the right CI server for your organization.