SCM

Planificando la estrategia de SCM

11 mayo, 2020

Las empresas que están planeando o desarrollando un producto de software nos consultan frecuentemente sobre los problemas que se encuentran cuando tratan de definir un buen proceso de producción, lograr un buen trabajo en equipo y contar con la seguridad necesaria para el manejo adecuado del código fuente.
Durante nuestros años de experiencia, desarrollamos una sólida visión sobre las herramientas más importantes que se deben utilizar si se desea producir software de forma controlada.
Estas herramientas incentivan la implementación de una estrategia de Gestión de Configuración del Software (SCM) dentro de la organización. A su vez, esto tiene un gran impacto positivo en muchos aspectos, algunos técnicos, pero también en los funcionales y los orientados al proceso de desarrollo y producción.
Hoy, la mayoría de los ingenieros de software dan por sentado el uso de estas herramientas. Pero hay casos de empresas con pequeños equipos de desarrollo o con deficiencias organizacionales que necesitan ayuda para resolver estas cuestiones. Con esa intención, escribimos una descripción general de este tema.
La mayoría de los problemas importantes que pueden surgir se resuelven instalando, configurando y utilizando estas herramientas correctamente.
Un hecho clave es que estas herramientas son importantes independientemente del idioma o la plataforma que esté utilizando.

Primer paso: Resguardar el código fuente

Si ha invertido muchos recursos en desarrollar su producto y tiene algunos clientes que lo utilizan, el código fuente es la parte más importante de ese producto, por este motivo, el primer problema que se debe considerar es cómo almacenar de manera segura su código mientras ayuda a mejorar la forma en que se trabaja en equipo, sin conflictos.
La solución a esto es utilizar un software de control de versiones. Al principio, existían muchas opciones diferentes para elegir, pero en la actualidad casi todos usan Git. Esta es una de las herramientas más avanzadas para el manejo de código por equipos grandes y es fácil encontrar profesionales con experiencia en su uso.
Por supuesto, hay otros: SubVersionMercurialTeam Foundation ServerBazaaretc.

Segundo paso: ¿Qué pasa con los binarios?

Es casi imposible encontrar una organización que construya software sin un VCS, pero no se puede decir lo mismo sobre el manejo de los binarios o artefactos (Nota: en este artículo utilizamos la palabra artefacto de aquí en más para referirnos a los archivos binarios generados a partir del código fuente, como puede ser una librería o un paquete instalable de una aplicación) que se crean para distribuir su software. La mayoría de los desarrolladores ni siquiera saben que hay herramientas que pueden usarse para esto. Y, ¿por qué deberían considerar usar estas herramientas?
Para responder a esto, primero debemos pensar en cuáles son los pasos involucrados en la escritura de software:
  1. Comenzamos escribiendo el código. Puede usar una herramienta mínima para hacer esto, como una aplicación de bloc de notas simple, o puede usar un IDE pesado con técnicas modernas de generación de código, pero casi siempre termina en toneladas de archivos de texto.
  2. Luego, dependiendo de su plataforma, es posible que necesite compilar el código en un formato binario o intermedio. Este proceso toma un código fuente como entrada y produce archivos binarios como salida. Es posible que este paso no sea necesario si está utilizando un lenguaje interpretado como Javascript o PHP. Pero incluso en esos casos, generalmente hay un proceso de transpilación que crea nuevas formas de código optimizadas para ejecutarse en diferentes navegadores y entornos.
  3. A continuación, se testea la aplicación en su entorno local.
  4. Si todo está bien, está listo para la fase de implementación en producción. Esto implica tomar el paquete que probó localmente o en un entorno de prueba y colocarlo en el servidor que expondrá su aplicación.
Para estar completamente seguro de que no hay problemas con el artefacto generado, lo mejor es realizar siempre la compilación en un entorno limpio (esto lo explicaremos más adelante), y para evitar repetir este proceso innecesariamente, lo ideal es almacenarlo en un lugar seguro. Aquí es donde un repositorio de binarios muestra su fuerza. Esta herramienta almacenará los artefactos de manera organizada y confiable para que puedan descargarse cuando necesite instalarlos, pero también, por ejemplo, cuando necesite construir otro software basado en una librería.
Hay muchas opciones disponibles: NexusArtifactoryArchiva, etc.

Último Paso: Integración continua

Tener el código fuente y los artefactos producidos en su lugar es solo el comienzo. Pero automatizar la construcción de las aplicaciones y bibliotecas le dará muchas ventajas:
  • Tener un lugar limpio y centralizado donde se va a desarrollar el software. Por lo general, en muchas empresas, el desarrollador senior o el líder técnico es el que construye los entregables que se van a instalar en producción. Pero, ¿qué pasa si se le olvida algún trabajo en progreso o experimento, y luego esto se introduce accidentalmente y produce algún comportamiento no deseado en ambientes productivos?
  • El proceso de construcción se puede activar automáticamente ante cambios en el código. Esto puede ayudar a encontrar posibles problemas antes, reduciendo así el tiempo dedicado al seguimiento de ellos cuando se encuentran en producción y, por supuesto, finalmente produce resultados de mejor calidad.
  • Los scripts de construcción se pueden estandarizar, por no es necesario reinventar la rueda en este asunto.
  • Se puede controlar quién lanza los builds y deployments, y tener registros sobre esas acciones. Esto al final significa un mejor control de los cambios que tienen impacto en entornos importantes, como staging, test, etc.
Hay muchas alternativas para este tipo de software, pero una de las más conocidas es Jenkins CII. Este proyecto de open source se destaca por su comunidad, grande y activa, y una vasta lista de complementos y extensiones, que abarcan casi todos los problemas que pueden surgir al configurar esta parte importante de la estrategia de SCM.
También hay otras buenas opciones: TeamCityTravisBambooetc.

Bonus track: esquema de versiones

Pero eso no es todo, también se debe definir cómo versionar el software y las librerías, cómo realizar la liberación de los entregables, cómo administrar dependencias, etc.
Para eso hay muchas herramientas, dependiendo de la plataforma. Para los desarrolladores de Java, Maven es un estándar, pero también se puede contar con Gradle y Ivy. Para la plataforma .NET, se puede utilizar NuGet, y para el mundo Javascript, tenemos NPMBower y Yarn. Todos ellos pueden configurarse para usarse con los repositorios binarios y los servidores CI disponibles.
Dada la dificultad que puede surgir al definir este proceso en la empresa, lo mejor es contar con el asesoramiento de expertos.
Tenemos años de experiencia en este tema y venimos ayudando a muchos clientes a definir e implementar su estrategia de SCM, así que no duden en contactarnos para obtener más información.
Nos vemos en el próximo post.
Martín López
By Martín López

Ingeniero en Sistemas, programar es mi pasión. Tengo experiencia en el ecosistema Java en General, y frameworks tales como Vaadin, Spring y Hibernate. Siempre dispuesto a ayudar a las empresas a diseñar workflows de construcción y como usar las herramientas correctas para construir software de alta calidad.

¡Únete a la conversación!
Profile Picture

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.