Setting up a Php Continuous integration environment in Centos 6

As part of my job I need to create a continuous integration environment for my develops in Php.

first I installed Gitlab and then I installed Jenkins using the web page tutorial ( http://jenkins-ci.org/ ).

you need to have enabled EPEL repos http://fedoraproject.org/wiki/EPEL and rpm Fusion repos聽http://rpmfusion.org/ .

when you have Jenkins installed you will need install the needed packages open a root terminal and write:

yum install ant php php-phpunit-phploc php-pdepend-PHP-Depend.noarch php-phpmd-PHP-PMD.noarch php-phpunit-phpcpd.noarch php-phpunit-phploc.noarch php-pear-PHP-CodeSniffer.noarch php-phpunit-PHP-CodeBrowser.noarch

The next step is add the php template into Jenkins CI

  • cd /var/lib/jenkins/jobs
  • mkdir php-template
  • cd php-template
  • wget https://raw.github.com/sebastianbergmann/php-jenkins-template/master/config.xml
  • cd ..
  • chown -R jenkins:jenkins php-template/
  • /etc/init.d/jenkins restart

now we can create a new php project based on the php-template 馃檪

Installing PhpUnderControl in Centos 6

PhpUnderControl is a way to use CI under

Step 1: Enable EPEL repo and Remi repo

yum install wget

rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

enable remi repository editing file /etc/yum.repos.d/remi.repo

enabled=1

Step2: Install Java and other stuff

yum install unzip

yum install ant

yum install java-1.6.0-openjdk-devel

yum install php-phpunit-PHP-CodeCoverage.noarch

yum install phpdoc.noarch

yum install php-phpunit-phpcpd.noarch

yum install php-phpunit-phploc.noarch

yum install php-phpunit-PHPUnit.noarch

wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/enterprise/5/remi/x86_64/php-pear-Console-CommandLine-1.1.3-3.el5.remi.noarch.rpm

rpm -i php-pear-Console-CommandLine-1.1.3-3.el5.remi.noarch.rpm

yum install php-phpunit-PHP-CodeBrowser

yum install php-phpmd-PHP-PMD.noarch

yum install php-ezc-Graph.noarch

yum install git

yum install subversion

Step3: Download CruiseControl

cd /opt

wget http://downloads.sourceforge.net/project/cruisecontrol/CruiseControl/2.8.4/cruisecontrol-bin-2.8.4.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fcruisecontrol%2Ffiles%2FCruiseControl%2F2.8.4%2F&ts=1314111366&use_mirror=heanet

unzip cruisecontrol-bin-2.8.4.zip

mv cruisecontrol-bin-2.8.4 cruisecontrol

rm cruisecontrol-bin-2.8.4.zip

cd cruisecontrol

step 4 fix problem with JAVA_HOME

open cruisecontrol.sh with your favorite editor (vim, emacs, nano, pico, gedit …) and set JAVA_HOME value, your file begin聽 must look like this:

<br />
&lt;br /&gt;#!/usr/bin/env bash&lt;br /&gt;<br />
JAVA_HOME=&quot;/usr/lib/jvm/java-1.6.0-openjdk&quot;&lt;br /&gt;<br />
 #################################################&lt;br /&gt;<br />
 # CruiseControl, a Continuous Integration Toolkit&lt;br /&gt;<br />
 # Copyright (c) 2001, ThoughtWorks, Inc.&lt;br /<br />
&gt; # 200 E. Randolph, 25th Floor&lt;br /&gt;<br />
 # Chicago, IL 60601 USA&lt;br /&gt;<br />
 # All rights reserved.&lt;br /&gt;<br />

step 5

open needed ports

step 6

Download PhpUnderControl

cd /opt

wget http://github.com/phpundercontrol/phpUnderControl/zipball/0.6.1beta1

mv 0.6.1beta1 0.6.1beta1.zip

unzip 0.6.1beta1.zip

mv phpundercontrol-phpUnderControl-04197bb/ phpundercontrol

step 7

Install PhpUnderControl over cruiseControl

cd phpundercontrol

cd bin

./phpuc.php install /opt/cruisecontrol/

Basic tools for analyze PHP Code

If you get enrollment into a new work to maintain聽 Php project with millions of thousands of聽 lines of code written these tools can be one of your best friends.

phploc: phploc is a tool for quickly measuring the size of a PHP project.

install on fedora 15:

su

yum install php-phpunit-phploc.noarch

usage:

phploc <php source code dir>

phpdcd: phpdcd is a Dead Code Detector (DCD) for PHP code. It scans a PHP project for code that is no longer used.

install on fedora 15:

su

yum install php-phpunit-phpdcd.noarch

usage:

phpdcd聽 <php source code dir>

phpcpd: phpcpd is a Copy/Paste Detector (CPD) for PHP code. It scans a PHP project for duplicated code.

install on fedora 15:

su

yum install php-phpunit-phpcpd.noarch

usage:

phpcpd <php source code dir>

if your project is enormous you will need another key tools: Hope, Faith and Hard Work

more info about these tools and more at http://sebastian-bergmann.de/software/

P4: Configuraci贸n de una plataforma de desarrollo de aplicaciones basadas en web

El objetivo de esta pr谩ctica es instalar en una m谩quina todos los servicios necesarios para desarrollar un proyecto web basado en PHP y MySQL.

Primer Apartado:

  1. Instalaci贸n y configuraci贸n de Apache
  2. Instalaci贸n y configuraci贸n de PHP
  3. Instalaci贸n de MySQL
  4. Instalaci贸n de phpMyAdmin

Segundo Apartado (archivo de configuraci贸n de Apache):

5. Comentar brevemente qu茅 debemos realizar para que Apache ejecute correctamente p谩ginas escritas en PHP.

una vez configurado apache debemos instalar PHP con los m贸dulos que necesitemos y en caso de no utilizar un instalador autom谩tico debemos indicarle al servidor apache los par谩metros de configuraci贸n para que cargue el interprete PHP y configurar las variables necesarias para eso basta con introducir las siguientes directivas:
PHPIniDir ruta <– indica la carpeta donde se encuentra el archivo php.ini que nos permite configurar el comportamiento de PHP
LoadModule “ruta a la librer铆a php5apache2_2.dll que contiene el modulo php” <– indica la librer铆a donde se encuentra compilado el modulo de php y ordena al servidor apache cargarlo
Si todos los par谩metros introducidos son correctos basta con reiniciar el servidor apache para que este vuelva a leer el archivo de configuraci贸n y pueda comenzar a interpretar las paginas PHP.

6. Respecto al archivo de configuraci贸n de Apache (httpd.conf):

  • a. 驴qu茅 objetivo tiene la secci贸n de DirectoryIndex? Pon un ejemplo y com茅ntalo.
    • Establece el archivo a proporcionar cuando el navegador proporciona una ruta incompleta, por ejemplo聽 la conexi贸n a http://httpd.apache.org/docs/1.3/mod/ enviara la pagina http://httpd.apache.org/docs/1.3/mod/index.html siempre y cuando exista ese fichero y en la lista de聽 DirectoryIndex la subcadena index.html este antes de cualquier archivo existente, en caso de que no聽 exista ningun archivo en la lista de cadenas la respuesta a la petici贸n sera el contenido del directorio, (en caso de que existan restricciones en el contenido del directorio se mostrara una pagina forbidden).
  • b. 驴d贸nde especificar铆as una capeta distinta a htdocs para servir archivos?
    • Si lo que queremos es utilizar una carpeta distinta a la que viene configurada por defecto simplemente debemos de cambiar el valor asociado a la directiva DocumentRoot聽 especific谩ndole la carpeta donde queremos situar la ra铆z del servidor httpd, hemos de recordar que el usuario asociado al servidor apache tenga los permisos garantizados en caso contrario sufrir谩 un error de acceso denegado.
  • c. 驴para qu茅 sirve el par谩metro Timeout?
    • Timeout es una directiva que establece un contador en segundos que apache usara para gestionar los tiempos m谩ximos de espera para:
      • tiempo de espera para una petici贸n get .
      • tiempo de espera para la recepci贸n de paquetes TCP en una petici贸n POST o PUT .
      • tiempo de espera para enviar un ACK para un paquete TCP.
  • d. 驴c贸mo configurar铆as el servidor para un puerto distinto del 80?
    • Abrimos el archivo httpd.conf y reemplazamos la linea que pone Listen 80 por Listen “puerto deseado”.

Tercer Apartado (archivo de configuraci贸n de PHP):

7. Descripci贸n del par谩metro error_reporting. Pon alg煤n ejemplo

La directiva error_reporting define el nivel de informe de errores se puede establecer con los valores de la siguiente lista:

  • E_ERROR聽聽 聽聽聽 聽聽聽 聽1聽聽 聽Informa de errores en tiempo de ejecuci贸n, como problemas de asignaci贸n de memoria. detiene la ejecuci贸n del c贸digo
  • E_WARNING聽聽 聽聽聽 聽2聽聽 聽Informa de advertencias en tiempo de ejecuci贸n (no errores fatales), la ejecuci贸n del script no se detiene
  • E_PARSE聽聽 聽聽聽 聽聽聽 聽4聽聽 聽Informa de errores del analizador sint谩ctico. Estos errores son solo generados por el analizador sint谩ctico
  • E_NOTICE聽聽 聽聽聽 聽8聽聽 聽Informa de avisos en tiempo de ejecuci贸n. Podr铆a indicar que algo encontrado es un error pero el aviso puede ser generado por la ejecuci贸n esperada del script
  • E_CORE_ERROR聽聽 聽聽聽 聽16聽聽 聽Informa de errores fatales que ocurren durante el arranque de PHP. Es como E_ERROR excepto que solo son generados por el n煤cleo de php
  • E_CORE_WARNING聽聽 聽聽聽 聽32聽聽 聽Informa de advertencias (no errores fatales) que ocurren en el arranque de PHP. Es como E_WARNING excepto que las advertencias son las generadas por el n煤cleo de php
  • E_COMPILE_WARNING聽聽 聽128聽聽 聽Informa de advertencias (no errores fatales). Esto es como E_WARNING, solo que las advertencias son geradas por en motor de Scripting Zend
  • E_USER_ERROR聽聽 聽聽聽 聽256聽聽 聽Mensajes de error generados por el usuario. Esto es como E_ERROR, excepto que es generado en el c贸digo PHP por la funci贸n trigger_error()
  • E_USER_WARNING聽聽 聽聽聽 聽512聽聽 聽Advertencias de error generados por el usuario, Es como E_WARNING, excepto que es generado en el c贸digo PHP por la funci贸n trigger_error()
  • E_USER_NOTICE聽聽 聽聽聽 聽1024聽聽 聽Avisos generados por el usuario. Es como E_NOTICE, excepto que es generado en el c贸digo PHP por la funci贸n trigger_error()
  • E_STRICT聽聽 聽聽聽 聽2048聽聽 聽Habilita las sugerencias de cambios de PHP , que se aseguran de obtener de la mejor interoperatividad entre versiones de PHP
  • E_RECOVERABLE_ERROR聽聽 聽4096聽聽 聽Errores fatales recuperables. Estos indican la probabilidad de que un error peligroso ocurra, pero no dejara el motor en un estado inestables. Si este error no es gestionado por un manejador definido por el usuario la ejecuci贸n de la aplicaci贸n se abortara como si fuera un E_ERROR.
  • E_DEPRECATED聽聽 聽聽聽 聽8192聽聽 聽Avisos en tiempo de ejecuci贸n. Activar este nivel informara de advertencias sobre codigo que no funcionara en futuras versiones
  • E_USER_DEPRECATED聽聽 聽16384聽聽 聽Avisos en tiempo de ejecuci贸n generados por el usuario. Funciona como E_DEPRECATED, excepto que son generados en el c贸digo PHP usando la funcion trigger_error()
  • E_ALL聽聽 聽聽聽 聽聽聽 聽30719聽聽 聽Informa de todos los errores y Advertencias, siempre que est茅n soportadas, exceptuando el nivel E_STRICT.

Ejemplos: Si queremos verificar la compatibilidad de nuestro codigo con futuras versiones de PHP deberiamos de activar E_DEPRECATED.
En modo de depuraci贸n es recomendable activar la opci贸n E_ALL.
Si nuestro codigo informa de errores que desencadenan otros errores, tal vez nos interese filtrar activando las opciones E_USER_***
8. 驴qu茅 importancia tiene el par谩metro register_globals?

Habilita o deshabilita el reistro de las variables de entorno, GET, POST, Cookie y Servidor como variables globales. No es recomendable habilitarlo ya que no forma parte de las buenas practicas de programaci贸n y es inseguro.

9. 驴qu茅 objetivo tiene la secci贸n de File Uploads? Comenta sus par谩metros.

Permite la recepci贸n de archivos en el servidor usando el protocolo HTTP. los par谩metros son:

  • file_uploads = booleano habilita o deshabilita la recepci贸n de archivos
  • upload_tmp_dir= especifica un directorio temporal para la recepci贸n de archivos
  • upload_max_filesize = XXM acota el tama帽o m谩ximo de los archivos que puede recibir el servidor.

Cuarto Apartado:
10. Una vez instalados todos los servicios en la m谩quina, el alumno deber谩 realizar lo siguiente:
11. Crear una base de datos y tabla con unos datos de ejemplo utilizando phpMyAdmin

Para crear una base de datos en phpMyAdmin primero accedemos a la url donde esta instalado phpMyAdmin, en este caso . Una vez en la direcci贸n aparecer谩 un formulario solicit谩ndonos el nombre de usuario y la contrase帽a

Ventana Login PhpMyAdminintroducimos el nombre y la contrase帽a para un usuario con privilegios en la creaci贸n de bases de datos.

Una vez identificados en el phpMyAdmin para crear la base de datos seleccionamos la pesta帽a base de datos y en el campo “Crear nueva base de datos” introducimos el nombre de la base de datos que queremos crear.

Crear Nueva base de datos phpMyAdmin

al pinchar en Crear phpMyAdmin ejecutara el siguiente comando SQL

CREATE DATABASE `practicaCSI4` ;

para crear las tablas en la base de datos navegamos hasta la pagina de informaci贸n de la base de datos practicaCSI4 y en la pesta帽a estructura introducimos el numero de campos y el nombre de la tabla que queremos a帽adir a la base de datos.

Crear Nueva tabla phpMyAdminnos llevara a una pagina donde definiremos los campos de la base de datos.

definiendo campos de una tabla phpMyAdminuna vez hayamos cubierto el formulario pulsaremos el boton gravar que creara la tabla insertando el siguiente comando SQL


CREATE TABLE `practicacsi4`.`personas` (
`nombre` VARCHAR( 50 ) NOT NULL ,
`apellidos` VARCHAR( 50 ) NOT NULL ,
`direccion` VARCHAR( 200 ) NOT NULL ,
`codigopostal` INT NOT NULL ,
`provincia` VARCHAR( 15 ) NOT NULL ,
`dni` VARCHAR( 9 ) NOT NULL ,
`fechaNacimiento` DATE NOT NULL
) ENGINE = InnoDB

 

Repetimos el proceso para la segunda tabla

definiendo campos a tabla 2 phpMyAdminla creaci贸n de la segunda tabla generara el siguiente comando SQL

CREATE TABLE `practicacsi4`.`noticias` (
`titular` VARCHAR( 120 ) NOT NULL ,
`entradilla` VARCHAR( 400 ) NOT NULL ,
`texto` VARCHAR( 4000 ) NOT NULL ,
`fecha` DATE NOT NULL ,
`firma` VARCHAR( 200 ) NOT NULL ,
`fuente` VARCHAR( 180 ) NOT NULL ,
`foto` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `titular` )
 

12. Crear una p谩gina sencilla en php que realice la conexi贸n con la base de datos y muestre los resultados en pantalla

Se hace en la pr贸xima practica.

13. Facilitar al profesor una URL a trav茅s de la cual pueda visualizar la p谩gina y otra URL a trav茅s de la cu谩l pueda acceder a phpMyAdmin y realizar cambios en la base de datos de tal manera que esos cambios aparezcan reflejados al consultar de nuevo la p谩gina.

锘緼cceso a phpMyAdmin:

Las tablas de base de datos a crear pueden ser:

A) Ficha de datos personal con lo siguientes campos:

  • a. Nombre
  • b. Apellidos
  • c. Direcci贸n
  • d. C贸digo Postal
  • e. Provincia
  • f. DNI
  • g. Fecha de Nacimiento

B) Ficha de datos de una secci贸n de noticias:

  • a. Titular
  • b. Entradilla
  • c. Texto
  • d. Fecha
  • e. Firma
  • f. Fuente
  • g. Foto (opcional)