Presentació per a la xerrada tecnològica del setembre del 2014 de Digitals Girona sobre Phing i automatització de les tasques de desenvolupament, integració i operacions.
Phing és el Build System escrit en PHP.
Introducció a Phing php - digitals girona setembre 2014
1. PHING
Automatitzant les tasques de
desenvolupament, integració i operacions
Digitals Girona
4 de Setembre de 2.014
CoEspai
2. SOBRE MI
• Més de 25 anys de professional IT, més de
15 amb PHP.
• Especialista en sistemes IBM i & z, Linux,
Apache, MySQL i PHP i tantes altres
tecnologies relacionades.
• Apassionat per la informatització dels
processos industrials, logístics i de
desenvolupament.
• Un dels primers PHP Zend Certified
Engineer.
• http://corretge.cat
• @corretge
Àlex Corretgé
3. SOBRE LA XERRADA
• Automatización tasques
repetitives
• El perquè dels Project Build
Systems.
• Què és Phing?
• Ús, Exemples i Extensió
5. PERQUÈ UNA BUILD?
• Usualment, els Build Systems compilen, testegen i
paquetitzen.
• Desplegament aplicacions a producció.
• Desplegament entorns de desenvolupament.
• Ajuda garantir idempotència en els processos.
6. QUÈ EXECUTEM A LA BUILD?
• TOT!
• Paquetitzar l’aplicació (git,
zip, etc…)
• Precompilar templates, less,
etc…
• Deploy de la Base de
Dades.
• Code Sniffer i altres…
• Documentar aplicació.
• Executar tests.
• Aixecar processos
background.
• etc…
7. PERQUÈ PHING?
• Executable allà on s’executi PHP.
• Sense dependències de Java (ant) o C (make).
• Més de 120 Tasks predefinides.
• Fàcil de crear les pròpies Tasks emprant PHP.
• Integrat a Jenkins i CruiseControl.
8. QUÈ ÉS PHING?
• PHing Is Not GNU make :)
• Project Build System basat en Apache Ant.
• Automatització de tasques repetitives.
• Targets en XML, Tasks en PHP
• Flexible i extensible Build Framework.
• Una eina per governar-les totes!
10. HISTÒRIA
• Duncan Davidson (2000) crea Ant per compilar Tomcat.
• Inici projecte del Binarycloud Framework com a conversor de metadades
existents en XML a arrays en PHP sense instal·lar JVM per l’Ant.
• Andreas Aderhold (2002) lidera phing 1.0 (PHP 4)
• Hans Lellelid (2003) i Michiel Rook (2005) lideren la versió 2.0 (PHP 5)
• Actualment desenvolupant versió 3.0
• 113 contribuïdors al repositori git oficial, 30 a l’equip de desenvolupament.
12. INSTAL·LACIÓ
• Paquet PEAR
• Paquet PHAR
• Composer com a requeriment de projecte
• Composer global
• git clone
13. VIA COMPOSER GLOBAL
Executar:
composer global require phing/phing:2.*
Editar ~/.bash_profile i afegir o modificar el PATH :
export PATH=/Users/[elTeuUsuari]/.composer/vendor/bin/:$PATH
Executar:
phing -v
14. VIA COMPOSER PROJECTE
Afegir a composer.json:
{
"require-dev": {
"phing/phing": "2.*"
}
}
Executar:
vendor/bin/phing -v
16. BUILD.XML
• Llista de fites de la
Build: Targets
• Accions per assolir la
fita: Tasks
17.
18. ESQUELET APLICACIÓ
• Crear l’esquelet de directoris de l’aplicació.
• Pot ser executada per after-install de composer
• Tasks: mkdir, chown, chmod, gitclone, …
20. CONFIG.INI
• Definició de propietats de la build i de l’aplicació en arxiu .ini
• Un arxiu al repositori, l’altre git ignorat per al sistema on s’executa
la build.
• Podem generar una classe o un arxiu .yaml amb totes les
propietats de la build parsejant
$this->project->getProperties();
• Task: property
21. CONFIG.INI
<!-- Carreguem configuració, primer
projecte, després particularitats -->
<property file=“etc/
config.ini.sample" />
<property file=“etc/
config.ini" override="true" />
22. ORGANITZANT TARGETS
• No cal tenir tots els targets en un sól arxiu.
<import file="${tasks.dir}/phing/skel.xml" optional="false" />
<import file="${tasks.dir}/phing/qgpl.xml" optional="false" />
<import file="${tasks.dir}/phing/db.xml" optional="false" />
<import file=“${tasks.dir}/phing/app/pop.xml" optional="false" />
<import file=“${tasks.dir}/phing/app/fal.xml" optional="false" />
<import file=“${tasks.dir}/phing/app/svg.xml" optional="false" />
• Plugin phing per a NetBeans molt útil.
23.
24. DBDEPLOY TASK
• Deployment de la base de dades amb fixtures per
a projectes que no empren doctrine.
• Garantim que totes les instalacions estan al mateix
nivell de codi i base de dades.
• Executable after-update composer
25. <pdosqlexec url="${db.driver}:host=${db.host};charset=utf8"
encoding="utf8"
userId="${db.root.user}"
password="${db.root.pass}"
onerror=“abort">
-- Creem la taula de dbdeploy
USE ${db.name};
!
CREATE TABLE changelog (
change_number BIGINT NOT NULL,
delta_set VARCHAR(10) NOT NULL,
start_dt TIMESTAMP NOT NULL,
complete_dt TIMESTAMP NULL,
applied_by VARCHAR(100) NOT NULL,
description VARCHAR(500) NOT NULL
);
ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY
KEY (change_number, delta_set);
!
</pdosqlexec>
27. CONTROL TASK
• Tasques per a “programar” en targets XML
• Blocs IF/THEN/ELSE control lògic.
• Blocs TRY/CATCH control d’errors.
• Blocs FILESET procés conjunts d’arxius (*).
29. EXTENENT PHING
• 120 tasks no són suficients ;)
• Targets avançats amb la combinació de phing tasks
i comandes bash via task exec.
• Creació de tasques noves en PHP.
32. DEFINICIÓ DE LA TASCA
<taskdef name="hipchat"
classname="rcroweHippyPhingTask" />
!
a lib/composer/rcrowe/phing-hipchat/src
└── rcrowe
└── Hippy
└── PhingTask.php
33. DEFINICIÓ DE LA TASCA
<?php
!
namespace rcroweHippy;
!
use Task;
use Project;
use BuildException;
use rcroweHippyTransportGuzzle;
use rcroweHippyClient;
use rcroweHippyMessage;
use rcroweHippyQueue;
!
class PhingTask extends Task
{
public function main($transport = null)
{
$transport OR $transport = new Guzzle(
38. COM
CONTRIBUIR-HI
• Agafar un ticket a http://
phing.info/trac/roadmap
• Després de programar,
documentar i testejar, crear
un pull request a http://
github.com/phingofficial/
phing