Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducció a Phing php - digitals girona setembre 2014

7,677 views

Published on

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.

Published in: Technology
  • Be the first to comment

Introducció a Phing php - digitals girona setembre 2014

  1. 1. PHING Automatitzant les tasques de desenvolupament, integració i operacions Digitals Girona 4 de Setembre de 2.014 CoEspai
  2. 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. 3. SOBRE LA XERRADA • Automatización tasques repetitives • El perquè dels Project Build Systems. • Què és Phing? • Ús, Exemples i Extensió
  4. 4. Les tasques repetitives s’han d’automatitzar. Si no es pot, s’han de subcontractar.
  5. 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. 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. 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. 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. 9. One Tool to rule them all!
  10. 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.
  11. 11. ARA, L’EINA
  12. 12. INSTAL·LACIÓ • Paquet PEAR • Paquet PHAR • Composer com a requeriment de projecte • Composer global • git clone
  13. 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. 14. VIA COMPOSER PROJECTE Afegir a composer.json: { "require-dev": { "phing/phing": "2.*" } } Executar: vendor/bin/phing -v
  15. 15. ARA, LA FEINA
  16. 16. BUILD.XML • Llista de fites de la Build: Targets • Accions per assolir la fita: Tasks
  17. 17. ESQUELET APLICACIÓ • Crear l’esquelet de directoris de l’aplicació. • Pot ser executada per after-install de composer • Tasks: mkdir, chown, chmod, gitclone, …
  18. 18. 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>
  19. 19. 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
  20. 20. CONFIG.INI <!-- Carreguem configuració, primer projecte, després particularitats --> <property file=“etc/ config.ini.sample" /> <property file=“etc/ config.ini" override="true" />
  21. 21. 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.
  22. 22. 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
  23. 23. <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>
  24. 24. <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}" />
  25. 25. 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 (*).
  26. 26. <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>
  27. 27. 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.
  28. 28. COMPOSER AUTOLOAD (*) <adhoc> <![CDATA[ require_once ‘lib/composer/autoload.php'; ]]> </adhoc>
  29. 29. COMPOSER.JSON { "config": { "component-dir": "lib/composer", "vendor-dir": “lib/composer" }, "require": { "php": “>=5.3.2”, "rcrowe/hippy": "0.6.*" } }
  30. 30. DEFINICIÓ DE LA TASCA <taskdef name="hipchat" classname="rcroweHippyPhingTask" /> ! a lib/composer/rcrowe/phing-hipchat/src └── rcrowe └── Hippy └── PhingTask.php
  31. 31. 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(
  32. 32. ( DEMO )
  33. 33. Som el que fem repetidament. L'excel·lència, doncs, no és un acte, sinó un hàbit.
  34. 34. L’HÀBIT DE CREAR, REQUEREIX DE TEMPS. QUE REITERIN LES MÀQUINES, NO ELS HUMANS!!!
  35. 35. 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/
  36. 36. 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
  37. 37. <echo> Moltes gràcies :) </echo>

×