SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Putting Phing to Work for You
                          Hans Lellelid
          International PHP Conference
                            2007-11-05
Introduction
• My name is Hans Lellelid
• Developer & Manager at Applied Security,
  Inc. (near Washington DC).
• PHP developer and OO evangelist.
• I ported Phing to PHP5 in 2004.
• I now manage the Phing project with
  Michiel Rook.




Hans Lellelid: Putting Phing to Work for You    2
What is it?
•   PHing Is Not Gnumake
•   It is a project build tool.
•   Original PHP4 version by Andreas Aderhold
•   Written for PHP5
•   Based on Apache Ant
•   Cross-platform (i.e. Windows too)
•   http://phing.info/



Hans Lellelid: Putting Phing to Work for You      3
Workshop Topics: Fundamentals
•   Phing basics
•   Creating a first build file
•   Transforming directories and files
•   Performing PDO tasks
•   Gathering user input
•   Building phpdoc
•   Running unit tests
•   Integrating with CI tools


Hans Lellelid: Putting Phing to Work for You   4
Workshop Topics: Extension
•   Using PHP code in a build file
•   Building a simple Task
•   Writing more complex Task
•   Creating a shared Type
•   Custom filters
•   Custom selectors
•   Custom logger/listener
•   Custom input handlers


Hans Lellelid: Putting Phing to Work for You   5
Getting Started




Hans Lellelid: Putting Phing to Work for You   6
Install Phing
• Install via PEAR
      – pear channel-discover pear.phing.info
      – pear install phing/phing
• Install “traditional” package
      – Available on Download page
• Install from SVN
      – svn co http://svn.phing.info/trunk phing




Hans Lellelid: Putting Phing to Work for You       7
Following Along
• Install via PEAR
      – pear install phing/phing
      – Install “traditional” package
• Available on Download page
      – Install from SVN
• svn co http://svn.phing.info/trunk phing




Hans Lellelid: Putting Phing to Work for You   8
The phing script
• A wrapper shell script for phing.php script.
• Sets default logger to use (dependent on
  system)
• Typical usage: phing [target]
• Other useful options:
      – Help (-h)
      – Specify properties (-Dpropname=value)
      – List targets (-l)
      – Get more output (-verbose or -debug)

Hans Lellelid: Putting Phing to Work for You    9
Buildfiles
• Build files are XML
• Build files are composed of:
      – Tasks: a “build-in” piece of code that a
        specific function. E.g. <mkdir>
      – Types: data structures that are used
        commonly by tasks. E.g. <path>
      – Targets: grouping of Tasks that perform a
        more general function. E.g. Copy files to a
        new directory.
      – A Project: the root node for the build file.

Hans Lellelid: Putting Phing to Work for You       10
A simple build file
     <project name=quot;samplequot; default=quot;mainquot;>
        <property name=quot;verquot; value=quot;1.0.1quot;/>
        <property file=quot;build.propertiesquot;/>

          <target name=quot;mainquot;>
            <mkdir dir=quot;./build/${ver}quot;>
            <copy todir=quot;./build/${ver}quot;>
               <fileset dir=quot;.quot;
                  includes=quot;*.txtquot; />
            </copy>
          </target>

     </project>
Hans Lellelid: Putting Phing to Work for You   11
Javaisms
• Properties
      – Properties are variables for build scripts.
      – Like php.ini, but more flexible:
            • tgz = ${pkg}-${ver}.tgz
      – Can be set in build script or imported from
        files.
• Dot-path notation for class names:
      – path.to.Class = path/to/Class.php
      – Represents directory and class name in a
        single string.
Hans Lellelid: Putting Phing to Work for You          12
Control Structures
• depends, if, and unless attributes provide
  control over target execution condition and
  sequence.
• <if> task provides a more familiar (to
  developers) control structure that can be
  used within a target.




Hans Lellelid: Putting Phing to Work for You   13
Reorganize, Transform




Hans Lellelid: Putting Phing to Work for You   14
Match a bunch of files
• The <fileset> type represents an
  extremely powerful way to select a
  group of files for processing
• Many built-in tasks support <fileset>




Hans Lellelid: Putting Phing to Work for You   15
Fileset Examples
    <fileset dir=quot;./webappquot;
     includes=quot;**/*.htmlquot;
     excludes=quot;**/test-*quot;/>

    <fileset dir=quot;./webappquot;>
     <include name=quot;img/${theme}/*.jpgquot;/>
     <include name=quot;tpl/${lang}/*.phtmlquot;/>
     <exclude name=quot;**/*.bakquot;/>
     <exclude name=quot;**/test/**quot;/>
    </fileset>




Hans Lellelid: Putting Phing to Work for You   16
Fine-tuned Selection
• Selectors provide entirely new dimensions
  for <fileset> file matching criteria.
• Some examples of selectors:
      – Created before/after certain date
      – Greater/less than specified size
      – Type ('file' or 'dir')
      – At specific depth in dir structure
      – Having corresponding file in another dir.



Hans Lellelid: Putting Phing to Work for You        17
Selector examples
 <fileset dir=quot;${htdocs.dir}quot;>
    <includes name=”**/*.html”/>
    <containsregexp
      expression=quot;/prodd+.phpquot;/>
 </fileset>

 <fileset dir=quot;${dist}quot; includes=quot;**quot;>
     <or>
          <present targetdir=quot;${htdocs}quot;/>
          <date datetime=quot;01/01/2007quot;
        when=quot;beforequot;/>
     </or>
 </fileset>

Hans Lellelid: Putting Phing to Work for You   18
Filesystem Transformations
• The <mapper> element adds filesystem
  transformation capabilities to supporting
  tasks (e.g. <copy>, <move>).
• For example:
      – Change all “.php” files to “.html”
      – Remove dirs from filename
      – Change all files to the same filename
• Custom mappers can be defined.


Hans Lellelid: Putting Phing to Work for You    19
Mapper examples
 <copy todir=quot;/tmpquot;>
    <mapper type=quot;globquot; from=quot;*.phpquot;
      to=quot;*.php.bakquot; />
    <fileset dir=quot;./appquot;
      includes=quot;**/*.phpquot; />
 </copy>

 <copy todir=quot;${deploy.dir}quot;>
    <mapper type=quot;regexpquot;
      from=quot;^(.*)-(.*).conf.xmlquot;
      to=quot;1.2.phpquot;/>
    <fileset dir=quot;${config.src.dir}quot;
      includes=quot;**/*.conf.xmlquot; />
 </copy>
Hans Lellelid: Putting Phing to Work for You   20
Data Transformation
• The <filterchain> type adds data
  filtering/transforming capabilities to
  supporting tasks.
• Tasks that support <filterchain> include
  <copy>, <move>, <append> + more
• For example:
      – Strip comments from files
      – Replace values in files (+ regexp)
      – Perform XSLT transformation
• Easily add your own.
Hans Lellelid: Putting Phing to Work for You   21
Filtering examples
    <copy todir=quot;${build}/htdocsquot;>
       <fileset includes=quot;*.htmlquot;/>
       <filterchain>
         <replaceregexp>
            <regexp pattern=quot;rnquot;
              replace=quot;nquot;/>
         </replaceregexp>
         <tidyfilter encoding=quot;utf8quot;>
            <config name=quot;indentquot;
              value=quot;truequot;/>
         </tidyfilter>
       </filterchain>
    </copy>

Hans Lellelid: Putting Phing to Work for You   22
Other Tasks




Hans Lellelid: Putting Phing to Work for You   23
PDO Task
• <pdo> task allows you to execute SQL
  statements from
      – The buildfile itself
      – One or more files
• Transactions can be explicitly demarcated.
• Output can be formatted with a provided or
  custom formatter.




Hans Lellelid: Putting Phing to Work for You     24
User Input
• The <propertyprompt> task provides an
  basic, easy way to set a value from user
  input.
• The <input> task provides a more feature
  rich version.
      – Special handling of yes/no, multiple choice
      – Support for input validation




Hans Lellelid: Putting Phing to Work for You      25
Build API Docs
• The <phpdoc> task provides a wrapper for
  the PhpDocumentor application.
• A few advantages over standalone phpdoc:
      – Use properties from build script
      – Use Phing features like filesets




Hans Lellelid: Putting Phing to Work for You   26
Unit Testing
• Phing has extensive support for PHPUnit
  and SimpleTest unit testing frameworks
• PHPUnit tasks provide support for
      – Batch testing using <fileset> to select all
        the tests you wish to run.
      – Output in XML (Junit-compatible) and Plain
        text.
      – Report generator creates XHTML reports
        using XSLT
      – Code coverage reports (requires Xdebug)

Hans Lellelid: Putting Phing to Work for You      27
Continuous Integration
• Code -> Commit -> Build -> Test ->
  Report
• CI tools watch the repository and provide
  automated building, testing, reporting.
• CruiseControl is probably the most well-
  known.
• Xinc provides CI tool functionality written in
  PHP.
• Xinc is built to use Phing
• CruiseControl also supports Phing
Hans Lellelid: Putting Phing to Work for You   28
Extending Phing




Hans Lellelid: Putting Phing to Work for You   29
Paths for Extension
• Embedding PHP in build file.
• Write your own class to provide any of the
  functionality we have seen:
      – Task
      – Type
      – Selector
      – Filter
      – Mapper
      – Listener (logger)
      – Input Handler
Hans Lellelid: Putting Phing to Work for You   30
Embedding PHP
• The <php> task allows you to evaluate a
  PHP expression, function call, etc. and store
  result in a property.
• The <adhoc> task allows you to embed
  PHP directly. Useful for including setup
  files.
    <adhoc><![CDATA[
         require_once 'propel/Propel.php';
         Propel::init('bookstore-conf.php');

    ]]></adhoc>
Hans Lellelid: Putting Phing to Work for You   31
Writing a Task
• Extend Task
• Add setter methods for any params your
  task accepts.
• Implement public function main()
• Abstract subclasses exist to make life
  easier (e.g. MatchingTask)




Hans Lellelid: Putting Phing to Work for You   32
Sample Task
    class SampleTask extends Task {

          private $var;

          public function setVar($v) {
            $this->var = $v;
          }

          public function main() {
            $this->log(quot;value: quot;.$this->var);
          }
    }


Hans Lellelid: Putting Phing to Work for You    33
More Complex Task
• Adding support for CDATA text.
• Adding support for Fileset, Filelist,
  Filterchain child elements.
• Supporting nested arbitrary classes ...




Hans Lellelid: Putting Phing to Work for You   34
Data Types
• Classes that can be shared by different
  tasks.
• Extend DataType
• Add setter methods for any params your
  data type accepts/expects.




Hans Lellelid: Putting Phing to Work for You    35
Filters
• Extend BaseFilterReader or
  BaseParamFilterReader and implement
  ChainableReader.
• Implement read() and chain() methods.
      – Read stream and return -1 when stream is
        exhausted.
• If using params, you must initialize them
  locally.
• Use <filterreader classname=”YourClass”>
  in your build file.
Hans Lellelid: Putting Phing to Work for You        36
Selectors
• Extend BaseExtendSelector
• Implement isSelected()
• Use <custom> tag in your build file.




Hans Lellelid: Putting Phing to Work for You      37
Mappers
• Implement FileNameMapper
• Implement main(filename), setFrom(str),
  setTo(str)
• Use <mapper classname=”...”> in your
  build file.




Hans Lellelid: Putting Phing to Work for You     38
Build Listeners
• Implement BuildListener (or
  BuildLogger which expects streams)
• Register on the commandline using
  -listener (or -logger) option.




Hans Lellelid: Putting Phing to Work for You   39
Input Handlers
• Implement InputHandler interface
      – Implement the handleInput(InputRequest)
        method.
• Register on the commandline using
  -listener (or -inputhandler) option.




Hans Lellelid: Putting Phing to Work for You   40
Where next?
• Visit http://phing.info for downloads,
  documentation, and issue tracking.
• Ask questions on the mailing lists.
      – users@phing.tigris.org
      – dev@phing.tigris.org




Hans Lellelid: Putting Phing to Work for You   41

Contenu connexe

Tendances

Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP ApplicationsPavan Kumar N
 
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
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applicationshozn
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentShahar Evron
 
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
 
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
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
 
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
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerJohn Anderson
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package developmentTihomir Opačić
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
New EEA Plone Add-ons
New EEA Plone Add-onsNew EEA Plone Add-ons
New EEA Plone Add-onsAlin Voinea
 
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
 
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
 
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
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture IntroductionHaiqi Chen
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in PerlNaveen Gupta
 

Tendances (20)

Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
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 Phing
 
Propel Your PHP Applications
Propel Your PHP ApplicationsPropel Your PHP Applications
Propel Your PHP Applications
 
Best Practices in PHP Application Deployment
Best Practices in PHP Application DeploymentBest Practices in PHP Application Deployment
Best Practices in PHP Application Deployment
 
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
 
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
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
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
 
Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic  Perl ProgrammerModern Perl for the Unfrozen Paleolithic  Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package development
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
New EEA Plone Add-ons
New EEA Plone Add-onsNew EEA Plone Add-ons
New EEA Plone Add-ons
 
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
 
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
 
Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)Ansible project-deploy (NomadPHP lightning talk)
Ansible project-deploy (NomadPHP lightning talk)
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Web Development in Perl
Web Development in PerlWeb Development in Perl
Web Development in Perl
 

Similaire à Putting Phing to Work for You

Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projectsMpho Mphego
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesPantheon
 
Power shell training
Power shell trainingPower shell training
Power shell trainingDavid Brabant
 
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
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iAlan Seiden
 
Installing Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for WindowsInstalling Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for WindowsJonathan Bloom
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-wayRobert Lujo
 
InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017Mandi Walls
 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Pantheon
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestrationPaolo Tonin
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphpdantleech
 
24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAsKellyn Pot'Vin-Gorman
 
Assignment 1 MapReduce With Hadoop
Assignment 1  MapReduce With HadoopAssignment 1  MapReduce With Hadoop
Assignment 1 MapReduce With HadoopAllison Thompson
 
Holy PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionHoly PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionDave Diehl
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php PresentationAlan Pinstein
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsMichael Lange
 

Similaire à Putting Phing to Work for You (20)

Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projects
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
 
Power shell training
Power shell trainingPower shell training
Power shell training
 
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-)
 
PHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM iPHP Toolkit from Zend and IBM: Open Source on IBM i
PHP Toolkit from Zend and IBM: Open Source on IBM i
 
Installing Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for WindowsInstalling Hortonworks Hadoop for Windows
Installing Hortonworks Hadoop for Windows
 
Django dev-env-my-way
Django dev-env-my-wayDjango dev-env-my-way
Django dev-env-my-way
 
InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017InSpec For DevOpsDays Amsterdam 2017
InSpec For DevOpsDays Amsterdam 2017
 
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...
 
Ansible new paradigms for orchestration
Ansible new paradigms for orchestrationAnsible new paradigms for orchestration
Ansible new paradigms for orchestration
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
Basics PHP
Basics PHPBasics PHP
Basics PHP
 
24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs24HOP Introduction to Linux for SQL Server DBAs
24HOP Introduction to Linux for SQL Server DBAs
 
Assignment 1 MapReduce With Hadoop
Assignment 1  MapReduce With HadoopAssignment 1  MapReduce With Hadoop
Assignment 1 MapReduce With Hadoop
 
Presentation laravel 5 4
Presentation laravel 5 4Presentation laravel 5 4
Presentation laravel 5 4
 
Holy PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood editionHoly PowerShell, BATman! - dogfood edition
Holy PowerShell, BATman! - dogfood edition
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Lean Php Presentation
Lean Php PresentationLean Php Presentation
Lean Php Presentation
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
 
Current state-of-php
Current state-of-phpCurrent state-of-php
Current state-of-php
 

Dernier

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 

Dernier (20)

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Putting Phing to Work for You

  • 1. Putting Phing to Work for You Hans Lellelid International PHP Conference 2007-11-05
  • 2. Introduction • My name is Hans Lellelid • Developer & Manager at Applied Security, Inc. (near Washington DC). • PHP developer and OO evangelist. • I ported Phing to PHP5 in 2004. • I now manage the Phing project with Michiel Rook. Hans Lellelid: Putting Phing to Work for You 2
  • 3. What is it? • PHing Is Not Gnumake • It is a project build tool. • Original PHP4 version by Andreas Aderhold • Written for PHP5 • Based on Apache Ant • Cross-platform (i.e. Windows too) • http://phing.info/ Hans Lellelid: Putting Phing to Work for You 3
  • 4. Workshop Topics: Fundamentals • Phing basics • Creating a first build file • Transforming directories and files • Performing PDO tasks • Gathering user input • Building phpdoc • Running unit tests • Integrating with CI tools Hans Lellelid: Putting Phing to Work for You 4
  • 5. Workshop Topics: Extension • Using PHP code in a build file • Building a simple Task • Writing more complex Task • Creating a shared Type • Custom filters • Custom selectors • Custom logger/listener • Custom input handlers Hans Lellelid: Putting Phing to Work for You 5
  • 6. Getting Started Hans Lellelid: Putting Phing to Work for You 6
  • 7. Install Phing • Install via PEAR – pear channel-discover pear.phing.info – pear install phing/phing • Install “traditional” package – Available on Download page • Install from SVN – svn co http://svn.phing.info/trunk phing Hans Lellelid: Putting Phing to Work for You 7
  • 8. Following Along • Install via PEAR – pear install phing/phing – Install “traditional” package • Available on Download page – Install from SVN • svn co http://svn.phing.info/trunk phing Hans Lellelid: Putting Phing to Work for You 8
  • 9. The phing script • A wrapper shell script for phing.php script. • Sets default logger to use (dependent on system) • Typical usage: phing [target] • Other useful options: – Help (-h) – Specify properties (-Dpropname=value) – List targets (-l) – Get more output (-verbose or -debug) Hans Lellelid: Putting Phing to Work for You 9
  • 10. Buildfiles • Build files are XML • Build files are composed of: – Tasks: a “build-in” piece of code that a specific function. E.g. <mkdir> – Types: data structures that are used commonly by tasks. E.g. <path> – Targets: grouping of Tasks that perform a more general function. E.g. Copy files to a new directory. – A Project: the root node for the build file. Hans Lellelid: Putting Phing to Work for You 10
  • 11. A simple build file <project name=quot;samplequot; default=quot;mainquot;> <property name=quot;verquot; value=quot;1.0.1quot;/> <property file=quot;build.propertiesquot;/> <target name=quot;mainquot;> <mkdir dir=quot;./build/${ver}quot;> <copy todir=quot;./build/${ver}quot;> <fileset dir=quot;.quot; includes=quot;*.txtquot; /> </copy> </target> </project> Hans Lellelid: Putting Phing to Work for You 11
  • 12. Javaisms • Properties – Properties are variables for build scripts. – Like php.ini, but more flexible: • tgz = ${pkg}-${ver}.tgz – Can be set in build script or imported from files. • Dot-path notation for class names: – path.to.Class = path/to/Class.php – Represents directory and class name in a single string. Hans Lellelid: Putting Phing to Work for You 12
  • 13. Control Structures • depends, if, and unless attributes provide control over target execution condition and sequence. • <if> task provides a more familiar (to developers) control structure that can be used within a target. Hans Lellelid: Putting Phing to Work for You 13
  • 14. Reorganize, Transform Hans Lellelid: Putting Phing to Work for You 14
  • 15. Match a bunch of files • The <fileset> type represents an extremely powerful way to select a group of files for processing • Many built-in tasks support <fileset> Hans Lellelid: Putting Phing to Work for You 15
  • 16. Fileset Examples <fileset dir=quot;./webappquot; includes=quot;**/*.htmlquot; excludes=quot;**/test-*quot;/> <fileset dir=quot;./webappquot;> <include name=quot;img/${theme}/*.jpgquot;/> <include name=quot;tpl/${lang}/*.phtmlquot;/> <exclude name=quot;**/*.bakquot;/> <exclude name=quot;**/test/**quot;/> </fileset> Hans Lellelid: Putting Phing to Work for You 16
  • 17. Fine-tuned Selection • Selectors provide entirely new dimensions for <fileset> file matching criteria. • Some examples of selectors: – Created before/after certain date – Greater/less than specified size – Type ('file' or 'dir') – At specific depth in dir structure – Having corresponding file in another dir. Hans Lellelid: Putting Phing to Work for You 17
  • 18. Selector examples <fileset dir=quot;${htdocs.dir}quot;> <includes name=”**/*.html”/> <containsregexp expression=quot;/prodd+.phpquot;/> </fileset> <fileset dir=quot;${dist}quot; includes=quot;**quot;> <or> <present targetdir=quot;${htdocs}quot;/> <date datetime=quot;01/01/2007quot; when=quot;beforequot;/> </or> </fileset> Hans Lellelid: Putting Phing to Work for You 18
  • 19. Filesystem Transformations • The <mapper> element adds filesystem transformation capabilities to supporting tasks (e.g. <copy>, <move>). • For example: – Change all “.php” files to “.html” – Remove dirs from filename – Change all files to the same filename • Custom mappers can be defined. Hans Lellelid: Putting Phing to Work for You 19
  • 20. Mapper examples <copy todir=quot;/tmpquot;> <mapper type=quot;globquot; from=quot;*.phpquot; to=quot;*.php.bakquot; /> <fileset dir=quot;./appquot; includes=quot;**/*.phpquot; /> </copy> <copy todir=quot;${deploy.dir}quot;> <mapper type=quot;regexpquot; from=quot;^(.*)-(.*).conf.xmlquot; to=quot;1.2.phpquot;/> <fileset dir=quot;${config.src.dir}quot; includes=quot;**/*.conf.xmlquot; /> </copy> Hans Lellelid: Putting Phing to Work for You 20
  • 21. Data Transformation • The <filterchain> type adds data filtering/transforming capabilities to supporting tasks. • Tasks that support <filterchain> include <copy>, <move>, <append> + more • For example: – Strip comments from files – Replace values in files (+ regexp) – Perform XSLT transformation • Easily add your own. Hans Lellelid: Putting Phing to Work for You 21
  • 22. Filtering examples <copy todir=quot;${build}/htdocsquot;> <fileset includes=quot;*.htmlquot;/> <filterchain> <replaceregexp> <regexp pattern=quot;rnquot; replace=quot;nquot;/> </replaceregexp> <tidyfilter encoding=quot;utf8quot;> <config name=quot;indentquot; value=quot;truequot;/> </tidyfilter> </filterchain> </copy> Hans Lellelid: Putting Phing to Work for You 22
  • 23. Other Tasks Hans Lellelid: Putting Phing to Work for You 23
  • 24. PDO Task • <pdo> task allows you to execute SQL statements from – The buildfile itself – One or more files • Transactions can be explicitly demarcated. • Output can be formatted with a provided or custom formatter. Hans Lellelid: Putting Phing to Work for You 24
  • 25. User Input • The <propertyprompt> task provides an basic, easy way to set a value from user input. • The <input> task provides a more feature rich version. – Special handling of yes/no, multiple choice – Support for input validation Hans Lellelid: Putting Phing to Work for You 25
  • 26. Build API Docs • The <phpdoc> task provides a wrapper for the PhpDocumentor application. • A few advantages over standalone phpdoc: – Use properties from build script – Use Phing features like filesets Hans Lellelid: Putting Phing to Work for You 26
  • 27. Unit Testing • Phing has extensive support for PHPUnit and SimpleTest unit testing frameworks • PHPUnit tasks provide support for – Batch testing using <fileset> to select all the tests you wish to run. – Output in XML (Junit-compatible) and Plain text. – Report generator creates XHTML reports using XSLT – Code coverage reports (requires Xdebug) Hans Lellelid: Putting Phing to Work for You 27
  • 28. Continuous Integration • Code -> Commit -> Build -> Test -> Report • CI tools watch the repository and provide automated building, testing, reporting. • CruiseControl is probably the most well- known. • Xinc provides CI tool functionality written in PHP. • Xinc is built to use Phing • CruiseControl also supports Phing Hans Lellelid: Putting Phing to Work for You 28
  • 29. Extending Phing Hans Lellelid: Putting Phing to Work for You 29
  • 30. Paths for Extension • Embedding PHP in build file. • Write your own class to provide any of the functionality we have seen: – Task – Type – Selector – Filter – Mapper – Listener (logger) – Input Handler Hans Lellelid: Putting Phing to Work for You 30
  • 31. Embedding PHP • The <php> task allows you to evaluate a PHP expression, function call, etc. and store result in a property. • The <adhoc> task allows you to embed PHP directly. Useful for including setup files. <adhoc><![CDATA[ require_once 'propel/Propel.php'; Propel::init('bookstore-conf.php'); ]]></adhoc> Hans Lellelid: Putting Phing to Work for You 31
  • 32. Writing a Task • Extend Task • Add setter methods for any params your task accepts. • Implement public function main() • Abstract subclasses exist to make life easier (e.g. MatchingTask) Hans Lellelid: Putting Phing to Work for You 32
  • 33. Sample Task class SampleTask extends Task { private $var; public function setVar($v) { $this->var = $v; } public function main() { $this->log(quot;value: quot;.$this->var); } } Hans Lellelid: Putting Phing to Work for You 33
  • 34. More Complex Task • Adding support for CDATA text. • Adding support for Fileset, Filelist, Filterchain child elements. • Supporting nested arbitrary classes ... Hans Lellelid: Putting Phing to Work for You 34
  • 35. Data Types • Classes that can be shared by different tasks. • Extend DataType • Add setter methods for any params your data type accepts/expects. Hans Lellelid: Putting Phing to Work for You 35
  • 36. Filters • Extend BaseFilterReader or BaseParamFilterReader and implement ChainableReader. • Implement read() and chain() methods. – Read stream and return -1 when stream is exhausted. • If using params, you must initialize them locally. • Use <filterreader classname=”YourClass”> in your build file. Hans Lellelid: Putting Phing to Work for You 36
  • 37. Selectors • Extend BaseExtendSelector • Implement isSelected() • Use <custom> tag in your build file. Hans Lellelid: Putting Phing to Work for You 37
  • 38. Mappers • Implement FileNameMapper • Implement main(filename), setFrom(str), setTo(str) • Use <mapper classname=”...”> in your build file. Hans Lellelid: Putting Phing to Work for You 38
  • 39. Build Listeners • Implement BuildListener (or BuildLogger which expects streams) • Register on the commandline using -listener (or -logger) option. Hans Lellelid: Putting Phing to Work for You 39
  • 40. Input Handlers • Implement InputHandler interface – Implement the handleInput(InputRequest) method. • Register on the commandline using -listener (or -inputhandler) option. Hans Lellelid: Putting Phing to Work for You 40
  • 41. Where next? • Visit http://phing.info for downloads, documentation, and issue tracking. • Ask questions on the mailing lists. – users@phing.tigris.org – dev@phing.tigris.org Hans Lellelid: Putting Phing to Work for You 41