Mikel
(64 comentarios, 192 entradas)
Este usuario no ha compartido ninguna información de perfil
Entradas de Mikel
Integración continua: Metodologías y convenciones
0Ahora que ya tenemos gran parte del software instalado, vamos a tratar algo un poco más aburrido, pero necesario: las Metodologías.
Una metodología en programación, es el conjunto de métodos que se utilizan para llevar a cabo un desarrollo. Estos métodos se acuerdan y/o definen antes de empezar un proyecto. Y van desde la organización de la estructura del proyecto, al despliegue y futuro mantenimiento, pasando por el reparto de tareas, las reuniones de producción, etc.
Muchas de estas tareas ya están integradas en metodologías ágiles como XP o Scrum, que seguro conoceréis. Si por el contrario, no conocéis estas metodologías, os recomiendo la lectura de los dos enlaces anteriores, y a partir de ahí la lectura de varios libros.
No os voy a recomendar ninguna metodología, ya que es algo personal y que cada uno debe estudiar cuál es la más conveniente para sus proyectos o empresa.
Las convenciones son un conjunto de reglas aceptadas por los desarrolladores, que, por ejemplo, permiten que el código tenga siempre la misma estructura independientemente de quién haya programado qué. Aquí entrarían los Coding Standards de los que hablamos en otro post.
Dentro de las convenciones también se acuerdan las versiones que tendrá el proyecto, las ramas del repositorio, la estructura de directorios del proyecto, etc. Infinidad de detalles que permiten que podamos trabajar en equipo sabiendo que todo sigue las mismas reglas, de esta forma ahorramos muchísimo tiempo.
Una vez que se dispone de una metodología y/o un conjunto de convenciones definidas podremos aplicarlas a todos los proyectos que vayamos desarrollando. Pero para evitar tener que hacerlo a mano, podemos automatizar todo el proceso, desde la creación del repositorio hasta la elección de los plugins o módulos del CMS que elijamos (o el framework).
Post relacionados
Tema Mystique para WordPress provoca el error child pid XXXXX exit signal Segmentation fault (11)
0Estoy seguro que conoceréis este tema para WordPress, el cual fue uno de los más valorados hace ya algunos años, de hecho este blog lo usa actualmente, aunque por desgracia la empresa que lo desarrolló lleva varios años sin mantenerlo, y eso provoca que aparezcan errores que antes no aparecían, por culpa de los avances en otras aplicaciones de las que depende este tema, como en nuestro caso, de PHP.
Bien, voy al grano: Hace varias semanas cambié el blog de servidor y de pronto, al entrar en un post, el blog se quedaba en blanco. No se mostraba contenido. Y en Chrome aparecía el error: ERR_INCOMPLETE_CHUNKED_ENCODING. Estoy seguro, que si te ha pasado, habrás exclamado la misma frase que yo: ¿Pero que coño es eso?.
Mirando los logs del blog, encontré el error: child pid XXXXX exit signal Segmentation fault (11), a lo que exclamé la misma expresión anterior, pero añadiendo un «¡Ostia puta!» al principio.
El segundo error es el importante. Es el que nos dice que algo se ha jodido en PHP. Pero… ¿Por qué? y lo más importante ¿El qué?.
Después de muchas pruebas, vi que el error se estaba generando en el tema Mystique, y más concretamente en la plantilla single.php.
Indagando más sobre el código conseguí llegar a la fuente del problema: cuatro putos ampersand (&) de los cojones que me han jodido un fin de semana entero con la tontería. El error es debido a la versión de PHP. En el servidor anterior era la 5.2, y en el actual es la 5.4.
Solución
Os explico la solución que es bastante sencillita:
En los archivos atom-core.php y AtomObjectPost.php busca la función «separate_comments», te deben aparecer dos resultados en cada archivo. Verás que delante de la función tiene un ampersand (&), elimínalo (con voz de El Padrino: «Que parezca un accidente»). Y con el resto de resultados igual. Guarda y solucionado.
Post relacionados
Integración continua: Instalación de Subversion y Git
0Hoy vamos con algo que supongo ya conoceréis, pero que para esta guía es imprescindible: Los repositorios.
Los repositorios, dicho de una forma sencilla: es un lugar donde guardar y mantener un histórico de los cambios que se realizan en el software o proyecto en el que estás trabajando. De momento solo me centraré en su instalación y en una pequeña configuración que será necesaria para lo que aun queda de esta guía.
Instalación de Subversion
Instalar los paquetes necesarios
apt-get install subversion libapache2-svn subversion-tools
Los repositorios los guardaremos en el siguiente directorio:
/var/repos
Se utilizará la url svn.ic.net para obtener los repositorios. Para ello hay que añadir un virtualhost con la siguiente información (etc/apache2/sites-enabled):
ServerName svn.ic.net DocumentRoot /var/www/svn.ic.net <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/repos> Options Indexes FollowSymLinks MutiViews AllowOverride None Order allow,deny allow from all </Directory>
Añadir el dominio al archivo /etc/hosts, si no el sistema devolverá un 200 OK pero no se podrá trabajar con el repositorio.
Todos los repositorios se deberán añadir a este archivo utilizando los tags <Location></Location>, ejemplo:
<Location "/mediawiki"> DAV svn SVNPath /var/repos/mediawiki </Location>
También se pueden añadir los repositorios en archivos separados en /etc/apache2/repos e incluirlos dentro del virtualhost de svn.ic.net, añadiendo la siguiente línea:
Include /etc/apache2/repos
Instalación de Git
Para instalar Git ejecuta el siguiente comando:
apt-get install git
El virtualhost que usaremos será el mismo que el de Subversion, con lo que no tenemos que hacer nada más con git.
Post relacionados
Integración continua: PHP Depend, realizando métricas de nuestras aplicaciones
0PHP Depend es una aplicación derivada de JDepend para Java, que genera una serie de gráficos de nuestras aplicaciones para poder realizar un seguimiento sobre la calidad de nuestro software. Para que te hagas una idea, esta aplicación nos permite saber la complejidad de un método, a través de la suma de sus estamentos (if, for, etc.), este dato, comparado con el resto del código, nos permite saber si un método está optimizado o es demasiado complejo y habría que factorizarlo.
Veamos como se instala.
Para instalar PHP_depend primero es necesario que PEAR descubra el canal desde donde se descargará la aplicación.
pear channel−discover pear.pdepend.org
A continuación mostramos una lista de los paquetes disponibles:
pear remote−list −c pdepend
Instalamos:
pear install pdepend/PHP_Depend
Es necesario instalar algunos paquetes más. Primero indicamos a PEAR que descubra el siguiente canal:
pear channel−discover pear.xplib.de
A continuación instalamos el siguiente paquete:
pear install xplib/PHP_CodeSniffer_CommentParser2−0.1.5
Que es necesario para instalar el siguiente paquete:
pear install xplib/PHP_CodeSniffer_Standards_Zeta−0.2.0
Que también es necesario para instalar el siguiente paquete:
pear install pdepend/PHP_CodeSniffer_Standards_PDepend2
Por último instalamos un paquete que se comunicará con el issue tracker (o eso indica):
pear install pdepend/PHP_Depend_Log_Arbit
Para probarlo podéis ejecutar este comando desde la consola:
pdepend −−summary−xml=/tmp/summary.xml −−jdepend−chart=/tmp/jdepend.svg −−overview−pyramid=/tmp/pyramid.svg /usr/local/share/pear/PDepend
Os generará varios gráficos y un archivo xml del código de la misma herramienta, pdepend.
Post relacionados
Integración continua: PHPMD, detectando problemas en el código
0PHPMD o PHP Mess Detector, es una herramienta que permite detectar posibles bugs, código poco optimizado, expresiones demasiado grandes, etc. Es una herramienta muy útil para controlar la calidad de nuestro software.
Esta herramienta es hija de PMD, una herramienta para la calidad del código en Java. Podéis informaros de más características de PHPMD en su web: http://phpmd.org/
La instalación es muy sencilla:
apt−get install imagemagick php5−imagick pear channel−discover pear.phpmd.org pear channel−discover pear.pdepend.org pear install −−alldeps phpmd/PHP_PMD
Para ejecutar PHPMD tu necesitas darle los archivos a parsear, un formato para la salida y las reglas a usar. Ejemplo:
phpmd . html codesize,unusedcode,naming,design −−reportfile ../messdetector.html −−exclude Tests/
Post relacionados
Integración continua: phpcpd, detectando el código duplicado
0PHPCPD es una aplicación que nos permite detectar fragmentos de código duplicado o muy parecido, de tal forma que podamos optimizarlo creando métodos o funciones que eliminen esa duplicidad.
Su instalación es simple:
pear channel−discover pear.phpunit.de pear channel−discover components.ez.no pear channel−discover pear.symfony.com pear channel−discover pear.netpirates.net pear install phpunit/phpcpd
Para ejecutar usamos:
phpcpd −−log−pmd ruta−donde−se−guardará−el−resultado−del−analisis/cpd.xml directorio−o−archivo−a−analizar
Post relacionados
Integración continua: Coding standards para PHP
0¿Qué son los coding standards?
Los coding standards son estándares de código, dicho de otra manera, son reglas que indican como debe escribirse el código, cuantos espacios debe tener una tabulación, en qué línea debe ubicarse un «else», cómo debe escribir una función, método o clase, etc.
Los coding standards se utilizan principalmente en los CMS como WordPress o Drupal, esto permite que el código sea mucho más legible por diferentes personas.
La aplicación que vamos a instalar es PHPCS que nos permitirá revisar el código y comprobar si estamos siguiendo el standard correctamente.
Instalación
La instalación es sencilla, como prácticamente la mayoría de herramientas que utilizaremos para nuestro servidor de integración.
sudo−−DVFMTSC−−> apt−−DVFMTSC−−>−get−−DVFMTSC−−> install−−DVFMTSC−−> php−−DVFMTSC−−>−pear
sudo−−DVFMTSC−−> pear−−DVFMTSC−−> install−−DVFMTSC−−> php_CodeSniffer
En Ubuntu la aplicación se instala en /usr/share/php/PHP.
Una vez instalado, será necesario dar permisos de lectura al usuario www-data:
cd−−DVFMTSC−−> /usr/share/php/PHP sudo−−DVFMTSC−−> chown−−DVFMTSC−−> −−DVFMTSC−−>−R−−DVFMTSC−−> www−−DVFMTSC−−>−data:www−−DVFMTSC−−>−data−−DVFMTSC−−> CodeSniffer sudo−−DVFMTSC−−> chown−−DVFMTSC−−> www−−DVFMTSC−−>−data:www−−DVFMTSC−−>−data−−DVFMTSC−−> CodeSniffer.php sudo−−DVFMTSC−−> chmod−−DVFMTSC−−> −−DVFMTSC−−>−R−−DVFMTSC−−> 775−−DVFMTSC−−> CodeSniffer sudo−−DVFMTSC−−> chmod−−DVFMTSC−−> −−DVFMTSC−−>−R−−DVFMTSC−−> 775−−DVFMTSC−−> CodeSniffer.php
Con esto ya lo tenemos instalado.
En futuros post, instalaremos algunos Coding Standards y veremos el funcionamiento de esta herramienta.
Post relacionados
Integración continua: Instalando y configurando Redmine
0¿Qué es Redmine?
Redmine es una herramienta de gestión de proyectos, nos permite mantener un control de las tareas y errores a solucionar en ellos. Esta herramienta nos permite organizar los proyectos por versiones, o por springs si utilizas alguna metodología ágil. Dispone de gráficos Grantt, wiki, acceso al repositorio del proyecto, etc.; muchísimas características que nos facilitan el día a día en el desarrollo de proyectos.
Instalando Redmine
La instalación de Redmine es bastante sencilla, utiliza el siguiente comando:
apt−get install redmine redmine−mysql libapache2−mod−passenger
Una vez instalado y configurado creamos una carpeta en /var/www llamada redmine:
mkdir /var/www/redmine
A continuación, creamos un enlace simbólico con el contenido que se mostrará en el navegador:
ln −s /usr/share/redmine/public /var/www/redmine
Accediendo a Redmine desde un subdominio
Ahora configuraremos un subdominio para poder acceder a Redmine.
Comprueba que tienes activado el módulo passenger en apache2:
a2enmod passenger
Instala «bundle», una gema de Ruby:
gem install bundle
Da permisos al usuario www-data:
usermod −aG root www−data chmod 775 −R /usr/share/redmine
Modifica el archivo /etc/apache2/mods-available/passenger.conf añadiendo la siguiente línea:
PassengerDefaultUser www−data
Crea el VirtualHost en /etc/apache2/sites-available, con el siguiente contenido:
*:80> ServerName redmine.ic.net DocumentRoot /var/www/redmine /var/www/redmine> AllowOverride all Options −MultiViews PassengerResolveSymlinksInDocumentRoot on
Reinicia apache:
/etc/init.d/apache2 restart
Al igual que hicimos con Jenkins, será necesario que modifiques tu archivos hosts y añadas la siguiente línea:
192.168.1.40 redmine.ic.net
Sustituye la IP por la tuya.
Ahora, si escribes la dirección de Redmine en tu navegador podrás acceder a tu gestor de proyectos. El usuario para el administrador es «admin» y su contraseña «admin».
A partir de aquí, es cosa tuya. Crea algunos proyectos, añade algunas versiones, tareas, errores, etc.
Post relacionados
Integración continua: instalando y configurando Jenkins
0Ya vistes la checklist del último post: https://www.interadictos.es/2014/08/11/integracion-continua-primeros-pasos/, ahora vamos a empezar a instalar y configurar algunas herramientas, para ir poco a poco uniéndolas.
¿Qué es Jenkins?
Jenkins es nuestro servidor de integración continua. Es una aplicación que permite automatizar una lista de tareas que le indiquemos. Estas tareas pueden ser iniciadas de forma manual, pero lo habitual será llamar a la primera tarea de la lista cada vez que se realice un commit en el repositorio, e ir concatenando tareas hasta finalizar la lista completa. Tranquilo si no te haces aun a la idea, a medida que vayamos avanzando con esta guía lo iras entendiendo.
Instalando Jenkins
Primero descargamos la key del servidor de Jenkins, que nos permitirá añadirlo al archivo sources.list:
wget −q −O − class="external free" style="color: #663366;" href="http://pkg.jenkins−ci.org/debian/jenkins−ci.org.key" rel="nofollow">http://pkg.jenkins−ci.org/debian/jenkins−ci.org.key | sudo apt−key add −
A continuación lo añadimos al archivo sources.list. Puedes añadirlo de esta manera o añadirlo a mano:
sudo sh −c 'echo deb class="external free" style="color: #663366;" href="http://pkg.jenkins−ci.org/debian" rel="nofollow">http://pkg.jenkins−ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
Actuliazamos la lista de paquetes e instalamos:
sudo apt−get update sudo apt−get install jenkins
Ahora necesitamos poder acceder a él a través de la red, para ello vamos a crear el subdominio jenkins.ic.net. Para poder acceder por el subdominio jenkins.ic.net es necesario crear un virtual host con proxy inverso, para ello instalamos varios módulos de Apache2 necesarios:
sudo a2enmod proxy sudo a2enmod headers sudo a2enmod deflate sudo a2enmod proxy_http
Ahora creamos un virtualhost en /etc/apache2/sites-available llamado 001-jenkins.ic.net.conf (Podeis usar el nombre que quieras), con el siguiente contenido
*:80> ServerName jenkins.ic.net *> Order deny,allow Allow from all ProxyPreserveHost On ProxyPass / class="external free" style="color: #663366;" href="http://localhost:8080/" rel="nofollow">http://localhost:8080/ ProxyPassReverse / class="external free" style="color: #663366;" href="http://localhost:8080/" rel="nofollow">http://localhost:8080/
La ruta habitual para acceder a Jenkins sería http://localhost:8080, si pudieramos acceder desde el mismo servidor de integración continua, si lo hicieramos desde fuera sería http://ic.net:8080. Para evitar tener que recordar el número de puerto utilizamos el archivo anterior. Nos facilitará la vida.
Ahora creamos un enlace simbólico de este archivo en /etc/apache2/sites-enabled.
sudo ln −s /etc/apache2/sites−available/001−jenkins.ic.net.conf /etc/apache2/sites−enabled/001−jenkins.ic.net.conf
Reiniciamos apache con:
sudo /etc/init.d/apache2 reload
En nuestro ordenador tendremos que editar el archivo hosts, para indicarle al pc a qué ip debe dirigirse para encontrar el alojamiento de jenkins.ic.net. Añadimos la siguiente línea al archivo (sustituye la IP por la de tu servidor de integración continua):
192.168.1.40 jenkins.ic.net
Ahora podrás escribir el subdominio en el navegador para acceder a la página principal de Jenkins.
A partir de aquí te recomiendo que explores todas las opciones de Jenkins, además de echarle un ojo a la documentación: https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins
En la administración de Jenkins puedes acceder al apartado de plugins, revísalos y podrás hacerte una idea de las posibilidades de esta herramienta.
Post relacionados
Integración continua: primeros pasos
0Ya expliqué la semana pasada qué era eso de la integración continua, pues bien, ahora toca dar los primeros pasos. Obviamente necesitamos un ordenador que haga de servidor, una máquina virtual, o bien un servidor de verdad si lo que pretendes es utilizar de forma profesional.
Como sistema operativo para esta guía utilizaré Ubuntu 14.04. Tú puedes usar el que quieras pero tal vez te resulte más complicado encontrar algún software, con lo que tendrás que investigar más.
El hardware a usar dependerá de las necesidades que tengas, o para lo que quieras un servidor de integración continua. En mi caso utilizo un pc de gama baja con micro AMD, 8 GB de RAM, sin teclado, ratón, ni monitor (y por tanto sin escritorio gráfico), y con una tarjeta WiFi para conectar a internet. Y esto, para mí, es suficiente. Si lo fueses a usar en un grupo de desarrollo, lo mejor es usar un VPS o un servidor dedicado, ya que mejorará en gran medida el rendimiento.
Ya tenemos el hardware listo y nuestro sistema operativo está instalado, por tanto vamos a iniciar los primeros pasos para crear nuestro servidor de integración continua.