Skip to content

Integración con Jenkins

Juan Carlos Delgado edited this page Oct 23, 2013 · 9 revisions

Jenkins es uno de los servidores de integración continua más utilizados. Configurar uno de estos servidores nos va a permitir detectar posibles problemas tan pronto como se añadan al control de código fuente.

En este tutorial configuraremos Jenkins pero la mayoría de servidores de CI servirán de igual forma.

En nuestro caso vamos a ejecutar las pruebas de integración y a mostrar informes de coverage con cada commit que se haga al control de código fuente.

Antes de empezar vamos a modificar el archivo karma.conf.js y cambiaremos Chrome por PhantomJS en el apartado browsers.

Configuración básica

Lo primero que haremos será configurar Jenkins para que ejecute grunt con cada push a nuestro control de código fuente.

Para ello:

  1. Creamos una nueva tarea en Jenkins con nombre ngpro
  2. Configuramos el origen del código fuente
  3. En el apartado Disparadores de ejecuciones marcamos Build when a change is pushed o cualquier otra opción que nos interese
  4. En el apartado ejecutar añadiremos un paso ejecutar linea de comandos o ejecutar un comando de Windows dependiendo de nuestro servidor de Jenkins y escribiremos build.bat (build.sh en Linux)
  5. Pulsamos en guardar

A continuación crearemos el archivo build.bat en la raíz de nuestro proyecto ngpro y escribiremos lo siguiente

call npm install -g grunt grunt-cli
call npm install
call bower install
call grunt

La primera línea instalará las herramientas grunt y grunt-cli en el sistema. La segunda instalará todas las dependencias de node de nuestro proyecto ubicadas en package.json. La tercera instalará las dependencias Javascript. Y por fin la última ejecutará la tarea por defecto de grunt de nuestro proyecto.

Cuando hagamos push al repositorio el servidor comenzará la ejecución. En caso contrario podemos lanzarlo a mano o programarlo.

Ahora debemos mirar en la salida de la consola y comprobar que las tareas se han ejecutado. Si se ha producido algún fallo lo resolveremos.

Mostrar la cobertura y los resultados de los test

Primero instalaremos los plugins de karma

npm install karma-coverage --save-dev
npm install karma-junit-reporter --save-dev

A continuación añadiremos las siguientes lineas al fichero karma.conf.js

    preprocessors: {
      'app/scripts/**/*.js': ['coverage']
    },
    coverageReporter: {
      type : 'cobertura',
      dir : 'coverage/'
    },
    reporters: ['coverage', 'junit'],
    junitReporter: {
      outputFile: 'test-results.xml',
      suite: ''
    },

deben quedar al mismo nivel de anidación que files.

Ahora ponemos las siguientes dos lineas al final del archivo .gitignore para evitar subir los informes de cobertura y junit al control de código fuente y después subiremos los cambios al repositorio.

coverage
test-results.xml

Por último vamos a publicar los resultados en Jenkins

  1. Instalamos el plugin Jenkins Cobertura Plugin
  2. Accedemos a la configuración de la tarea en Jenkins
  3. En la sección Acciones para ejecutar después añadimos Publicar informes de Cobertura y como patrón introducimos coverage/**/*.xml
  4. En la misma sección añadimos Publicar los resultados de tests JUnit y en el apartado Ficheros XML con los informes de tests introducimos test-results.xml

Si ejecutamos de nuevo la tarea podremos ver el completo informe de cobertura y los resultados de los test.

Los test e2e

Los test de integración requieren que todos los componentes del sistema estén listos y funcionando. Por ello, para ejecutar los test de extremo a extremo vamos a necesitar realizar un despliegue completo de nuestra aplicación.

Por supuesto este curso no puede contemplar todas las posibilidades de despliegue y configuraciones necesarias para cualquier aplicación pero sí me gustaría dar algunos consejos generales.

**Mantener una versión con lo último: ** Disponer de una versión actualizada al momento no solo nos permitirá ejecutar los test e2e, también mostrar a otros departamentos las novedades y discutir las implementaciones tal y como se realizan.

**Jenkins puede ayudarnos a automatizar el despliegue: ** Jenkins escucha nuestro repositorio de código fuente y ejecuta el código que le indiquemos, por lo que es óptimo para centralizar el despliegue.

**Despliega de forma automática: ** Para ello vas a necesitar un sistema de despliegue completamente automatizado, que se ocupe también de actualizar los componentes de los que dependa de nuestra aplicación. Por ejemplo las modificaciones necesarias en nuestra base de datos. Existen herramientas específicas para esto como Chef o Puppet.

**Escribe al menos un test e2e por pantalla: ** Por supuesto es mejor escribir varios tests por cada historia de usuario pero si escribimos un test por cada pantalla ya tendremos confirmación de que todas las pantallas cargan correctamente, o lo que es lo mismo, cuando algún cambio fastidie cualquier pantalla tendremos notificación antes de que nadie lo vea.

Una vez nuestra aplicación esté desplegada ejecutar los test e2e es tan sencillo como ejecutar grunt test:e2e

Ejercicios

En este punto, tu cobertura debería estar en el 100% o muy cerca, si no lo está revisa en el informe de cobertura el problema y añade las comprobaciones que falten.