Behat, Mink, Zombie.js y Jenkins

Hace un tiempo que estoy teniendo problemas para que jenkins pueda construir los proyectos que utilizan Behat, Mink y Zombie.js. daba error porque no encontraba los módulos.

test:
     [exec] 
     [exec] 
     [exec]                                                                   
     [exec]   [RuntimeException]                                              
     [exec]   Server process has been terminated: (1) [                       
     [exec]   module.js:337                                                   
     [exec]       throw new Error("Cannot find module '" + request + "'");    
     [exec]             ^                                                     
     [exec]   Error: Cannot find module 'zombie'                              
     [exec]       at Function._resolveFilename (module.js:337:11)             
     [exec]       at Function._load (module.js:279:25)                        
     [exec]       at Module.require (module.js:359:17)                        
     [exec]       at require (module.js:375:17)                               
     [exec]       at Object.<anonymous> (/tmp/mink_nodejs_serverYMaRqw:2:16)  
     [exec]       at Module._compile (module.js:446:26)                       
     [exec]       at Object..js (module.js:464:10)                            
     [exec]       at Module.load (module.js:353:31)                           
     [exec]       at Function._load (module.js:311:12)                        
     [exec]       at Array.0 (module.js:484:10)                               
     [exec]   ]                                                               
     [exec]                                                                   
     [exec] 
     [exec] 
     [exec] behat [--init] [-f|--format="..."] [--out="..."] [--lang="..."] [--[no-]ansi] [--[no-]time] [--[no-]paths] [--[no-]snippets] [--[no-]snippets-paths] [--[no-]multiline] [--[no-]expand] [--story-syntax] [-d|--definitions="..."] [--name="..."] [--tags="..."] [--cache="..."] [--strict] [--dry-run] [--rerun="..."] [--append-snippets] [features]
     [exec] 
     [exec]

Después de mucho pegarme, he dado con la solución:

Era más sencillo de lo que parecía.

Como root, abrimos el archivo ‘/etc/profile’ y añadimos lo siguiente al final del fichero:

NODE_PATH="/usr/local/lib/node_modules"

Una vez hayamos guardado, cargamos el contenido para que sea accesible:

source /etc/profile

Y listo, en jenkins, lanzamos la contrucción del proyecto, y todo irá sobre ruedas.

 

¿Cuál era mi problema?

En vez de editar el archivo /etc/profile, estaba editando /etc/environment, como véis, un sutil error, pero que me ha hecho volverme loco.

 

Publicado en General | Deja un comentario

BDD e Integración continua en Symfony 2 con Behat, Mink, PHPUnit y Jenkins

Últimamente estoy bastante liado con el proyecto de final de carrera, y he conseguido hacer avances interesantes.

Ya tengo el servidor de integración continua funcionando y haciendo su trabajo.

Como a mi me costó un poco ponerlo todo en marcha, he decidido subirlo aquí por si a alguien le puede ayudar.

Aquí tenéis el build.xml [actualizado 30/09/2012]:

<project name="OpenGestia" default="build" basedir=".">
<property name="output" location="${basedir}/buildOutput/"/>

<target name="init">
<mkdir dir="${output}"/>
<mkdir dir="${output}/phpcs/"/>
<mkdir dir="${output}/pdepend/"/>
<mkdir dir="${output}/coverage/"/>
<mkdir dir="${output}/features/"/>
</target>
<target name="vendors"
description="Update vendors">
<exec executable="composer" failonerror="true">
<arg value="update" />
</exec>
<exec executable="app/console" failonerror="true">
<arg value="cache:clear" />
</exec>

</target>
<target name="build" depends="init, vendors, phpcs, phpmd, phpcpd, pdepend, unitTest, test">
</target>

<target name="testing" depends="init, vendors, unitTest, test">
</target>

<target name="unitTest">
<exec dir="${basedir}" executable="phpunit" failonerror="true">
<arg line="-c app/phpunit.xml --coverage-html=${output}/coverage/ --coverage-clover=${output}/coverage/coverage.xml --log-junit=${output}/phpunit.xml"/>
</exec>
</target>

<target name="test">
<exec dir="${basedir}" executable="${basedir}/bin/behat" failonerror="true">
<arg line="@OpenGestiaBundle --lang=es --format='html,junit' --out='${output}/behat.html, ${output}/features/'"/>
</exec>
</target>

<target name="testing-dev">
<exec dir="${basedir}" executable="${basedir}/bin/behat" failonerror="true">
<arg line="@OpenGestiaBundle"/>
</exec>
<exec dir="${basedir}" executable="phpunit" failonerror="true">
<arg line="-c app/phpunit.xml"/>
</exec>
</target>

<target name="phpcs">
<exec executable="phpcs">
<arg line="--report=checkstyle --report-file=${output}/phpcs/checkstyle.xml --standard=Zend --extensions=php ${basedir}/src" />
</exec>
</target>

<target name="phpmd">
<exec executable="phpmd">
<arg line="
./src xml codesize,unusedcode,naming,design --reportfile ${output}/messdetector.xml --exclude Tests/
" />
</exec>
</target>

<target name="phpcpd">
<exec executable="phpcpd">
<arg line="--exclude app/cache --exclude vendor/ --log-pmd ${output}/phpcpd.xml ." />
</exec>
</target>

<target name="pdepend">
<exec executable="pdepend">
<arg line="
--jdepend-xml=${output}/pdepend/jdepend.xml
--jdepend-chart=${output}/pdepend/dependencies.svg
--overview-pyramid=${output}/pdepend/overview-pyramid.svg
--ignore=app/cache/,vendors/
.
" />
</exec>
</target>
</project>

Ahora mismo hay 16 tests y 6 escenarios en verde.

El código de la aplicación lo podéis ver en: https://bitbucket.org/vicentgodella/opengestia

[Edito 01/08/2012] He actualizado con imágenes de jenkins.

Esas nubes que véis son por la poca cobertura de código, pero los tests pasan perfectamente.

Ahora mismo la cobertura es del 15% según phpunit, pero la verdad es que hay muchos métodos de las clases que es absurdo testear.

Las dos tareas que aparecen en las imágenes son del mismo proyecto, pero la de Test no hace análisis estático del código, y la otra sí, por tanto tarda mucho menos.

Solo me falta averiguar como mostrar los reportes de behat en formato html, porque no encuentro la manera de hacerlo, y la verdad es que están muy chulos, :(

EDITO [30/09/2012]: Ya he conseguido añadir los informes de behat, el problema parece ser que era la versión de jenkins que tenía instalada. He actualizado a la última versión, y ya funciona correctamente.

Informe behat e informe behat extendido.

Publicado en General | Etiquetado , , , , , | 3 comentarios

Servicio DNS con Amazon Route 53

En visto que hay gente que tiene dudas de cómo utilizar el servicio Route 53 de Amazon, he decidido escribir un breve post explicando como lo he hecho yo.

Entramos en la consola de Amazon AWS, y seleccionamos Route 53.

Una vez estemos dentro, hacemos click en ‘Create Hosted Zone’, introducimos el dominio de la forma ‘midominio.es’ y hacemos click en el botón que hay bajo a la derecha de la pantalla que pone ‘Create Hosted Zone’.

Ahora ya tenemos la zona de nuestro dominio creada.

[EDITO] Los dns que nos ha dado amazon los debemos poner en la configuración de nuestro proveedor del dominio, si no, el resto no funcionará.

La seleccionamos y le damos al boton ‘Go to Record Sets’

Por defecto nos vienen configurados los registros NS y SOA. En principio, no hay que tocarlos.

Para apuntar el dominio a nuestra ip (ya sea una instancia de amazon o un servidor en otro sitio):

Le damos a ‘Create Record Set’, seleccionamos Type: A e introducimos la ip en Value.

Una vez tenemos todo, guardamos con ‘Create Record Set’, y hemos acabado.

Hemos de esperar unas horas a que se haga efectiva la propagación de las dns, y tendremos disponible el servicio.

Información de facturación:

Cada zona creada nos cuesta 0,5$ al mes fijo (para las primeras 25 zonas), más:

  • 0,500 USD por cada millón de consultas – primeros mil millones de consultas / mes
  • 0,250 USD por cada millón de consultas – más de mil millones de consultas / mes
Publicado en General | Etiquetado , , , | Deja un comentario

Hello world!

Después de mucho tiempo dándole vueltas, me he decidido a abrir un blog, para ir escribiendo lo que se me ocurra, como hace todo el mundo en sus blogs.

Mi intención es, en principio, ir escribiendo cosas que voy descubriendo sobre mi profesión: Códigos de ejemplo, librerías que encuentre útiles, etc.

En este primer post no voy a escribir sobre nada concreto, pero quiero presentarme, por si alguien lee esto, que sepa quién soy y que hago.

Mi nombre es Vicent Soria y me dedico al desarrollo de software, ahora mismo, al desarrollo web, pero iré por donde la vida me lleve, me gusta mucho conocer nuevas tecnologías y hacer cosas nuevas.

Podéis encontrarme en twitter bajo @vicentgodella, en linkedin o en vicentgodella {at} gmail.com

Publicado en General | Deja un comentario