Las mejores Herramientas de despliegue y desarrollo para configurar tu entorno
En los últimos años ha evolucionado mucho todo lo relacionado con las operaciones de desarrollo y despliegue vinculadas a la ingeniería del software. Tanto que ha dado lugar a nueva profesión (llamada DevOps) que conecta el desarrollo y las operaciones realizando tareas como la automatización de las pruebas, el despliegue, integración continua, etc…
Afortunadamente, las operaciones relacionadas con DevOps no exigen un proyecto avanzado ni la necesidad de un profesional especializado en esta tarea, ya que las herramientas existentes en este momento facilitan mucho la labor de configuración de los entornos para el desarrollador. Gracias a estas herramientas es fácil alcanzar procesos de automatización personalizados y optimizados. En este artículo vamos a enumerar algunas de estas herramientas y las buenas prácticas en desarrollo y despliegue para cualquier flujo de trabajo profesional.
Vamos a separar las herramientas en dos bloques. Las que podemos usar de forma local, en el entorno de desarrollo de cada programador; y las que se pueden utilizar en remoto para facilitar los procesos de despliegue:
Herramientas para el entorno de desarrollo local
Estas son las herramientas básicas con las que deberíamos contar:
Control de versiones
Todo comienza por establecer un sistema de control de versiones, ya que la mayoría de los procesos se tienen que realizar en el momento en el que se envían cambios al código del proyecto. Git es sin duda la principal herramienta en esta parcela hoy. Y basados en Git encontramos un ecosistema de servicios en la nube capaces de dar soporte a operaciones de todo tipo. Algunos de los máximos exponentes son los populares GitHub, GitLab o Bitbucket.
Linter
Es un software que se instala en los ordenadores de los desarrolladores y se encarga de verificar el estilo de la codificación del desarrollador, asegurando que se adapta a unos estándares definidos. El linter avisa en tiempo de desarrollo de los fallos en la legibilidad del código y ayuda a organizarlo, resultando muy útil para que todas las personas del equipo escriban con un mismo estilo. Es perfectamente configurable para cada proyecto y equipo de desarrollo.
Pruebas del software
Las pruebas del software permiten realizar comprobaciones del código del proyecto de forma que se puedan detectar errores de manera temprana. Todo código debería tener sus pruebas, hasta el punto que hoy se dice que «si no hay pruebas no hay código». Las pruebas nos ofrecen una red de seguridad que nos ayuda en el día a día del proyecto, permitiendo la refactorización del código sabiendo que los cambios aplicados no han roto nada, ni en el módulo que se está desarrollando ni en el resto de la aplicación.
Git Hooks
Por último, el pegamento que nos permite trabajar de manera sincronizada con todas estas herramientas son los Git Hooks. Los Git Hooks nos permiten automatizar las comprobaciones de estilo y las pruebas en local en el momento en el que se van a confirmar cambios al repositorio. Los Git Hooks permiten muchas cosas, pero sobre todo podemos enganchar procesos antes de hacer los commit al repositorio local (pre-commit), que sería el momento ideal para ejecutar el linter y pasar las pruebas. Configurar Git Hooks no es una tarea sencilla, pero existen herramientas como Husky que permiten realizar las configuraciones de una manera muy asequible para cualquier desarrollador.
Herramientas a nivel remoto
Una vez que se envían cambios al repositorio remoto se pueden enganchar nuevos procesos automáticos con comprobaciones para asegurar la calidad del software, así como realizar el despliegue. Para ello podemos contar con otra gama de herramientas.
GitHub Actions
GitHub Actions permite automatizar diversos procesos una vez se han recibido cambios en el repositorio, en cualquiera de sus ramas. Generalmente, los desarrolladores envían cambios a una rama en particular sobre la que se realizan las comprobaciones y, si todo es correcto, el código se envía a la rama «master» o «main», lo que desencadena el despliegue en el servidor de producción. Los flujos de trabajo son perfectamente configurables por medio de código, que se escribe con la sintaxis Yaml. En ellos se pueden automatizar las tareas de linter, las pruebas unitarias, las pruebas de integración, incluso comunicarse con los servidores de Arsys para organizar el despliegue en entornos de pre-producción. Pueden incluir verificaciones manuales, de modo que personas físicas también verifiquen que las aplicaciones funcionan para desencadenar finalmente el merge de la rama de desarrollo y la rama «master» o «main» y, finalmente, el despliegue en producción.
GitLab CI/CD
GitLab sería el equivalente a las GitHub Actions, que nos permite configurar los flujos de trabajo para comprobaciones de pruebas automatizadas y realizar el despliegue en los distintos entornos. En este enlace disponemos de más información.
Jenkins
Jenkins es un software libre especializado en los procesos de integración continua y despliegue continuo (CI / CD). Nos permite disponer los pipelines de automatización en nuestros propios servidores por lo que no necesitamos depender de un proveedor externo como GitHub o GitLab. Gracias a ello, permite un control de gasto perfectamente predecible ya que solo tenemos que hacer uso de nuestra infraestructura y, por supuesto, lo podemos instalar en los servidores de cloud de Arsys. Existe un enorme ecosistema de plugins de Jenkins para la implementación sencilla de todo tipo de procesos de automatización.
Conclusión
Configurar los flujos de trabajo para la automatización de los procesos de desarrollo y despliegue puede ser una tarea compleja al principio y, por tanto, requerir de cierto tiempo para dejarlo todo a nuestro gusto. Es una tarea que suele realizar el profesional DevOps, pero en la que cualquier desarrollador puede participar gracias a la facilidad que aportan las herramientas actuales.
Una vez tengamos implantada la solución permite una automatización que liberará a los desarrolladores de tareas repetitivas y permitirá un gran ahorro de tiempo, asegurando además un mayor nivel de calidad del software. Esperamos que esta serie de herramientas y buenas prácticas te ayuden a mantener y mejorar tus procesos de desarrollo y despliegue.