¿Azure DevOps, GitHub Actions o Jenkins?

¿Azure DevOps, GitHub Actions o Jenkins?

En los últimos meses he podido compartir en algunas comunidades charlas sobre Azure DevOps y GitHub Actions como herramientas de integración continua y entrega continua (CI/CD). Cuando compartimos sobre estos temas siempre surgen preguntas, pero una muy frecuente es ¿cuál es la diferencia entre X y Y herramienta?. En mi caso, las herramientas que mas he utilizado para implementar estrategias de CI/CD son: Azure DevOps, Jenkins y Github Actions. Como desarrollador, elegir la herramienta adecuada para tu pipeline de desarrollo de software es crucial para garantizar que tus proyectos se entreguen de manera eficiente y eficaz. En este blog te comparto información clave sobre cada una de ellas.

Azure DevOps

Azure DevOps es un conjunto completo de herramientas proporcionadas por Microsoft para el desarrollo de software. Incluye una gama de servicios como la gestión de repositorios (Azure Repos), la integración continua y la entrega continua (Azure Pipelines), y la gestión de proyectos (Azure Boards). La ventaja clave de Azure DevOps es su integración con otros productos de Microsoft, como Visual Studio, lo que lo convierte en una opción popular para los desarrolladores que ya usan herramientas de Microsoft. Además, Azure DevOps tiene un sólido conjunto de características, incluida la integración con varias herramientas y servicios, y una interfaz de usuario intuitiva. Sin embargo, es un producto propietario que si bien tiene una capa gratuita para ser utilizada por un equipo pequeño, puede llegar a ser costoso para organizaciones con una gran cantidad de desarrolladores.

GitHub Actions

GitHub Actions es un servicio relativamente nuevo de GitHub, pero que ha ganado mucha popularidad entre los desarrolladores. GitHub Actions permite a los desarrolladores automatizar sus flujos de trabajo de desarrollo de software directamente dentro de GitHub. Es fácil de usar, especialmente para los desarrolladores que ya están familiarizados con GitHub. Además, es una herramienta de código abierto, lo que la convierte en una solución rentable para las organizaciones. Una de las ventajas clave de GitHub Actions es su perfecta integración con otras herramientas de GitHub, como “Issues” y “Pull requests”, lo que la convierte en una excelente opción para las organizaciones que ya usan GitHub.

Jenkins

Jenkins es una de las herramientas de código abierto más populares para la integración continua y la entrega continua. Ha existido durante más de una década y tiene una gran base de usuarios y un amplio conjunto de funciones. Jenkins proporciona una amplia gama de complementos que se pueden usar para integrarse con otras herramientas y servicios, lo que la convierte en una solución flexible y versátil. Sin embargo, es conocido por su complejidad y puede ser difícil de configurar y mantener, especialmente para las organizaciones que son nuevas en CI/CD.

Puedes combinarlas si es necesario

En realidad, estas 3 herramientas no son excluyentes entre sí, por lo que puedes diseñar e implementar una estrategia en la que estas herramientas funcionen juntas dependiendo de las necesidades de tu proyecto.

Azure DevOps y Jenkins

Puedes integrar estas dos herramientas para optimizar tu proceso de desarrollo. Veamos un caso de uso.

El escenario es el siguiente: tienes una aplicación Java para la que quieres administrar el flujo de desarrollo con Azure DevOps. Ya tienes un servidor Jenkins configurado para compilar y probar la aplicación. Te gustaría integrar las dos herramientas para que los cambios enviados al repositorio de codigo de Azure DevOps desencadenen un proceso de compilación y ejecucion de pruebas en Jenkins, y luego se notifiquen los resultados de vuelta a Azure DevOps.

Los pasos para lograr esta integración son los siguientes:

  1. Crea un “job” de compilación de Jenkins: en Jenkins, crea un “job” de compilación que compile y pruebe la aplicación Java. Asegurate de que el “job” de compilación esté configurado de manera adecuada y pueda compilar y probar la aplicación correctamente.
  2. Instala el “plug-in” de Azure DevOps en Jenkins: para integrar Jenkins y Azure DevOps, deberás instalar el “plug-in” Azure DevOps en Jenkins. Puedes hacerlo navegando a la página “Administrar Jenkins”, seleccionando “Administrar plug-ins” y buscando el “plug-in” llamado “Azure DevOps”.
  3. Configura un “Service Endpoint” en Azure DevOps: para permitir que Jenkins se conecte a Azure DevOps, deberás configurar un punto de conexión de servicio en Azure DevOps. Para hacer esto, navega hasta el proyecto Azure DevOps y selecciona “Configuración del proyecto”. Desde allí, selecciona “Conexiones de servicio” y crea una nueva Conexión de servicio de tipo “Jenkins”.
  4. Configura el “job” de compilación de Jenkins para usar el extremo de servicio: en el “job” de compilación de Jenkins, selecciona la opción “Azure DevOps” en “Acciones posteriores a la compilación”. Desde allí, selecciona el punto de conexión del servicio Azure DevOps que creaste en el paso 3 y configura el “plug-in” para informar el estado de compilación a Azure DevOps.
  5. Activar una compilación en Jenkins desde Azure DevOps: finalmente, puedes desencadenar una compilación en Jenkins desde Azure DevOps. Para hacer esto, navega hasta el repositorio de Azure DevOps y selecciona “Triggers”. A partir de ahí, puedes configurar un disparador para iniciar el “job” de compilación de Jenkins cada vez que se envían cambios al repositorio.

Con estos pasos, puedes integrar Azure DevOps y Jenkins. Cada vez que se envíen cambios al repositorio de Azure DevOps, se activará una compilación y la ejecución de pruebas en Jenkins, y los resultados se informarán a Azure DevOps.

Conclusiones

En conclusión, cada una de estas herramientas tiene sus propias fortalezas y debilidades, y la elección adecuada dependerá de tus necesidades y requisitos específicos. Si ya usas las herramientas de Microsoft, entonces Azure DevOps puede ser la opción adecuada para ti. Si ya estas usando GitHub, GitHub Actions puede ser la mejor opción. Y si estas buscando una solución flexible de código abierto, entonces Jenkins puede ser la opción correcta.

No descartes la opcion de combinarlas si es necesario y en beneficio de tu proyecto. Puedes optimizar tu flujo de trabajo de desarrollo y automatizar muchas tareas manuales, lo que te ayudará a liberar software más rápido y con mayor calidad.

Además de las herramientas que te mencioné hay muchas mas que pueden cumplir los mismos propósitos, no importa cuáles sean tus necesidades, seguramente habrá una alternativa que las satisfará.