SlideShare a Scribd company logo

Phing

M
mdekrijger

Once you're done coding, the project is all but finished. There are lots of tools to keep control over your code outside your IDE. Especially continuous integration tools are really helpfull for this purpose. Under the hood of a CI, or at commandline, Phing can be used for lots of PHP specific tasks that are usually executed within a CI. Phing is a sort of PHP version of the Apache Ant tool, which is neatly integrated with some handy PEAR packages. During this presentation you'll get a basic understanding about Phing and its features. We will walk through some examples and screens, so you get some basic knowledge about phing and in what type of fields it can be really usefull.

1 of 15
Download to read offline
PHPBenelux - Using Phing




          10-5-2011
          ~30 mins

       Marco de Krijger
About me

Marco de Krijger

    http://www.linkedin.com/in/marcodekrijger

    mdekrijger@e-sites.nl
Contents

   What is Phing
   Why using Phing
   Features
   Example Phing build file
   Phing and CI
   Extending Phing
   Questions
What is Phing
   Phing homepage: http://phing.info
    “PHing Is Not GNU make; it's a PHP project
    build system or build tool based on Apache Ant”
   Phing is like a jigsaw
    puzzle. It has a lots
    of easy to use building
    blocks to cover everything
    between a code base and
    a live production
    environment
Why using Phing

   Phing homepage:
    “If you find yourself writing custom scripts to
    handle the packaging, deploying, or testing of
    your applications”
   A shared platform that is maintained →
    less programming && less communication with
    (new) developers                       I'm not needed,
                                               so I can be empty

    “An excellent developer
    makes himself needless”
Features
In a nutshell
Ad

Recommended

Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with PhingMichiel Rook
 
Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Phing - A PHP Build Tool (An Introduction)
Phing - A PHP Build Tool (An Introduction)Michiel Rook
 
Phing: Building with PHP
Phing: Building with PHPPhing: Building with PHP
Phing: Building with PHPhozn
 
Putting Phing to Work for You
Putting Phing to Work for YouPutting Phing to Work for You
Putting Phing to Work for Youhozn
 
Building and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingBuilding and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingMihail Irintchev
 
Building and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingBuilding and Deploying PHP apps with Phing
Building and Deploying PHP apps with PhingMichiel Rook
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with PhingMichiel Rook
 

More Related Content

What's hot

Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP ApplicationsPavan Kumar N
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With PhingDaniel Cousineau
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentShahar Evron
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applicationshozn
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsAdam Culp
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshopNick Belhomme
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
 
PHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBeneluxPHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBeneluxNick Belhomme
 
Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Clark Everetts
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginnersAdam Englander
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stackKris Buytaert
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package developmentTihomir Opačić
 
New EEA Plone Add-ons
New EEA Plone Add-onsNew EEA Plone Add-ons
New EEA Plone Add-onsAlin Voinea
 
Building a Dynamic Website Using Django
Building a Dynamic Website Using DjangoBuilding a Dynamic Website Using Django
Building a Dynamic Website Using DjangoNathan Eror
 
Virtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 MayVirtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 MayPuppet
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)Puppet
 
Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ramon de la Fuente
 

What's hot (20)

Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Automated Deployment With Phing
Automated Deployment With PhingAutomated Deployment With Phing
Automated Deployment With Phing
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applications
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with Jenkins
 
Zend Framework 1.8 workshop
Zend Framework 1.8 workshopZend Framework 1.8 workshop
Zend Framework 1.8 workshop
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
PHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBeneluxPHP Quality Assurance Workshop PHPBenelux
PHP Quality Assurance Workshop PHPBenelux
 
Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016Php Dependency Management with Composer ZendCon 2016
Php Dependency Management with Composer ZendCon 2016
 
Zend con 2016 bdd with behat for beginners
Zend con 2016   bdd with behat for beginnersZend con 2016   bdd with behat for beginners
Zend con 2016 bdd with behat for beginners
 
11 tools for your PHP devops stack
11 tools for your PHP devops stack11 tools for your PHP devops stack
11 tools for your PHP devops stack
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package development
 
New EEA Plone Add-ons
New EEA Plone Add-onsNew EEA Plone Add-ons
New EEA Plone Add-ons
 
Building a Dynamic Website Using Django
Building a Dynamic Website Using DjangoBuilding a Dynamic Website Using Django
Building a Dynamic Website Using Django
 
Virtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 MayVirtual Bolt Workshop - 6 May
Virtual Bolt Workshop - 6 May
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Continuous Quality Assurance
Continuous Quality AssuranceContinuous Quality Assurance
Continuous Quality Assurance
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
Puppet Virtual Bolt Workshop - 23 April 2020 (Singapore)
 
Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)
 

Similar to Phing

IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11julien.ponge
 
Building com Phing - 7Masters PHP
Building com Phing - 7Masters PHPBuilding com Phing - 7Masters PHP
Building com Phing - 7Masters PHPiMasters
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesAlfresco Software
 
Apache ant
Apache antApache ant
Apache antkoniik
 
Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Michelangelo van Dam
 
"I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more."I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more.Fabio Milano
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012Carlos Sanchez
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Bastian Feder
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Introduction to InSpec and 1.0 release update
Introduction to InSpec and 1.0 release updateIntroduction to InSpec and 1.0 release update
Introduction to InSpec and 1.0 release updateAlex Pop
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesLindsay Holmwood
 
Web development automatisation for fun and profit (Artem Daniliants)
Web development automatisation for fun and profit (Artem Daniliants)Web development automatisation for fun and profit (Artem Daniliants)
Web development automatisation for fun and profit (Artem Daniliants)LumoSpark
 
Phing i Fabric - Budowanie i deployment aplikacji webowych
Phing i Fabric - Budowanie i deployment aplikacji webowychPhing i Fabric - Budowanie i deployment aplikacji webowych
Phing i Fabric - Budowanie i deployment aplikacji webowychleafnode
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013grim_radical
 
MuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise security
MuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise securityMuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise security
MuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise securityakashdprajapati
 
Introduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI PotsdamIntroduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI PotsdamChristoph Oelmüller
 

Similar to Phing (20)

Write php deploy everywhere tek11
Write php deploy everywhere   tek11Write php deploy everywhere   tek11
Write php deploy everywhere tek11
 
Write php deploy everywhere
Write php deploy everywhereWrite php deploy everywhere
Write php deploy everywhere
 
IzPack at LyonJUG'11
IzPack at LyonJUG'11IzPack at LyonJUG'11
IzPack at LyonJUG'11
 
Building com Phing - 7Masters PHP
Building com Phing - 7Masters PHPBuilding com Phing - 7Masters PHP
Building com Phing - 7Masters PHP
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Apache ant
Apache antApache ant
Apache ant
 
Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011
 
"I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more."I have a framework idea" - Repeat less, share more.
"I have a framework idea" - Repeat less, share more.
 
From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
 
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
Advanced Eclipse Workshop (held at IPC2010 -spring edition-)
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Introduction to InSpec and 1.0 release update
Introduction to InSpec and 1.0 release updateIntroduction to InSpec and 1.0 release update
Introduction to InSpec and 1.0 release update
 
Php Power Tools
Php Power ToolsPhp Power Tools
Php Power Tools
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Web development automatisation for fun and profit (Artem Daniliants)
Web development automatisation for fun and profit (Artem Daniliants)Web development automatisation for fun and profit (Artem Daniliants)
Web development automatisation for fun and profit (Artem Daniliants)
 
Phing i Fabric - Budowanie i deployment aplikacji webowych
Phing i Fabric - Budowanie i deployment aplikacji webowychPhing i Fabric - Budowanie i deployment aplikacji webowych
Phing i Fabric - Budowanie i deployment aplikacji webowych
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
 
MuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise security
MuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise securityMuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise security
MuleSoft ESB Payload Encrypt Decrypt using anypoint enterprise security
 
Algotitmo Moinho
Algotitmo MoinhoAlgotitmo Moinho
Algotitmo Moinho
 
Introduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI PotsdamIntroduction to puppet - Hands on Session at HPI Potsdam
Introduction to puppet - Hands on Session at HPI Potsdam
 

Recently uploaded

Free eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdf
Free eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdfFree eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdf
Free eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdfOH TEIK BIN
 
Basic Staff Training - Pathfinder history _Pastors Group 16022024.pdf
Basic Staff Training - Pathfinder history _Pastors Group 16022024.pdfBasic Staff Training - Pathfinder history _Pastors Group 16022024.pdf
Basic Staff Training - Pathfinder history _Pastors Group 16022024.pdfRonaldChuma2
 
A Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdf
A Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdfA Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdf
A Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdfOH TEIK BIN
 
Lifelong Values Spirituality: Character Formation
Lifelong Values Spirituality: Character FormationLifelong Values Spirituality: Character Formation
Lifelong Values Spirituality: Character FormationUrban Leadership Foundation
 
05 2 Peter 1:4-5 The Press for Abundance.pptx
05 2 Peter 1:4-5 The Press for Abundance.pptx05 2 Peter 1:4-5 The Press for Abundance.pptx
05 2 Peter 1:4-5 The Press for Abundance.pptxMarvin McKenzie
 
pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...
pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...
pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...kala jadu amil baba
 
The Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptx
The Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptxThe Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptx
The Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptxStephen Palm
 
Camino179_SpiritualRegimen_ENGLISH(Version2003).pdf
Camino179_SpiritualRegimen_ENGLISH(Version2003).pdfCamino179_SpiritualRegimen_ENGLISH(Version2003).pdf
Camino179_SpiritualRegimen_ENGLISH(Version2003).pdfRoberto Gonzales
 
More Than- a teaching on John 3:1-21 when Nicodemus came to Jesus
More Than- a teaching on John 3:1-21 when Nicodemus came to JesusMore Than- a teaching on John 3:1-21 when Nicodemus came to Jesus
More Than- a teaching on John 3:1-21 when Nicodemus came to JesusEd Sullivan
 
The_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_Feet
The_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_FeetThe_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_Feet
The_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_FeetNetwork Bible Fellowship
 

Recently uploaded (13)

Free eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdf
Free eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdfFree eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdf
Free eBook ~ 10 Past WhatsApp Dhamma Messages to Reflect Repeatedly.pdf
 
Basic Staff Training - Pathfinder history _Pastors Group 16022024.pdf
Basic Staff Training - Pathfinder history _Pastors Group 16022024.pdfBasic Staff Training - Pathfinder history _Pastors Group 16022024.pdf
Basic Staff Training - Pathfinder history _Pastors Group 16022024.pdf
 
A Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdf
A Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdfA Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdf
A Free eBook - Dhamma Lessons from 5 Dhammapada Stories.pdf
 
Lifelong Values Spirituality: Character Formation
Lifelong Values Spirituality: Character FormationLifelong Values Spirituality: Character Formation
Lifelong Values Spirituality: Character Formation
 
Lenten Letter 2024 Group Reflection Part 2
Lenten Letter 2024 Group Reflection Part 2Lenten Letter 2024 Group Reflection Part 2
Lenten Letter 2024 Group Reflection Part 2
 
05 2 Peter 1:4-5 The Press for Abundance.pptx
05 2 Peter 1:4-5 The Press for Abundance.pptx05 2 Peter 1:4-5 The Press for Abundance.pptx
05 2 Peter 1:4-5 The Press for Abundance.pptx
 
pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...
pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...
pakistan k mashoor amil baba no#1 authentic kala ilam specialist # amil peer ...
 
The Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptx
The Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptxThe Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptx
The Pursuit of Self Sufficiency_Ecclesiastes 9:11-12.pptx
 
Lenten Letter 2024 Group Reflection Part 1
Lenten Letter 2024 Group Reflection Part 1Lenten Letter 2024 Group Reflection Part 1
Lenten Letter 2024 Group Reflection Part 1
 
Camino179_SpiritualRegimen_ENGLISH(Version2003).pdf
Camino179_SpiritualRegimen_ENGLISH(Version2003).pdfCamino179_SpiritualRegimen_ENGLISH(Version2003).pdf
Camino179_SpiritualRegimen_ENGLISH(Version2003).pdf
 
More Than- a teaching on John 3:1-21 when Nicodemus came to Jesus
More Than- a teaching on John 3:1-21 when Nicodemus came to JesusMore Than- a teaching on John 3:1-21 when Nicodemus came to Jesus
More Than- a teaching on John 3:1-21 when Nicodemus came to Jesus
 
Lenten Letter 2024 Group Reflection Part 3
Lenten Letter 2024 Group Reflection Part 3Lenten Letter 2024 Group Reflection Part 3
Lenten Letter 2024 Group Reflection Part 3
 
The_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_Feet
The_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_FeetThe_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_Feet
The_Chronological_Life_of_Christ_Part_89_Fitting_Him_In_Or_Sitting_at_His_Feet
 

Phing

  • 1. PHPBenelux - Using Phing 10-5-2011 ~30 mins Marco de Krijger
  • 2. About me Marco de Krijger http://www.linkedin.com/in/marcodekrijger mdekrijger@e-sites.nl
  • 3. Contents  What is Phing  Why using Phing  Features  Example Phing build file  Phing and CI  Extending Phing  Questions
  • 4. What is Phing  Phing homepage: http://phing.info “PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant”  Phing is like a jigsaw puzzle. It has a lots of easy to use building blocks to cover everything between a code base and a live production environment
  • 5. Why using Phing  Phing homepage: “If you find yourself writing custom scripts to handle the packaging, deploying, or testing of your applications”  A shared platform that is maintained → less programming && less communication with (new) developers I'm not needed, so I can be empty “An excellent developer makes himself needless”
  • 7. Example deployment  “Phing look and feel” Info target  e-sites library (ESL)  Deploy ESL  Revert version
  • 8. <?xml version="1.0" encoding="UTF-8"?> Deployment code <project name="ESL" default="info"> <target name="deployMinor"> <version releasetype="Minor" file="VERSION" property="version"/> <svncommit workingcopy="." message="Updated VERSION file to ${version}" username="user" password="password"/> <svncopy repositoryurl="http://svn.dev/library/esl/Branches/v1" todir="http://svn.dev/library/esl/Tags/release-${version}" username="user" password="password"/> <svnupdate todir="." username="user" password="password"/> <phingcall target="deploy"/> </target> <target name="deploy" description="Deploy ESL" depends="tarball"> <fail unless="version" message="Please specify version to export e.g. -Dversion=1.0.0" /> <phingcall target="deployserver"> <property name="host" value="dev"/> </phingcall> <!-- clean up mess → <delete dir="/tmp/eslpackage" quiet="true"/> </target> <target name="tarball"> <fail unless="version" message="Please specify version to export e.g. -Dversion=1.0.0" /> <!-- this is to check if SVN tag exists → <svnlastrevision repositoryurl="http://svn.dev/library/esl/Tags/release-${version}" propertyname="tag" username="user" password="password"/> <property name="build.dir" value="/tmp/eslpackage" /> <delete dir="${build.dir}" quiet="true"/> <svnexport username="user" password="password" repositoryurl="http://svn.dev/library/esl/Tags/release-${version}" todir="${build.dir}"/> <delete file="${build.dir}/build.xml"/> <tar destfile="/tmp/eslpackage/esl.tar" compression="gzip"> <fileset dir="${build.dir}"> <include name="**/**" /> </fileset> </tar> </target> <target name="deployserver" if="host,version"> <scp username="esites" host="${host}" todir="/tmp" file="/tmp/eslpackage/esl.tar" pubkeyfile="/var/www/.ssh/id_rsa.pub" privkeyfile="/var/www/.ssh/id_rsa"/> <!-- untar and symlink → <ssh username="esites" host="${host}" command="mkdir /var/www/includes/ESL-${version}; cd /var/www/includes/ESL-${version}; tar -zvxf /tmp/esl.tar; ln -s ./ESL-${version} /var/www/includes/ESLv1_tmp; mv -Tf /var/www/includes/ESLv1_tmp /var/www/includes/ESLv1;rm -f /tmp/esl.tar" pubkeyfile="/var/www/.ssh/id_rsa.pub" privkeyfile="/var/www/.ssh/id_rsa"/> </target>
  • 9. Phing and CI  Example with Jenkins (Hudson) “building ESL”  Execute unit tests  Codesniffer for standards  PHPMD for mess detection  Code coverage report for unit test  PHPDepend stats +
  • 10. <?xml version="1.0" encoding="UTF-8"?> <project name="ESL"> <target name="build" description="Build ESL"> Jenkins build file <mkdir dir="./reports"/> <fileset dir="./ESL" id="php.fileset"> <include name="**/*.php"/> </fileset> <!-- Set up coverage db → <coverage-setup database="./reports/coverage.db"> <fileset refid="php.fileset"/> </coverage-setup> <!-- Execute unit tests → <phpunit bootstrap="./bootstrap.php" codecoverage="true"> <formatter type="clover" todir="reports"/> <formatter type="xml" todir="reports"/> <batchtest> <fileset id="unittests" dir="./tests"> <include name="**/*Test.php"/> </fileset> </batchtest> </phpunit> <!-- Do codesniffing → <phpcodesniffer standard="Esites" format="checkstyle"> <fileset refid="php.fileset"/> <formatter type="checkstyle" outfile="./reports/checkstyle.xml"/> </phpcodesniffer> <!-- Do PMD checks → <phpmd rulesets="Esites"> <fileset refid="php.fileset"/> <formatter type="xml" outfile="./reports/pmd.xml"/> </phpmd> <!-- Copy paste detection → <phpcpd> <fileset refid="php.fileset"/> <formatter type="pmd" outfile="./reports/cpd.xml"/> </phpcpd> <!-- Get PHPDepend stats → <phpdepend> <fileset refid="php.fileset"/> <logger type="jdepend-xml" outfile="./reports/jdepend.xml"/> <logger type="jdepend-chart" outfile="./reports/dependencies.svg"/> <logger type="overview-pyramid" outfile="./reports/overview-pyramid.svg"/> <analyzer type="coderank-mode" value="method"/> </phpdepend> </target> </project>
  • 11. Jenkins graphs And...  PHPCPD Copy paste detection  PHPunit test results
  • 12. Extending Phing  Example Existing SSH task is incomplete. We want to capture SSH output for string matching  Add your task/class to defaults.properties  Create user directory in tasks  Create your own task with setters and main method
  • 13. <?xml version="1.0" encoding="UTF-8"?> Custom task <project name="ESL" default="build"> <property name="dir.source" value="/var/www/html/workingcopies/mdkrijger/personal/esltest" /> <property name="dir.destination" value="/tmp/phingdemo" /> <target name="compare" description="Compare 2 fixed directories"> <!-- Create package (tarball) → <tar destfile="tarball.tar" compression="gzip"> <fileset dir="${dir.source}"> <include name="**/**" /> </fileset> </tar> <!-- upload it to production environment → <scp username="esites" host="dev" todir="/tmp" file="tarball.tar" pubkeyfile="/var/www/.ssh/id_rsa.pub" privkeyfile="/var/www/.ssh/id_rsa"/> <!-- Extract the uploaded image, display its activity → <ssh username="esites" host="dev" command="mkdir /tmp/phingdemo; cd /tmp/phingdemo; tar -zxvf /tmp/tarball.tar" pubkeyfile="/var/www/.ssh/id_rsa.pub" privkeyfile="/var/www/.ssh/id_rsa"/> <!-- This is the custom task → <!-- get directory sizes → <sshterm username="esites" host="devlocal" display="false" property="size1" command="du -bs ${dir.destination} | egrep -o '([0-9]*)'" pubkeyfile="/var/www/.ssh/id_rsa.pub" privkeyfile="/var/www/.ssh/id_rsa"/> <exec command="du -bs ${dir.source} | egrep -o '([0-9]*)'" outputproperty="size2"/> <!-- compare them → <if> <not> <equals arg1="${size1}" arg2="${size2}"/> </not> <then> <fail message="Directories are not in sync! Size source: ${size2}, Size destination: ${size1}"/> </then> <else> <echo message="Directories are in sync"/> </else> </if> </target> <target name="clean"> <delete dir="/tmp/phingdemo"/> <delete file="/tmp/tarball.tar"/> </target> <target name="break"> <copy file="/tmp/tarball.tar" tofile="${dir.destination}/tarball.tar" overwrite="true"/> </target> </project>
  • 14. Further reading  Phing website http://phing.info  Jenkins CI http://jenkins-ci.org  Setting up Phing under Jenkins http://bit.ly/9EgmN  This presentation http://www.slideshare.net/mdekrijger/phing-7900127
  • 15. Questions?  If any