SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
PHING 
Automatitzant les tasques de 
desenvolupament, integració i operacions 
Digitals Girona 
4 de Setembre de 2.014 
CoEspai
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é
SOBRE LA XERRADA 
• Automatización tasques 
repetitives 
• El perquè dels Project Build 
Systems. 
• Què és Phing? 
• Ús, Exemples i Extensió
Les tasques 
repetitives s’han 
d’automatitzar. 
Si no es pot, 
s’han de 
subcontractar.
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.
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…
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.
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!
One Tool 
to rule 
them all!
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.
ARA, L’EINA
INSTAL·LACIÓ 
• Paquet PEAR 
• Paquet PHAR 
• Composer com a requeriment de projecte 
• Composer global 
• git clone
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
VIA COMPOSER PROJECTE 
Afegir a composer.json: 
{ 
"require-dev": { 
"phing/phing": "2.*" 
} 
} 
Executar: 
vendor/bin/phing -v
ARA, LA FEINA
BUILD.XML 
• Llista de fites de la 
Build: Targets 
• Accions per assolir la 
fita: Tasks
ESQUELET APLICACIÓ 
• Crear l’esquelet de directoris de l’aplicació. 
• Pot ser executada per after-install de composer 
• Tasks: mkdir, chown, chmod, gitclone, …
ESQUELET APLICACIÓ 
<target name="getDrupal" description="Clone the Drupal 
repository"> 
<delete dir="${drupal.workingdir.resolved}" 
includeemptydirs="true" verbose="true" 
failonerror="false" /> 
<mkdir dir="${drupal.workingdir.resolved}" /> 
<!-- Clone drupal core --> 
<gitclone repository="http://git.drupal.org/project/ 
drupal.git" targetPath="${drupal.workingdir.resolved}" /> 
</target>
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
CONFIG.INI 
<!-- Carreguem configuració, primer 
projecte, després particularitats --> 
<property file=“etc/ 
config.ini.sample" /> 
<property file=“etc/ 
config.ini" override="true" />
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.
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
<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>
<dbdeploy url="${db.driver}:dbname=${db.name};host=$ 
{db.host};charset=utf8" 
userId="${db.root.user}" password="${db.root.pass}" 
dir="${dbdeploy.delta.dir}" 
outputfile="${dbdeploy.do-script.file}" 
undooutputfile="${dbdeploy.undo-script.file}" 
checkAll="true" 
appliedBy="${db.adm.user}" /> 
<pdosqlexec url="${db.driver}:host=${db.host};dbname=$ 
{db.name};charset=utf8" 
encoding="utf8" 
userId="${db.adm.user}" 
password="${db.adm.pass}" 
onerror="abort" 
src="${dbdeploy.do-script.file}" />
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 (*).
<trycatch> 
<try> 
<exec command="phpunit --configuration dbunit.xml 
--log-junit ${build.dir}/var/dbunit/report/db.xml " 
passthru="true" checkreturn="true" /> 
<exec command="afplay usr/sounds/Quack.aiff" /> 
</try> 
<catch> 
<exec command="afplay usr/sounds/Laugh.aiff" /> 
</catch> 
<finally> 
<exec command="xsltproc ${build.dir}/usr/dbunit/ 
report.xsl ${build.dir}/var/dbunit/report/db.xml > $ 
{build.dir}/var/dbunit/report/index.html" /> 
<exec command="open var/dbunit/report/index.html" / 
> 
</finally> 
</trycatch>
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.
COMPOSER AUTOLOAD (*) 
<adhoc> 
<![CDATA[ 
require_once ‘lib/composer/autoload.php'; 
]]> 
</adhoc>
COMPOSER.JSON 
{ 
"config": { 
"component-dir": "lib/composer", 
"vendor-dir": “lib/composer" 
}, 
"require": { 
"php": “>=5.3.2”, 
"rcrowe/hippy": "0.6.*" 
} 
}
DEFINICIÓ DE LA TASCA 
<taskdef name="hipchat" 
classname="rcroweHippyPhingTask" /> 
! 
a lib/composer/rcrowe/phing-hipchat/src 
└── rcrowe 
└── Hippy 
└── PhingTask.php
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(
( DEMO )
Som el que fem 
repetidament. 
L'excel·lència, 
doncs, 
no és un acte, 
sinó un hàbit.
L’HÀBIT DE 
CREAR, 
REQUEREIX DE 
TEMPS. 
QUE REITERIN LES MÀQUINES, 
NO ELS HUMANS!!!
MÉS INFORMACIÓ 
• http://www.phing.info 
• https://github.com/phingofficial/phing 
• http://www.slideshare.net/mdekrijger/phing-7900127 
• http://www.slideshare.net/domudall/phing-presentation 
• http://www.slideshare.net/michieltcs/building-and-deploying-php-applications-with- 
phing 
• http://www.slideshare.net/hozn/phing-building-with-php 
• http://corretge.cat/category/sistemes/phing/
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
<echo> 
Moltes gràcies :) 
</echo>

Weitere ähnliche Inhalte

Andere mochten auch

Google+APIをさわってみる。
Google+APIをさわってみる。Google+APIをさわってみる。
Google+APIをさわってみる。Hiroyuki Nozaki
 
Measurement of Maximum new NAT-sessions per second / How to send packets
Measurement of Maximum new NAT-sessionsper second / How to send packetsMeasurement of Maximum new NAT-sessionsper second / How to send packets
Measurement of Maximum new NAT-sessions per second / How to send packets@ otsuka752
 
VPC by Default時代のアクセス制御
VPC by Default時代のアクセス制御VPC by Default時代のアクセス制御
VPC by Default時代のアクセス制御真吾 吉田
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendlyTatsuya Ishikawa
 
DynamoDBのまえにキャッシュおく奴
DynamoDBのまえにキャッシュおく奴DynamoDBのまえにキャッシュおく奴
DynamoDBのまえにキャッシュおく奴Sugawara Genki
 
Kauli SSPにおけるVyOSの導入事例
Kauli SSPにおけるVyOSの導入事例Kauli SSPにおけるVyOSの導入事例
Kauli SSPにおけるVyOSの導入事例Kazuhito Ohkawa
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタl_b__
 
Jenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテストJenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテストHiroyuki Tanaka
 
Windowsでの自動化の手段
Windowsでの自動化の手段Windowsでの自動化の手段
Windowsでの自動化の手段Hidari Ikw
 
What makes AWS invincible? from JAWS Days 2014
What makes AWS invincible? from JAWS Days 2014What makes AWS invincible? from JAWS Days 2014
What makes AWS invincible? from JAWS Days 2014Emma Haruka Iwao
 
Atomic Design powered by React @ AbemaTV
Atomic Design powered by React @ AbemaTVAtomic Design powered by React @ AbemaTV
Atomic Design powered by React @ AbemaTVYusuke Goto
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Yohei Yasukawa
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)Toshiharu Sugiyama
 
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料ikikko
 
VyOS Users Meeting #2, VyOSのVXLANの話
VyOS Users Meeting #2, VyOSのVXLANの話VyOS Users Meeting #2, VyOSのVXLANの話
VyOS Users Meeting #2, VyOSのVXLANの話upaa
 
2014 jaws days-最強のawsに_rtc宮崎
2014 jaws days-最強のawsに_rtc宮崎2014 jaws days-最強のawsに_rtc宮崎
2014 jaws days-最強のawsに_rtc宮崎SachieMiyazaki
 
20170302 tryswift tasting_tests
20170302 tryswift tasting_tests20170302 tryswift tasting_tests
20170302 tryswift tasting_testsKazuaki Matsuo
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先Kazuho Oku
 

Andere mochten auch (20)

Google+APIをさわってみる。
Google+APIをさわってみる。Google+APIをさわってみる。
Google+APIをさわってみる。
 
Measurement of Maximum new NAT-sessions per second / How to send packets
Measurement of Maximum new NAT-sessionsper second / How to send packetsMeasurement of Maximum new NAT-sessionsper second / How to send packets
Measurement of Maximum new NAT-sessions per second / How to send packets
 
VPC by Default時代のアクセス制御
VPC by Default時代のアクセス制御VPC by Default時代のアクセス制御
VPC by Default時代のアクセス制御
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly価値あるシステムテスト自動化の実現By friendly
価値あるシステムテスト自動化の実現By friendly
 
DynamoDBのまえにキャッシュおく奴
DynamoDBのまえにキャッシュおく奴DynamoDBのまえにキャッシュおく奴
DynamoDBのまえにキャッシュおく奴
 
Kauli SSPにおけるVyOSの導入事例
Kauli SSPにおけるVyOSの導入事例Kauli SSPにおけるVyOSの導入事例
Kauli SSPにおけるVyOSの導入事例
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 
Jenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテストJenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテスト
 
Windowsでの自動化の手段
Windowsでの自動化の手段Windowsでの自動化の手段
Windowsでの自動化の手段
 
What makes AWS invincible? from JAWS Days 2014
What makes AWS invincible? from JAWS Days 2014What makes AWS invincible? from JAWS Days 2014
What makes AWS invincible? from JAWS Days 2014
 
Atomic Design powered by React @ AbemaTV
Atomic Design powered by React @ AbemaTVAtomic Design powered by React @ AbemaTV
Atomic Design powered by React @ AbemaTV
 
QtとBuildrootの紹介
QtとBuildrootの紹介QtとBuildrootの紹介
QtとBuildrootの紹介
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
 
Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料Jenkinsユーザカンファレンス2015 前座資料
Jenkinsユーザカンファレンス2015 前座資料
 
VyOS Users Meeting #2, VyOSのVXLANの話
VyOS Users Meeting #2, VyOSのVXLANの話VyOS Users Meeting #2, VyOSのVXLANの話
VyOS Users Meeting #2, VyOSのVXLANの話
 
2014 jaws days-最強のawsに_rtc宮崎
2014 jaws days-最強のawsに_rtc宮崎2014 jaws days-最強のawsに_rtc宮崎
2014 jaws days-最強のawsに_rtc宮崎
 
20170302 tryswift tasting_tests
20170302 tryswift tasting_tests20170302 tryswift tasting_tests
20170302 tryswift tasting_tests
 
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 

Ähnlich wie Introducció a Phing php - digitals girona setembre 2014

Ähnlich wie Introducció a Phing php - digitals girona setembre 2014 (20)

Drupal: Posada en Funcionament
Drupal: Posada en FuncionamentDrupal: Posada en Funcionament
Drupal: Posada en Funcionament
 
Git
GitGit
Git
 
Asix act3v4
Asix act3v4Asix act3v4
Asix act3v4
 
Seguretat de Sistemes
Seguretat de SistemesSeguretat de Sistemes
Seguretat de Sistemes
 
Dai 9 - Ruby on Rails
Dai 9 - Ruby on RailsDai 9 - Ruby on Rails
Dai 9 - Ruby on Rails
 
Duplicity
DuplicityDuplicity
Duplicity
 
Instal·lació apache
Instal·lació apacheInstal·lació apache
Instal·lació apache
 
Presentació de Red hat Linux
Presentació de Red hat LinuxPresentació de Red hat Linux
Presentació de Red hat Linux
 
gestors web
gestors webgestors web
gestors web
 
alfresco
alfrescoalfresco
alfresco
 
Sergio
SergioSergio
Sergio
 
Com funciona el git (guifi)
Com funciona el git (guifi)Com funciona el git (guifi)
Com funciona el git (guifi)
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5
 
J2maig
J2maigJ2maig
J2maig
 
Mètodes per auditar l'activitat dels usuaris
Mètodes per auditar l'activitat dels usuarisMètodes per auditar l'activitat dels usuaris
Mètodes per auditar l'activitat dels usuaris
 
Ubuntu 10.04 LTS en el centres
Ubuntu 10.04 LTS en el centresUbuntu 10.04 LTS en el centres
Ubuntu 10.04 LTS en el centres
 
Presentació del servidor Apache
Presentació del servidor ApachePresentació del servidor Apache
Presentació del servidor Apache
 
Programari
ProgramariProgramari
Programari
 
Gestor d' arxius Web
Gestor d' arxius WebGestor d' arxius Web
Gestor d' arxius Web
 
Programari d'un ordinador 1r trimestre
Programari d'un ordinador 1r trimestre Programari d'un ordinador 1r trimestre
Programari d'un ordinador 1r trimestre
 

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ó
  • 4. Les tasques repetitives s’han d’automatitzar. Si no es pot, s’han de subcontractar.
  • 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!
  • 9. One Tool to rule them all!
  • 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, …
  • 19. ESQUELET APLICACIÓ <target name="getDrupal" description="Clone the Drupal repository"> <delete dir="${drupal.workingdir.resolved}" includeemptydirs="true" verbose="true" failonerror="false" /> <mkdir dir="${drupal.workingdir.resolved}" /> <!-- Clone drupal core --> <gitclone repository="http://git.drupal.org/project/ drupal.git" targetPath="${drupal.workingdir.resolved}" /> </target>
  • 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>
  • 26. <dbdeploy url="${db.driver}:dbname=${db.name};host=$ {db.host};charset=utf8" userId="${db.root.user}" password="${db.root.pass}" dir="${dbdeploy.delta.dir}" outputfile="${dbdeploy.do-script.file}" undooutputfile="${dbdeploy.undo-script.file}" checkAll="true" appliedBy="${db.adm.user}" /> <pdosqlexec url="${db.driver}:host=${db.host};dbname=$ {db.name};charset=utf8" encoding="utf8" userId="${db.adm.user}" password="${db.adm.pass}" onerror="abort" src="${dbdeploy.do-script.file}" />
  • 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 (*).
  • 28. <trycatch> <try> <exec command="phpunit --configuration dbunit.xml --log-junit ${build.dir}/var/dbunit/report/db.xml " passthru="true" checkreturn="true" /> <exec command="afplay usr/sounds/Quack.aiff" /> </try> <catch> <exec command="afplay usr/sounds/Laugh.aiff" /> </catch> <finally> <exec command="xsltproc ${build.dir}/usr/dbunit/ report.xsl ${build.dir}/var/dbunit/report/db.xml > $ {build.dir}/var/dbunit/report/index.html" /> <exec command="open var/dbunit/report/index.html" / > </finally> </trycatch>
  • 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.
  • 30. COMPOSER AUTOLOAD (*) <adhoc> <![CDATA[ require_once ‘lib/composer/autoload.php'; ]]> </adhoc>
  • 31. COMPOSER.JSON { "config": { "component-dir": "lib/composer", "vendor-dir": “lib/composer" }, "require": { "php": “>=5.3.2”, "rcrowe/hippy": "0.6.*" } }
  • 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(
  • 35. Som el que fem repetidament. L'excel·lència, doncs, no és un acte, sinó un hàbit.
  • 36. L’HÀBIT DE CREAR, REQUEREIX DE TEMPS. QUE REITERIN LES MÀQUINES, NO ELS HUMANS!!!
  • 37. MÉS INFORMACIÓ • http://www.phing.info • https://github.com/phingofficial/phing • http://www.slideshare.net/mdekrijger/phing-7900127 • http://www.slideshare.net/domudall/phing-presentation • http://www.slideshare.net/michieltcs/building-and-deploying-php-applications-with- phing • http://www.slideshare.net/hozn/phing-building-with-php • http://corretge.cat/category/sistemes/phing/
  • 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