Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
28
APLICACIÓN DEL PROCESO DE INTEGRACIÓN CONTINUA EN EL
CENTRO DE TELEMÁTICA DE LA UNIVERSIDAD DE LAS CIENCIAS
INFORMÁTICAS
APPLICATION OF THE CONTINUOUS INTEGRATION PROCESS IN
TELEMATICS CENTER AT THE UNIVERSITY OF INFORMATIC SCIENCES
Hernández A. Universidad de las Ciencias Informáticas
RESUMEN
La Integración Continua es una práctica de software expuesta por Martin Fowler, que permite entre otras bondades la reducción de riesgos y la realización de tareas repetitivas, automatizando al máximo los procesos involucrados en el desarrollo de software y permitiendo la generación de software listo para desplegar e incremento de su calidad. Cuando se cumplen los principios que rigen la Integración Continua se obtiene una herramienta eficaz y útil que ayuda a la sinergia del desarrollo de los proyectos de software. En este trabajo se pretenden mostrar las experiencias en la utilización del proceso de Integración Continua en el centro de Telemática de la Universidad de las Ciencias Informáticas. Se presentan las etapas, herramientas utilizadas y resultados obtenidos con la aplicación de esta técnica, resaltando las ventajas que se obtienen para todas las personas involucradas, principalmente los desarrolladores, los cuales son los mayores implicados en este proceso. Se utilizan los lenguajes de programación PHP y Python por ser éstos los utilizados en el centro y como servidor de Integración Continua Jenkins, uno de los más populares, robusto y fácil de usar. Las etapas y herramientas que fueron establecidas son libres de ser modificadas de acuerdo a las necesidades que se requieran.
Palabras claves: Integración Continua, Jenkins, calidad, desarrollo de software, experiencias.
ABSTRACT
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
29
application of this technique, raising the advantages that are obtained for the implicated persons, mainly those which play the role of developers, which are also the major implicated ones in this process. PHP and Python programming languages are used and as a server of Continuous Integration Jenkins, it is one of the most popular, robust and easy labour are used. The steps and tools that were established are free to be modified according to the needs that are required.
Keywords: Continuous Integration, Jenkins, quality, software development, experiences
.INTRODUCCIÓN
Según Martin Fowler, precursor del concepto de Integración Continua, define esta técnica como una práctica de software donde los miembros del equipo integran su trabajo frecuentemente, usualmente al menos una vez al día, dando lugar a múltiples integraciones por día; cada integración es verificada por un autómata para detectar errores de integración lo más pronto posible (1).
La Integración Continua se ha convertido en una práctica necesaria en el desarrollo del software por los múltiples beneficios que ofrece, entre los que se destacan: reducción de riesgos y tareas repetitivas, generación de software listo para desplegar e incremento de la calidad. Esta técnica permite el monitoreo de Sistemas de Control de Versiones debido a que cuando un cambio es detectado, es posible que una herramienta compile y pruebe automáticamente los cambios detectados, notificando de inmediato a los involucrados de las posibles fallas detectadas.
La Universidad de las Ciencias Informáticas, entidad insignia del país en la producción de software requiere de mecanismos que permitan que los productos generados tengan una calidad exquisita. Uno de los centros de esta universidad lo constituye el de Telemática (TLM), el cual se enmarca en el desarrollo de sistemas y servicios informáticos en las ramas de las Telecomunicaciones y la Seguridad Informática. Es sin duda alguna, la Integración Continua una alternativa eficaz para la obtención de productos de calidad si se cumplen las pautas que se recomiendan desde las fases tempranas del desarrollo del software. Para el centro TLM se convierte en práctica imprescindible la Integración Continua por los dominios en que se enfoca para la obtención de productos seguros y robustos.
Existen algunos requisitos vitales para lograr los objetivos en los que se enfoca la Integración Continua. Entre éstos se destacan:
Un equipo motivado en la tarea que realizan.
Disponibilidad de un sistema de Control de Versiones (Subversión, Git, etc.). Un servidor de Integración Continua (Jenkins, Cruise Control, Travis CI, etc.). Automatización al máximo de los procesos.
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
30
Un aspecto importante en la implantación de un sistema de Integración Continua lo constituye la selección del servidor encargado de realizar las integraciones. Existen muchas alternativas en este sentido, pero una solución completa lo constituye Jenkins (2), el cual es un servidor de Integración Continua Open Source escrito en Java. Jenkins es fácil de usar, su interfaz gráfica es simple, intuitiva, su curva de aprendizaje es baja, cuenta con buena documentación, gran comunidad y un excelente sistema de plugins, lo que permite integrar múltiples sistemas y que la interacción con el usuario se facilite (3).
1.
OBJETIVO
El presente trabajo tiene como objetivo mostrar las experiencias del uso del proceso de Integración Continua con el servidor Jenkins en el Centro TLM de la Universidad de las Ciencias Informáticas, herramientas utilizadas, procesos automatizados y resultados obtenidos con los lenguajes de programación PHP y Python.
2.
METODOLOGÍA
El proceso de Integración Continua fluye por diferentes etapas, finalizando normalmente en la obtención de un compilado listo para desplegar. En el caso de aplicaciones web se puede desplegar el producto obtenido en un servidor de prueba para ver los resultados de las diferentes integraciones. En la figura 1 se presenta el flujo del proceso de Integración Continua implementado en el Centro TLM. Como se constata, los desarrolladores realizan commits al servidor de control de versiones (subversión) donde está el código de todos los módulos en los que se trabajan para un proyecto. Posteriormente el servidor Jenkins tiene configurado una programación de tareas en donde extraerá la información presente en el servidor de control de versiones para realizar pruebas al código, informes de resultados y despliegues automáticos en caso que sea necesario. Finalmente se les notifica a los usuarios los resultados de las pruebas realizadas mediante un servidor de correo electrónico (Zimbra).
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
31
Figura 1 Flujo de trabajo del proceso de Integración Continua
Para un funcionamiento eficaz del servidor es necesaria su optimización, debido a que el consumo de recursos de hardware es significativo, principalmente en cuanto al uso de la capacidad del disco duro (4). Normalmente las integraciones se realizan de forma programada en las noches, no obstante, es posible lanzar las integraciones cuando se realice un commit al servidor de Control de Versiones, mediante la programación de scripts; pero esta práctica conllevaría al crecimiento exponencial del uso del disco duro del servidor Jenkins, por lo que se recomienda tener gran capacidad disponible y monitorear mediante plugins de Jenkins el estado del uso de la capacidad del servidor (5).
Durante el proceso de integración se ejecutan las siguientes etapas:
1. Compilación del código fuente (en el caso de lenguajes dinámicos se revisa la sintaxis del código).
Si se dispone de lenguajes dinámicos como PHP y Python, se debe revisar la sintaxis del código en busca de posibles errores que interrumpan el proceso de integración.
2. Análisis estático de código.
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
32
En el caso de PHP se utilizó CodeSniffer (6) y PHP Mess Detector (7) para la detección violaciones, PHPLOC (8) para medir el tamaño del código fuente y PHPCPD (9) para la detección de código duplicado.
En Python se utilizó Pylint (10) y PEP8 (11) para detectar violaciones del código fuente, Sloccount (12) para estadísticas del código y Clonedigger (13) para la detección de código duplicado.
3. Ejecución de pruebas unitarias.
En esta fase se permite probar de forma automatizada unidades de código fuente y comprobar si retornan los resultados esperados. Las pruebas unitarias en PHP se realizaron con PHPUnit (14) y en Python con PyUnit (15).
4. Generación de reportes de los análisis realizados y obtención de la documentación del proyecto.
Luego de ejecutadas las fases anteriores, Jenkins provee un conjunto robusto de plugins (16) que permiten analizar los resultados obtenidos y mostrarlos de forma intuitiva. Por otro lado, se genera la documentación del proyecto si el código del mismo está documentado correctamente. En PHP se utilizó phpDocumentor (17) y en Python (18).
5. Obtención del compilado final.
En el proceso de Integración Continua, esta fase se considera la última, pues luego que se ejecutan todas las pruebas se obtiene la integración de todos los módulos del proyecto listos para ser desplegados en un compilado o paquete de código.
6. Despliegue automático (aplicaciones web).
Para obtener una correcta visibilidad del estado del proyecto en producción, el servidor Jenkins puede desplegar el resultado de la fase anterior en un servidor web, logrando de esta forma un rápido acople de los diferentes módulos del proyecto integrado mediante un despliegue continuo, permitiendo de esta forma obtener la visibilidad del despliegue actual del proyecto.
7. Análisis dinámico de seguridad (aplicaciones web).
Existen muchas herramientas que permiten detectar vulnerabilidades a las aplicaciones web en producción, lo que se conoce como análisis dinámico de seguridad (19). Una de estas herramientas lo constituye W3AF (20), la cual permite integrarse fácilmente con Jenkins y sus reportes son muy valiosos. Con esta herramienta se pueden detectar vulnerabilidades potenciales que pueden convertirse en brechas de seguridad que pueden ser explotadas por personas malintencionadas.
8. Notificación a los involucrados de los resultados obtenidos.
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
33
notificación a los desarrolladores y directivos de los proyectos. El mensaje refleja el vínculo a los resultados obtenidos y URL donde se desplegó la aplicación si es de tipo web. En el entorno de la Universidad de las Ciencias Informáticas es necesario integrar en Jenkins la autenticación por el dominio para que los usuarios accedan con sus credenciales respectivas. De igual forma, es necesario establecer los permisos correspondientes en el servidor para que cada usuario acceda solo a los resultados que le interesan y no a otros.
3.
RESULTADOS
Los aportes de la Integración Continua al desarrollo del software son significativos. Sin embargo, este proceso conlleva a la adopción de algunas prácticas de los desarrolladores; una de ellas es la realización de commits frecuentes y que se realicen sin errores para no interrumpir la integración con el trabajo del resto de los implicados. Es por ello que se hace necesaria la concientización en todos los involucrados de la importancia que tiene cumplir con las normas establecidas para el proceso de Integración Continua.
El centro TLM se ha beneficiado de la aplicación de este sistema en los proyectos desarrollados. Se ha logrado que los desarrolladores adopten la práctica de realizar commits frecuentes y no es necesario que tengan todo el código fuente del proyecto. De igual forma, se ha posibilitado la verificación de normas establecidas por la universidad como es el uso de los estándares de codificación. En todo momento existe visibilidad del estado real de los proyectos integrados, así como el despliegue de los mismos en un entorno controlado. También se encuentra disponible la documentación del proyecto, lo cual posibilita que la revisión de los proyectos por parte del grupo de Calidad del centro sea mejor. Los líderes de proyecto cuentan con un mecanismo de verificación rápido de los resultados de las integraciones. Los desarrolladores por su parte, tienen a su disposición una herramienta con la cual pueden ver el progreso de su trabajo, los problemas de codificación y seguridad detectados.
En las figuras 2 y 3 se presentan tomas de pantalla de los resultados obtenidos con la aplicación del proceso de Integración Continua en el Centro TLM. Estos resultados son de mucha utilidad tanto para los desarrolladores como los directivos de los proyectos, debido a que se les brinda el mecanismo de control y análisis del código que se genera.
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
34
muestran gráficamente para visualizar la tendencia en el tiempo del estado del proyecto en cuanto a los elementos que se evalúan.
Figura 2 Pantalla de resultados de un Build a un proyecto
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
35
Figura 3 Resultados globales de un proyecto
4.
CONCLUSIONES
En este trabajo se han presentado las experiencias en torno a la aplicación del proceso de Integración Continua en el Centro TLM de la Universidad de las Ciencias Informáticas. Esta técnica resulta útil en muchos escenarios siempre que se impliquen conscientemente las personas involucradas y se tome con responsabilidad la necesidad de su utilización.
El hecho de que se automaticen al máximo muchos procesos con la utilización de la Integración Continua, posibilita que se optimicen las tareas de desarrollo de software en empresas dedicadas a tal propósito.
Las etapas expuestas en este trabajo para la aplicación de la Integración Continua pueden ser extendidas o reducidas de acuerdo a las necesidades específicas del entorno donde se desea aplicar. De igual forma, las herramientas utilizadas son una muestra de la variedad existente actualmente, otros lenguajes de programación tienen sus especificidades y mecanismos de integración diferentes.
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
36
presentes en la realización del proyecto. Es necesario contar con recursos tecnológicos suficientes (almacenamiento y procesamiento) que permitan la rapidez de las integraciones programadas y contar con un historial de las mismas para el análisis de tendencias de la empresa en cuanto al desarrollo del software. Este proceso debe ser mejorado continuamente, en cuanto a inconformidades que puedan surgir en los reportes generados, exceso y escasez de información presentada, lentitud de las integraciones, etc., siempre teniendo en cuenta las opiniones y sugerencias del personal involucrado.
Con la aplicación del proceso de Integración Continua en el Centro TLM se ha presentado una alternativa eficaz para el control de las tareas de integración que se llevan a cabo constantemente en centros productivos de desarrollo de software.
REFERENCIAS
(1) Fowler M. and Matthew F. Continuous Integration. [En línea]. 2006. [Consultado el: 19 de enero de 2014]. Disponible en: http://martinfowler.com/articles/continuousIntegration.html.
(2) CI Jenkins. Jenkins CI. [En línea]. 2014. [Consultado el: 20 de enero de 2014]. Disponible en: http://jenkins-ci.org/.
(3) Smart J. F. Jenkins: The Definitive Guide.s.l. : O'Reilly Media, Inc., 2011.
(4) Kawaguchi K. 7 Ways to Optimize Jenkins/Hudson. [En línea]. 2011. [Consultado el: 19 de
enero de 2014]. Disponible en:
http://di388e0fcqllf.cloudfront.net/whitepapers/7WaysToOptimizeJenkins.pdf.
(5) Votypkova L. Wiki Jenkins. [En línea]. 2014. [Consultado el: 23 de enero de 2014]. Disponible en: https://wiki.jenkins-ci.org/display/JENKINS/Disk+Usage+Plugin.
(6) PHP group. PEAR - PHP Extension and Application Repository. [En línea]. 2014.
[Consultado el: 24 de enero de 2014]. Disponible en:
http://pear.php.net/package/PHP_CodeSniffer/redirected.
(7) Pichler M. PHPMD - PHP Mess Detector. [En línea]. 2014. [Consultado el: 24 de enero de 2014]. Disponible en: http://phpmd.org/.
(8) Bergmann S. PHPLOC. [En línea]. 2014. [Consultado el: 20 de enero de 2014]. Disponible en: http://www.ohloh.net/p/phploc.
(9) Bergmann S. Copy Paste Detector (CPD) for PHP code. [En línea]. 2014. [Consultado el: 20 de enero de 2 .
Iberoamerican Journal of Project Management (IJoPM). www.riipro.org/journal. ISSNe 2346-9161. Vol.5, No.1, A.E.C, pp.28-37. 2014.
37
(11) Python Software Foundation. PEP 8 Style Guide for Python Code. [En línea]. 2014. [Consultado el: 23 de enero de 2014]. Disponible en: http://www.python.org/dev/peps/pep-0008/.
(12) Python Software Foundation. Python Programming Language - Official Website. [En línea]. 2014. [Consultado el: 21 de enero de 2014]. Disponible en: https://pypi.python.org/pypi/setuptools-sloccount.
(13) Sourceforge.net. Clone Digger. [En línea]. 2014. [Consultado el: 23 de enero de 2014]. Disponible en: http://clonedigger.sourceforge.net/.
(14) Bergmann S. PHPUnit the PHP Testing Framework. [En línea]. 2014. [Consultado el: 20 de enero de 2014]. Disponible en: http://phpunit.de/.
(15) Purcell S. PyUnit - the standard unit testing framework for Python. [En línea]. 2014. [Consultado el: 24 de enero de 2014]. Disponible en: http://pyunit.sourceforge.net/.
(16) Atlassian Confluence. Jenkins Wiki. [En línea]. 2014. [Consultado el: 25 de enero de 2014]. Disponible en: https://wiki.jenkins-ci.org/display/JENKINS/Plugins.
(17) Phpdocumentor. phpDocumentor. [En línea]. 2014. [Consultado el: 24 de enero de 2014]. Disponible en: http://www.phpdoc.org/.
(18) Sphinx. Sphinx. [En línea]. 2014. [Consultado el: 23 de enero de 2014]. Disponible en: http://sphinx-doc.org/.
(19) Arkin B., et al. Software penetration testing. s.l. : Security & Privacy, IEEE 3.1, 2005, pp 84-87.
(20) W3AF.ORG. w3af Open Source Web Application Security Scanner. [En línea]. 2014. [Consultado el: 20 de enero de 2014]. Disponible en: http://w3af.org/.
CORRESPONDENCIA
Ing. Adrian Hernández Yeja.Centro de Telemática.
Universidad de las Ciencias Informáticas.
Carretera de San Antonio Km 2 1/2, La Habana, Cuba. CP 19370.
Teléfono: (537) 835 8172. Sitio Web: http://www.uci.cu