Академический Документы
Профессиональный Документы
Культура Документы
Cochabamba – Bolivia
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
ii
Tabla de Contenido
Resumen 5
Introducción 6
1 Generalidades 7
1.1 Antecedentes Generales 7
1.2 Antecedentes Específicos 9
2 Metodología 10
3 Herramientas de código abierto para la integración continua 10
4 Herramientas Open Source mas conocidas y usadas de Integracion Continua 11
4.1 Jenkins 11
4.2 GoCD 13
3.2.1. Conceptos Importantes GoCD 15
4.3 Travis CI 22
4.3.1 Job en Travis CI 24
5 Herramientas complementarias al proceso de integración continua 26
5.1 Servidor Linux 26
5.2 SonarQube 27
5.3 Nexus repository 29
5.4 Git 31
6 Conclusiones 34
7 Bibliografía 36
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Figura 12 – Artifact 22
Figura 16 – UI Travis CI 25
Resumen
El presente documento, se explica sobre las herramientas open source disponibles hoy
en día, para la integración continua en proyectos de desarrollo de software, donde se las
mencionan y describen las características de cada una de ellas para poder conocerlas y
tener un vistazo de ellas con respecto a otras.
5
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Introducción
Además de que existen herramientas de integración de pago, también las hay las que
son open source (código abierto y que no tienen costo alguno), en el presente documento
nos enfocaremos más en las herramientas de open source, también cabe destacar, que
existen herramientas que tienen un doble propósito; el de integración continua y entrega
continua, que detallaremos más adelante.
Lo que se pretende alcanzar con esta monografía, es explicar un poco los conocimientos
adquiridos en el curso del diplomado, sobre las herramientas open source que
actualmente existen. apoyados de una estrategia o plan para llevar a cabo la aplicación
de estos conocimientos adquiridos en esta investigación.
6
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
1 Generalidades
La motivación para la elección de este tema de monografía (como parte final del
Diplomado Experto en Desarrollo de Aplicaciones Empresariales), vienen determinadas
por la inquietud profesional en el campo de la ingeniería y el mundo del desarrollo de
software en general, y también lo interesante que fue aprender una pequeña parte de lo
que es y conlleva la integración continua en proyectos de desarrollo de software.
También comentaremos sobre algunas herramientas open source que podríamos usar
para nuestros proyectos de desarrollo. Lo que nos permitirá automatizar las tareas que
son repetitivas (compilación, ejecución de pruebas, construcción, despliegue,
documentación), en proyectos de desarrollo de software.
“Práctica de desarrollo de software donde los miembros del equipo integran su trabajo
frecuentemente, al menos una vez al día. Cada integración se verifica con un build
automático (que incluye la ejecución de pruebas) para detectar errores de integración tan
pronto como sea posible” [1].
Fuente: Shahin, Mojtaba & Ali Babar, Muhammad & Zhu, Liming. (2017). Continuous
Integration, Delivery and Deployment: A Systematic Review on Approaches, Tools, Challenges
and Practices. Recuperado de: https://ieeexplore.ieee.org/document/7884954
7
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Tambien podriamos decir que la integración continua es una de las muchas prácticas o
enfoques que existen en proyectos de desarrollo de software agil en la actualidad, donde
la integracion continua a adoptado metodologías ágiles, para poder estar al nivel del
desarrollo agil hoy en dia. Donde cualquier cambio (o mejora) en el software se integra
rápidamente con el software destinado a producción, un pequeño ejemplo sería el
siguiente:
8
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Hoy en día aun muchas empresas no han adoptado el enfoque de integración continua
debido a la costumbre de algo tradicional y muy conocido por muchos (enfoque ágil) pero
el desarrollo ágil no es suficiente para poder avanzar en proyectos grandes donde el
tiempo de desarrollo , testeo y entrega a producción tienen largos tiempos entre ellos, es
ahí donde la integración de todo se vuelve un caos total debido a muchos inconvenientes
que puedan ser encontrados y podríamos decir que hasta podrían presentarse Issues
críticos en esa integración y el costo que esta pueda tener en tiempo y esfuerzo podrían
ser significativamente considerables.
Es por eso que en muchas de las empresas de desarrollo de software que adoptan
metodologías ágiles, en las cuales la entrega continua y despliegue continuo cabe como
anillo al dedo, debido a lo que la integración/entrega continua representa, es una forma
de decir que lo que se implementa es de manera ágil y los cambios están sometidos a
testeos automatizados apenas sean terminados y que no se toma mucho tiempo en la
espera de que estos sean testeados por equipos de QA (Quality Assurance).
Algunos beneficios o ventajas que nos propone la integración continua son las siguientes:
9
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Logra mayor auto-confianza y seguridad en el equipo de desarrollo, Jez Humble & David
Farley (2010) sostiene que la experiencia demuestra que un equipo que utiliza integración
continua logra una mayor confianza interna, al estar comprobando constantemente el
estado del desarrollo.Y no es solamente la confianza en el equipo, es también del entorno
(usuarios, gestores, etc.) Un equipo de desarrollo de software que se siente seguro es un
equipo más motivado y más productivo. [3]
2 Metodología
Cuando hablamos de integración continua, muchas veces lo primero que se nos viene a
la mente es Jenkins y Git, pero a continuación veremos que existen otras herramientas
para la integración continua y entrega continua:
- Jenkins (basada en el proyecto Hudson).
- Buildbot (Desarrollado en Python, basada en el framework Twisted).
- Travis CI (es probablemente uno de los servidores CI más sencillos para empezar).
- Strider (Está escrito en Node.JS y JavaScript, y utiliza mongoDB como
almacenamiento).
- Go (fue creado y luego liberado por ThoughtWorks).
10
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
4.1 Jenkins
Jenkins hace énfasis en la integración continua, John Ferguson Smart (2011) sostiene
que una buena infraestructura de CI puede agilizar el proceso de desarrollo a través de
para el desarrollo, ayude a detectar y corregir errores más rápidamente, proporcione un
útil panel de proyectos para desarrolladores y no desarrolladores y, en última instancia,
ayude a los equipos
Entregar más valor comercial real al usuario final. Todo equipo de desarrollo profesional,
no importa cuán pequeño sea, debe practicar la IC.[4]
John Ferguson Smart (2011) define Jenkins, originalmente llamado Hudson, es una
herramienta de integración continua de código abierto escrita en Java. Con una
participación dominante, Jenkins es utilizado por equipos de todos los tamaños, para
proyectos en una amplia variedad de lenguajes y tecnologías, incluyendo .NET, Ruby,
Groovy, Grails PHP y más, así como Java. Entonces, ¿qué ha hecho de Jenkins un éxito?
¿Y por qué usar Jenkins para su infraestructura de CI?
En primer lugar, Jenkins es fácil de usar. La interfaz de usuario es simple, intuitiva y
visualmente atractiva, y Jenkins en general tiene una curva de aprendizaje muy baja.
Sin embargo, Jenkins no sacrifica el poder ni la extensibilidad: también es
extremadamente flexible y fácil de adaptar a sus propios propósitos. Existen cientos de
complementos que están disponibles, y cada semana salen más. Estos complementos
cubren todo, desde sistemas de control de versiones, herramientas de compilación,
métricas de calidad de código, notificador de compilación, integración con sistemas
externos, personalización de UI, juegos y mucho más. Y su instalación es rápida y fácil.[5]
Jenkins puede instalarse a través de paquetes de sistema nativos, Docker, o incluso
ejecutarse de manera independiente en cualquier máquina con un Java Runtime
Environment (JRE) instalado.
Algunas características mas sobresalientes de Jenkins se describe a continuación:
11
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Algunas de las opciones que podríamos explotar más de Jenkins serían los Jobs, que en
lo personal creo que esto nos ahorra bastante tiempo cuando tenemos tareas
automatizadas, en el sentido de que solo debemos configurarlo e integrarlo con nuestro
proyecto para que se lleven a cabo dichas tareas de manera que estas se conviertan en
algo automático y repetitivo, liberando a DevOps de tareas y permitiendo hacer mas
productivo al equipo de desarrollo.
12
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
BUILD
Paso 6: Tener la
Paso 7: Envio de opción de detener
notificación de el build en caso de
éxito o de falla en haber fallado
la generación de
los builds
por ejemplo:
Para generar un build de un proyecto “X” se siguen algunos pasos previos, que seria
configurar nuestro servidor de integración (Jenkins en este caso), de tal manera que
cuando subamos cambios (cambio de código, que podría ser algún feature, fix o mejora
del código, como refactorización), se active un Job encargado de procesar el commit
realizado en nuestro servidor de versiones (Git por ejemplo), que pueda capturar el
commit y ademas que pueda generar el build del proyecto.
4.2 GoCD
13
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
14
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
15
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Pipeline, una representación del flujo de trabajo o una parte de un flujo de trabajo. Por
ejemplo, si está intentando ejecutar pruebas automáticamente, crear un instalador y luego
implementar una aplicación en un entorno de prueba, esos pasos se pueden modelar
como una canalización. GoCD proporciona diferentes construcciones de modelado
dentro de una tubería, como etapas, trabajos y tareas. Los veremos en más detalle
pronto. Para el propósito de esta parte de la guía, debe saber que se puede configurar
una canalización para ejecutar un comando o un conjunto de comandos.
16
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
17
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Suponiendo que haya suficientes agentes iniciados y no ocupados, entonces todos los
Jobs en una etapa pueden ejecutarse en un agente diferente al mismo tiempo, lo que
posiblemente acelere mucho su compilación.
18
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
En el siguiente grafico veremos un poco de los que los pipelines hacen hablando en este
caso particular de la herramienta Go CD, para tal caso se tomará un ejemplo de un
pipeline con 3 etapas,
Donde la primera contiene dos Jobs, la segunda tres y la tercera solo un Job. Como se
mencionaba anteriormente decíamos que, si en un pipeline hay alguna etapa fallida, todo
el pipeline es fallido y deja de ejecutarse si en caso existieran más pipelines pendientes
de ejecución.
19
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Paso 3: En este punto debemos configurar el Job que estará asociada a la etapa que
definamos en este tab, donde podemos tener más de un Job o Task dentro esta etapa
como habíamos mencionado anteriormente.
Para tal propósito llenamos el nombre de la etapa, seguida del modo en que este
Jos/tarea se activara, para este ejemplo elegimos cuando se haga un commit satisfactorio
en nuestro repositorio, luego definimos el nombre de nuestro Job y el tipo de tarea que
este ejecutara y con eso sería suficiente para poder crearnos nuestro pipeline en Go CD.
21
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
4.3 Travis CI
22
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Christopher Weyand, Jonas Chronik, Lennard Wolf, Steffen Kötte, Konstantin Haase, Tim
Felgentreff, Jens Lincke y Robert Hirschfeld (2017), afirman que Travis CI es un servicio
de integración continua alojado y estructurado como una arquitectura de microservicio.
Los componentes modulares, aunque mínimamente acoplados, son subsistemas
complejos corriendo en la nube, debido a la utilización de las librerías y software
entrelazadas y mecanismos sofisticados de programación, una comprensión exhaustiva
de la construcción del sistema no es trivial. Proporcionar la base para una evaluación de
la modularidad, extensibilidad y escalabilidad de la arquitectura.
Aunque Travis CI ofrece funcionalidad e implementación continuas completamente
funcionales para muchos lenguajes de programación y plataformas, todavía carece de
23
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
24
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Es un servidor impulsado por el sistema operativo de código abierto LINUX. Ofrece a las
empresas una opción de bajo costo para entregar contenido, aplicaciones y servicios a
sus clientes. Debido a que Linux es de código abierto, los usuarios también reciben
beneficios de una sólida comunidad de recursos y abogados.
Cada variedad de servidor Linux está diseñada teniendo en cuenta distintos usos:
PUBLISH
5.2 SonarQube
El software SonarQube (anteriormente llamado Sonar) es una plataforma de gestión de
calidad de código abierto, dedicada a analizar y medir continuamente la calidad técnica,
desde la cartera de proyectos hasta el método. Si desea ampliar la plataforma SonarQube
con complementos de código abierto [5].
SonarQube es otra de las herramientas que considero importante para el área devOps,
así como para integración continua en proyectos de desarrollo de software, y obviamente
esto ayuda de alguna manera a una buena implementación, en cuanto a código se refiere,
ya que sonar cuenta con más de 20 lenguajes de programación soportados para el
27
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
análisis, donde los reportes generados por este nos pueden servir para reflexionar y
conocer qué partes o fragmentos de código necesitan ser mejorados.
SonarQube también es flexible en cuanto a integración con otras herramientas, tales
como Jenkins.
Algo que debemos tomar muy en cuenta es que un análisis estático del código no es y
no será suficiente para afirmar que nuestro software es de calidad, es por eso que
también necesitamos otro tipo de herramientas de apoyo, como los test unitarios u otros
para verificar el correcto uso y calidad de nuestro software, pero haciendo un análisis del
código sin estar en ejecución podemos detectar elementos como:
Detectar estos puntos mencionados con sonar son muy importantes para una empresa
de desarrollo de software ya que antes de que el código está ejecutado podemos
detectarlos e ir corrigiendo lo antes posible.
30
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
5.4 Git
¿Que es git?
31
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
Git te permite y te anima a tener múltiples ramas locales que pueden ser totalmente
independientes entre sí. La creación, fusión y eliminación de esas líneas de desarrollo
lleva segundos.
Empresas y proyectos importantes que usan Git como servidor de versiones son:
¿Que es GitHub?
GitHub aloja tu repositorio de código y te brinda herramientas muy útiles para el trabajo
en equipo, dentro de un proyecto.
Además de que tu podrías contribuir haciendo alguna mejora en el software de los demás,
para esto github provee una serie de funcionalidades para hacer un fork y solicitar pulls,
Realizar un fork es simplemente clonar un repositorio ajeno (genera una copia en tu
cuenta).
¿Qué es GitLab?
GitLab es la primera aplicación individual construida desde cero para todas las etapas del
ciclo de vida de DevOps para equipos de Producto, Desarrollo, QA, Seguridad y
Operaciones para que trabajen simultáneamente en el mismo proyecto.
GitHub o GitLab son ahora las herramientas mas conocidas a nivel mundial y usadas
para muchos proyectos de diferentes magnitudes, desde proyectos sencillos hasta
proyectos muy complejos.
32
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
SERVIDOR DE VERSIONES
… OTROS
33
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
6 Conclusiones
Después de haber revisado las herramientas open source que tenemos disponibles, y en
cómo ellos nos podrían ayudar de gran manera en nuestros proyectos de desarrollo de
software, y que en lo personal más que una opción sería como herramientas importantes
en el área de desarrollo, que en Cochabamba dentro de poco estas herramientas serán
parte del proceso de desarrollo, y que podría ser implantado/aplicado por muchas
empresas de este rubro, debido a que es una forma más de poder decir que la integración
es ágil además de la metodología aplicada, por ejemplo Scrum.
Después de haber revisado las herramientas tales como Jenkins, GoCD y Travis CI,
podemos concluir os siguiente:
Jenkins:
• Jenkins es una herramienta muy conocida por una gran mayoría de
desarrolladores y personas del rubro del área de sistemas e informática.
• Existe documentación en la web, además de la documentación propia de Jenkins.
• Hay muchas incidencias sobre el manejo de esta herramienta.
• Fácil e intuitivo al momento de aprender a usar esta herramienta.
• Gran cantidad de plugins para configurar Jenkins de acuerdo a nuestras
necesidades y tipos de projectos de software.
• Se integra con muchas otras herramientas alternativas y/o complementarias con
CI.
GoCD:
• Además de integración continua ofrece herramientas de entrega continua.
• Actualmente es usada por empresas importantes que la recomiendan.
• Configuraciones semejantes a las que ofrece Jenkins (como Jobs, Tasks,
pipelines, etc.).
• No existe muchas incidencias de empresas que lo apliquen en Bolivia u otras, si
bien es usada por empresas importantes en otros países.
Travis CI:
34
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
• Travis CI, si bien ofrece herramientas útiles para la integración continua, esta esta
mas pensada para funcionar como microservicio.
• No existe mucha documentación para poder empezar a usar esta herramienta
(primeros pasos).
• Al carecer de otras funcionalidades que ofrecen GoCD y Jenkins esta herramienta
la podríamos calificar con un 3, en un rango de 0-10 tomando en cuenta lo que ofrece y
las incidencias que existen sobre Jenkins y GoCD.
• Una de las razones de no profundizar esta herramienta fue la falta de
documentación y conocimientos que se necesitan para poder empezar a usarla.
35
Herramientas Open Source para la Integración Continua, en Proyectos de Desarrollo de Software – Henry Bustamante C.
7 Bibliografía
[1] Fowler Martin. 01 de mayo de (2006). Continous Integration, Continuous Integration.
Recuperado de: https://martinfowler.com/articles/continuousIntegration.html
[2] Paul M.Duvall with Steve M. A. Glover (2007). Continuous integration (Improving
Software Quality and Reducing Risk).Delhi India, India: Pearson Education in South Asia
(p. 29-30).
[3] Jez Humble & David Farley (2010). Continuous Delivery. United States: Addison–
Wesley.
[4] Ferguson S. John (2011). Jenkins: The Definive Guide (Continuous Integration for the
Mases). United States (p. 1).
[5] Ferguson S. John (2011). Jenkins: The Definive Guide (Continuous Integration for the
Mases). United States (p. 3).
[8] Weyand Christopher, Chronik Jonas, Wolf Lennard, Kötte Steffen, Haase Konstantin,
Felgentreff Tim, Lincke Jens and Hirschfeld Robert (2017). Improving Hosted Continuous
Integration Services. Potsdam-Alemania, (p. 1-3)
36