SlideShare a Scribd company logo
1 of 60
Download to read offline
Building and deploying PHP applications
               with Phing

                Michiel Rook

            PHP UK Conference 2012
About me


  • Freelance PHP & Java contractor / consultant

  • PHP since ’99

  • Phing project lead

  • http://www.linkedin.com/in/michieltcs

  • @michieltcs




                                    Building and deploying PHP applications with Phing
This Talk


  • Why use a build tool

  • What is Phing

  • Usage

  • Various examples

  • Extending Phing




                           Building and deploying PHP applications with Phing
Why Use A Build Tool?
Why Use A Build Tool




                                 Repetition
              http://www.flickr.com/photos/andrewmalone/5162632817/




                                           Building and deploying PHP applications with Phing
Repetition


  • We are human

  • We get bored

  • We forget things

  • We make mistakes




                       Building and deploying PHP applications with Phing
Repetition


  • Version control

  • (Unit) Testing

  • Configuring

  • Packaging

  • Uploading

  • DB changes

  • ...




                      Building and deploying PHP applications with Phing
Repetition


  • Version control

  • (Unit) Testing

  • Configuring

  • Packaging

  • Uploading

  • DB changes

  • ...

  • Boring!




                      Building and deploying PHP applications with Phing
Why Use A Build Tool




                                 Automate!
               http://www.flickr.com/photos/patrick_h/6209981673/




                                          Building and deploying PHP applications with Phing
Automate!


  • Developers, testers, administrators...

  • Easier handover to new team members

  • Improves quality

  • Reduces errors

  • Saves time

  • Consolidate scripts, reduce technical debt




                                       Building and deploying PHP applications with Phing
What Is Phing




                http://www.flickr.com/photos/canucksfan604/5471322484/


                                             Building and deploying PHP applications with Phing
What Is Phing


  • PHing Is Not GNU make; it’s a PHP project build system or build tool
    based on Apache Ant.

  • Originally developed by Binarycloud

  • Ported to PHP5 by Hans Lellelid

  • 2004: my first commit

  • 2009: lead




                                      Building and deploying PHP applications with Phing
What Can Phing Do


  • Scripting using XML build files

  • Human readable

  • Mostly cross-platform

  • Minimal dependencies

  • Interface to various popular (PHP) tools




                                      Building and deploying PHP applications with Phing
What Can Phing Do


  • Scripting using XML build files

  • Human readable

  • Mostly cross-platform

  • Minimal dependencies

  • Interface to various popular (PHP) tools

  • ”Good glue”




                                      Building and deploying PHP applications with Phing
What Can Phing Do




                    Building and deploying PHP applications with Phing
Why Use Phing


  • Ant?

  • Rich set of tasks

  • Integration with PHP specific tools

  • Allows you to stay in the PHP infrastructure

  • Easy to extend

  • Embed PHP code directly in the build file




                                      Building and deploying PHP applications with Phing
The Basics
Installing Phing

  • PEAR installation

    $ pear channel-discover pear.phing.info
    $ pear install [--alldeps] phing/phing

  • Optionally, install the documentation package

    $ pear install phing/phingdocs




                                     Building and deploying PHP applications with Phing
Build Files


  • Phing uses XML build files

  • Contain standard elements

       • Task: code that performs a specific function (svn checkout,
         mkdir, etc.)
       • Target: groups of tasks, can optionally depend on other targets
       • Project: root node, contains multiple targets




                                      Building and deploying PHP applications with Phing
Example Build File

  <project name="Example" default="world">
      <target name="hello">
          <echo>Hello</echo>
      </target>

      <target name="world" depends="hello">
          <echo>World!</echo>
      </target>
  </project>

   Buildfile: /home/michiel/phing/simple.xml

   Example > hello:

        [echo] Hello

   Example > world:

        [echo] World!

   BUILD FINISHED



                                      Building and deploying PHP applications with Phing
Properties

  • Simple key-value files (.ini)

  ## build.properties
  version=1.0

  • Can be expanded by using ${key} in the build file

  $ phing -propertyfile build.properties ...

  <project name="Example" default="default">
      <target name="default">
          <property file="build.properties" />

          <echo>${version}</echo>
      </target>
  </project>




                                    Building and deploying PHP applications with Phing
Filesets

  • Constructs a group of files to process

  • Supported by most tasks

   <fileset dir="./application" includes="**"/>

   <fileset dir="./application">
       <include name="**/*.php" />
       <exclude name="**/*Test.php" />
   </fileset>

  • References: define once, use many

   <fileset dir="./application" includes="**" id="files"/>

   <fileset refid="files"/>




                                     Building and deploying PHP applications with Phing
Filesets

  • Selectors allow fine-grained matching on certain attributes

  • contains, date, file name & size, ...

   <fileset dir="${dist}">
       <and>
           <filename name="**"/>
           <date datetime="01/01/2011" when="before"/>
       </and>
   </fileset>




                                       Building and deploying PHP applications with Phing
Mappers & Filters


  • Transform files during copy/move/...

  • Mappers

      • Change filename
      • Flatten directories

  • Filters

      • Strip comments, white space
      • Replace values
      • Perform XSLT transformation
      • Translation (i18n)




                                      Building and deploying PHP applications with Phing
Mappers & Filters

  <copy todir="${build}">
      <fileset refid="files"/>
      <mapper type="glob" from="*.txt" to="*.new.txt"/>
      <filterchain>
          <replaceregexp>
              <regexp pattern="rn" replace="n"/>
              <expandproperties/>
          </replaceregexp>
      </filterchain>
  </copy>




                                  Building and deploying PHP applications with Phing
Examples
Examples


  • Version control

  • Unit testing

  • Packaging

  • Deployment

  • Database migration

  • Continuous integration




                             Building and deploying PHP applications with Phing
Version Control

  • (CVS), SVN, Git

  <svncopy
     username="michiel"
     password="test"
     repositoryurl="svn://localhost/phing/trunk/"
     todir="svn://localhost/phing/tags/1.0"/>

  <svnexport
     repositoryurl="svn://localhost/project/trunk/"
     todir="/home/michiel/dev"/>

  <svnlastrevision
     repositoryurl="svn://localhost/project/trunk/"
     propertyname="lastrev"/>
  <echo>Last revision: ${lastrev}</echo>




                                  Building and deploying PHP applications with Phing
PHPUnit

  • Built-in support for most configuration options

  • Gathers code coverage information

  • Various output formats (JUnit / Clover)

  • Reporting (JUnit style)




                                      Building and deploying PHP applications with Phing
PHPUnit Example

  • Stop the build when a test fails

  <phpunit haltonfailure="true" haltonerror="true"
      bootstrap="my_bootstrap.php" printsummary="true">
      <batchtest>
          <fileset dir="src">
              <include name="**/*Test.php"/>
          </fileset>
      </batchtest>
  </phpunit>

   Buildfile: /home/michiel/phpunit/build.xml

   Demo > test:

     [phpunit] Total tests run: 1, Failures: 1, Errors: 0,
         Incomplete: 0, Skipped: 0, Time elapsed: 0.00591 s
   Execution of target "test" failed for the following reason:
   /home/michiel/phpunit/build.xml:3:44: Test FAILURE (testSayHello in
   class HelloWorldTest): Failed asserting that two strings are equal.




                                       Building and deploying PHP applications with Phing
PHPUnit Example

  • Determine which files to include in the coverage report

  <coverage-setup database="reports/coverage.db">
      <fileset dir="src">
          <include name="**/*.php"/>
          <exclude name="**/*Test.php"/>
      </fileset>
  </coverage-setup>

  • Gather code coverage and other data during the test run

  <phpunit codecoverage="true">
      <formatter type="xml" todir="reports"/>
      <batchtest>
          <fileset dir="src">
              <include name="**/*Test.php"/>
          </fileset>
      </batchtest>
  </phpunit>



                                     Building and deploying PHP applications with Phing
PHPUnit Example

  • Generate some reports

  <phpunitreport infile="reports/testsuites.xml"
      format="frames" todir="reports/tests"/>
  <coverage-report outfile="reports/coverage.xml">
      <report todir="reports/coverage" title="Demo"/>
  </coverage-report>




                                  Building and deploying PHP applications with Phing
Documentation

  • Phing currently integrates with popular documentation tools

      • DocBlox
      • PhpDocumentor
      • ApiGen

  • Also supports r(e)ST (reStructuredText)

  <docblox title="Phing API Documentation"
      output="docs" quiet="true">
      <fileset dir="../../classes">
          <include name="**/*.php"/>
      </fileset>
  </docblox>




                                     Building and deploying PHP applications with Phing
DocBlox




          Building and deploying PHP applications with Phing
Packaging

  • Create bundles or packages

  • Phing supports most popular formats: tar (pear), zip, phar

  <pearpkg name="demo" dir=".">
      <fileset refid="files"/>

      <option   name="outputdirectory" value="./build"/>
      <option   name="description">Test package</option>
      <option   name="version" value="0.1.0"/>
      <option   name="state" value="beta"/>

      <mapping name="maintainers">
          <element>
              <element key="handle" value="test"/>
              <element key="name" value="Test"/>
              <element key="email" value="test@test.nl"/>
              <element key="role" value="lead"/>
          </element>
      </mapping>
  </pearpkg>

                                      Building and deploying PHP applications with Phing
Packaging - TAR / ZIP

   <tar compression="gzip" destFile="package.tgz"
       basedir="build"/>

   <zip destfile="htmlfiles.zip">
       <fileset dir=".">
           <include name="**/*.html"/>
       </fileset>
   </zip>




                                   Building and deploying PHP applications with Phing
Packaging - PHAR

  <pharpackage
          compression="gzip"
          destfile="test.phar"
          stub="stub.php"
          basedir=".">
          <fileset dir="hello">
                  <include name="**/**" />
          </fileset>
          <metadata>
                  <element name="version" value="1.0" />
                  <element name="authors">
                          <element name="John Doe">
                                  <element name="e-mail"
                                  value="john@example.com" />
                          </element>
                  </element>
          </metadata>
  </pharpackage>




                                  Building and deploying PHP applications with Phing
Putting it all together - deployments
Copying to a server

  • SSH

  <scp username="john" password="smith"
      host="webserver" todir="/www/htdocs/project/">
      <fileset dir="test">
          <include name="*.html"/>
      </fileset>
  </scp>

  • FTP

  <ftpdeploy
      host="server01"
      username="john"
      password="smit"
      dir="/var/www">
      <fileset dir=".">
          <include name="*.html"/>
      </fileset>
  </ftpdeploy>

                                     Building and deploying PHP applications with Phing
Symbolic links

  • All releases stored in ”backup” directory

  • Symlink application directory to latest release (similar to Capistrano)

  • Allows for easy (code) rollbacks

  <svnlastrevision repositoryurl="${deploy.svn}"
      property="deploy.rev"/>

  <svnexport repositoryurl="${deploy.svn}"
      todir="/www/releases/build-${deploy.rev}"/>

  <symlink target="/www/releases/build-${deploy.rev}"
      link="/www/current"/>

  • Also on a remote server

  <ssh host="webserver" command="ln -s
      /www/releases/build-${deploy.rev} /www/current"/>



                                       Building and deploying PHP applications with Phing
Multiple servers / targets

  • Several deployment targets: testing, staging, production, ...

  • Keep one property file per target

  • Select property file based on input

   <input propertyname="env"
           validargs="testing,staging,production">
   Enter environment name
   </input>

   <property file="${env}.properties"/>

   <ssh host="${deploy.host}" command="..."/>




                                       Building and deploying PHP applications with Phing
Database Migration

  • Set of delta SQL files (1-create-post.sql)

  • Tracks current version of your db in changelog table

  • Generates do and undo SQL files

  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
  )




                                      Building and deploying PHP applications with Phing
Database Migration

  • Delta scripts with do (up) & undo (down) parts

  --//

  CREATE TABLE ‘post‘ (
      ‘title‘ VARCHAR(255),
      ‘time_created‘ DATETIME,
      ‘content‘ MEDIUMTEXT
  );

  --//@UNDO

  DROP TABLE ‘post‘;

  --//




                                     Building and deploying PHP applications with Phing
Database Migration

  <dbdeploy
      url="sqlite:test.db"
      dir="deltas"
      outputfile="deploy.sql"
      undooutputfile="undo.sql"/>

  <pdosqlexec
      src="deploy.sql"
      url="sqlite:test.db"/>

   Buildfile: /home/michiel/dbdeploy/build.xml

   Demo > migrate:

    [dbdeploy] Getting applied changed numbers from DB:
        mysql:host=localhost;dbname=demo
    [dbdeploy] Current db revision: 0
    [dbdeploy] Checkall:
   [pdosqlexec] Executing file: /home/michiel/dbdeploy/deploy.sql
   [pdosqlexec] 3 of 3 SQL statements executed successfully

   BUILD FINISHED


                                      Building and deploying PHP applications with Phing
Database Migration

  -- Fragment begins: 1 --
  INSERT INTO changelog
      (change_number, delta_set, start_dt, applied_by, description)
      VALUES (1, ’Main’, NOW(), ’dbdeploy’,
      ’1-create_initial_schema.sql’);
  --//

  CREATE TABLE ‘post‘ (
      ‘title‘ VARCHAR(255),
      ‘time_created‘ DATETIME,
      ‘content‘ MEDIUMTEXT
  );

  UPDATE changelog
      SET complete_dt = NOW()
      WHERE change_number = 1
      AND delta_set = ’Main’;
  -- Fragment ends: 1 --




                                  Building and deploying PHP applications with Phing
Database Migration

  -- Fragment begins: 1 --

  DROP TABLE ‘post‘;

  --//

  DELETE FROM changelog
                              WHERE change_number = 1
                              AND delta_set = ’Main’;
  -- Fragment ends: 1 --




                             Building and deploying PHP applications with Phing
Phing & Jenkins


  • Continuous integration

  • Phing plugin

  • Build periodically or after each commit

  • Verify and test the build

  • Deploy results




                                      Building and deploying PHP applications with Phing
Phing & Jenkins




                  Building and deploying PHP applications with Phing
Phing & Jenkins




                  Building and deploying PHP applications with Phing
Phing & Jenkins




                  Building and deploying PHP applications with Phing
Demonstration
Extending Phing
Extending Phing


  • Numerous extension points

      • Tasks
      • Types
      • Selectors
      • Filters
      • Mappers
      • Loggers
      • ...




                                Building and deploying PHP applications with Phing
Sample Task

  • Extends from Task

  • Contains main() method and optionally init()

  • Setter method for each attribute in the build file

  class SampleTask extends Task
  {
      private $var;

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

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


                                       Building and deploying PHP applications with Phing
Sample Task

  • Use taskdef to make Phing aware of your new task

  <project name="Example" default="default">
      <taskdef name="sample"
          classpath="/dev/src"
          classname="tasks.my.SampleTask" />

      <target name="default">
          <sample var="Hello World" />
      </target>
  </project>




                                   Building and deploying PHP applications with Phing
Ad Hoc Extension

  • Define a task within your build file

  <target name="main">
      <adhoc-task name="foo"><![CDATA[
      class FooTest extends Task {
          private $bar;

           function setBar($bar) {
               $this->bar = $bar;
           }

           function main() {
               $this->log("In FooTest: " . $this->bar);
           }
      }
      ]]></adhoc-task>
      <foo bar="TEST"/>
  </target>




                                         Building and deploying PHP applications with Phing
Future Improvements


  • More tasks & support

  • Better performance

  • PHAR package (including popular dependencies)

  • More documentation

  • Increased test coverage

  • IDE support




                                  Building and deploying PHP applications with Phing
Future Improvements


  • More tasks & support

  • Better performance

  • PHAR package (including popular dependencies)

  • More documentation

  • Increased test coverage

  • IDE support

  • Pull requests! :-)




                                  Building and deploying PHP applications with Phing
Helpful Links


  • http://pear.php.net/

  • http://www.docblox-project.org/

  • http://www.dbdeploy.com/

  • http://www.jenkins-ci.org/

  • http://www.phing.info/docs/guide/stable/

  • http://github.com/phingofficial/phing




                               Building and deploying PHP applications with Phing
Questions?




             http://joind.in/4954

             http://www.phing.info

                #phing (freenode)

                  @phingofficial

                   Thank you!




                          Building and deploying PHP applications with Phing

More Related Content

What's hot

Git flow Introduction
Git flow IntroductionGit flow Introduction
Git flow IntroductionDavid Paluy
 
React.js 세미나
React.js 세미나React.js 세미나
React.js 세미나Briantina
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX, Inc.
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - ExplainedSmita Prasad
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
Scalable Django Architecture
Scalable Django ArchitectureScalable Django Architecture
Scalable Django ArchitectureRami Sayar
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case studyWoo Jin Kim
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Tom Brander
 
Apache Camel Introduction
Apache Camel IntroductionApache Camel Introduction
Apache Camel IntroductionClaus Ibsen
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git TutorialSage Sharp
 
Let's read code: the python-requests library
Let's read code: the python-requests libraryLet's read code: the python-requests library
Let's read code: the python-requests librarySusan Tan
 

What's hot (20)

Git flow Introduction
Git flow IntroductionGit flow Introduction
Git flow Introduction
 
React.js 세미나
React.js 세미나React.js 세미나
React.js 세미나
 
NEXT.JS
NEXT.JSNEXT.JS
NEXT.JS
 
Maven
MavenMaven
Maven
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Git flow
Git flowGit flow
Git flow
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA Broadcast
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - Explained
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
Spring & hibernate
Spring & hibernateSpring & hibernate
Spring & hibernate
 
Php tutorial
Php  tutorialPhp  tutorial
Php tutorial
 
Scalable Django Architecture
Scalable Django ArchitectureScalable Django Architecture
Scalable Django Architecture
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Git & GitLab
Git & GitLabGit & GitLab
Git & GitLab
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case study
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?
 
Apache Camel Introduction
Apache Camel IntroductionApache Camel Introduction
Apache Camel Introduction
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git Tutorial
 
Let's read code: the python-requests library
Let's read code: the python-requests libraryLet's read code: the python-requests library
Let's read code: the python-requests library
 

Similar to Building and deploying PHP applications with Phing

Automating Web Application Deployment
Automating Web Application DeploymentAutomating Web Application Deployment
Automating Web Application DeploymentMathew Byrne
 
Getting Started With Jenkins And Drupal
Getting Started With Jenkins And DrupalGetting Started With Jenkins And Drupal
Getting Started With Jenkins And DrupalPhilip Norton
 
Desktop Apps with PHP and Titanium
Desktop Apps with PHP and TitaniumDesktop Apps with PHP and Titanium
Desktop Apps with PHP and TitaniumBen Ramsey
 
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
 
Putting "Phings" together - how to automate your life
Putting "Phings" together - how to automate your lifePutting "Phings" together - how to automate your life
Putting "Phings" together - how to automate your lifeBoyan Borisov
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Michael Lihs
 
Unit testing symfony plugins with php unit
Unit testing symfony plugins with php unitUnit testing symfony plugins with php unit
Unit testing symfony plugins with php unitChristian Schaefer
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011Bachkoutou Toutou
 
Build Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartBuild Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartEric Overfield
 
Introduction to PHP - SDPHP
Introduction to PHP - SDPHPIntroduction to PHP - SDPHP
Introduction to PHP - SDPHPEric Johnson
 
Professional PHP: an open-source alternative for enterprise development [Antw...
Professional PHP: an open-source alternative for enterprise development [Antw...Professional PHP: an open-source alternative for enterprise development [Antw...
Professional PHP: an open-source alternative for enterprise development [Antw...Combell NV
 
CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comChristopher Cubos
 
Web development with Python
Web development with PythonWeb development with Python
Web development with PythonRaman Balyan
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Max Romanovsky
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovskyphp-user-group-minsk
 
Understanding SharePoint Framework Extensions
Understanding SharePoint Framework ExtensionsUnderstanding SharePoint Framework Extensions
Understanding SharePoint Framework ExtensionsBIWUG
 

Similar to Building and deploying PHP applications with Phing (20)

Automating Web Application Deployment
Automating Web Application DeploymentAutomating Web Application Deployment
Automating Web Application Deployment
 
Getting Started With Jenkins And Drupal
Getting Started With Jenkins And DrupalGetting Started With Jenkins And Drupal
Getting Started With Jenkins And Drupal
 
Desktop Apps with PHP and Titanium
Desktop Apps with PHP and TitaniumDesktop Apps with PHP and Titanium
Desktop Apps with PHP and Titanium
 
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 Phing
 
Putting "Phings" together - how to automate your life
Putting "Phings" together - how to automate your lifePutting "Phings" together - how to automate your life
Putting "Phings" together - how to automate your life
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 
Unit testing symfony plugins with php unit
Unit testing symfony plugins with php unitUnit testing symfony plugins with php unit
Unit testing symfony plugins with php unit
 
Stress Free Deployment - Confoo 2011
Stress Free Deployment  - Confoo 2011Stress Free Deployment  - Confoo 2011
Stress Free Deployment - Confoo 2011
 
Build Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartBuild Your First SharePoint Framework Webpart
Build Your First SharePoint Framework Webpart
 
Introduction to PHP - SDPHP
Introduction to PHP - SDPHPIntroduction to PHP - SDPHP
Introduction to PHP - SDPHP
 
Improving qa on php projects
Improving qa on php projectsImproving qa on php projects
Improving qa on php projects
 
Professional PHP: an open-source alternative for enterprise development [Antw...
Professional PHP: an open-source alternative for enterprise development [Antw...Professional PHP: an open-source alternative for enterprise development [Antw...
Professional PHP: an open-source alternative for enterprise development [Antw...
 
Continuous feature-development
Continuous feature-developmentContinuous feature-development
Continuous feature-development
 
Php
PhpPhp
Php
 
CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.com
 
Web development with Python
Web development with PythonWeb development with Python
Web development with Python
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovsky
 
Understanding SharePoint Framework Extensions
Understanding SharePoint Framework ExtensionsUnderstanding SharePoint Framework Extensions
Understanding SharePoint Framework Extensions
 
Drupal8 for Symfony Developers
Drupal8 for Symfony DevelopersDrupal8 for Symfony Developers
Drupal8 for Symfony Developers
 

Recently uploaded

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

Building and deploying PHP applications with Phing

  • 1. Building and deploying PHP applications with Phing Michiel Rook PHP UK Conference 2012
  • 2. About me • Freelance PHP & Java contractor / consultant • PHP since ’99 • Phing project lead • http://www.linkedin.com/in/michieltcs • @michieltcs Building and deploying PHP applications with Phing
  • 3. This Talk • Why use a build tool • What is Phing • Usage • Various examples • Extending Phing Building and deploying PHP applications with Phing
  • 4. Why Use A Build Tool?
  • 5. Why Use A Build Tool Repetition http://www.flickr.com/photos/andrewmalone/5162632817/ Building and deploying PHP applications with Phing
  • 6. Repetition • We are human • We get bored • We forget things • We make mistakes Building and deploying PHP applications with Phing
  • 7. Repetition • Version control • (Unit) Testing • Configuring • Packaging • Uploading • DB changes • ... Building and deploying PHP applications with Phing
  • 8. Repetition • Version control • (Unit) Testing • Configuring • Packaging • Uploading • DB changes • ... • Boring! Building and deploying PHP applications with Phing
  • 9. Why Use A Build Tool Automate! http://www.flickr.com/photos/patrick_h/6209981673/ Building and deploying PHP applications with Phing
  • 10. Automate! • Developers, testers, administrators... • Easier handover to new team members • Improves quality • Reduces errors • Saves time • Consolidate scripts, reduce technical debt Building and deploying PHP applications with Phing
  • 11. What Is Phing http://www.flickr.com/photos/canucksfan604/5471322484/ Building and deploying PHP applications with Phing
  • 12. What Is Phing • PHing Is Not GNU make; it’s a PHP project build system or build tool based on Apache Ant. • Originally developed by Binarycloud • Ported to PHP5 by Hans Lellelid • 2004: my first commit • 2009: lead Building and deploying PHP applications with Phing
  • 13. What Can Phing Do • Scripting using XML build files • Human readable • Mostly cross-platform • Minimal dependencies • Interface to various popular (PHP) tools Building and deploying PHP applications with Phing
  • 14. What Can Phing Do • Scripting using XML build files • Human readable • Mostly cross-platform • Minimal dependencies • Interface to various popular (PHP) tools • ”Good glue” Building and deploying PHP applications with Phing
  • 15. What Can Phing Do Building and deploying PHP applications with Phing
  • 16. Why Use Phing • Ant? • Rich set of tasks • Integration with PHP specific tools • Allows you to stay in the PHP infrastructure • Easy to extend • Embed PHP code directly in the build file Building and deploying PHP applications with Phing
  • 18. Installing Phing • PEAR installation $ pear channel-discover pear.phing.info $ pear install [--alldeps] phing/phing • Optionally, install the documentation package $ pear install phing/phingdocs Building and deploying PHP applications with Phing
  • 19. Build Files • Phing uses XML build files • Contain standard elements • Task: code that performs a specific function (svn checkout, mkdir, etc.) • Target: groups of tasks, can optionally depend on other targets • Project: root node, contains multiple targets Building and deploying PHP applications with Phing
  • 20. Example Build File <project name="Example" default="world"> <target name="hello"> <echo>Hello</echo> </target> <target name="world" depends="hello"> <echo>World!</echo> </target> </project> Buildfile: /home/michiel/phing/simple.xml Example > hello: [echo] Hello Example > world: [echo] World! BUILD FINISHED Building and deploying PHP applications with Phing
  • 21. Properties • Simple key-value files (.ini) ## build.properties version=1.0 • Can be expanded by using ${key} in the build file $ phing -propertyfile build.properties ... <project name="Example" default="default"> <target name="default"> <property file="build.properties" /> <echo>${version}</echo> </target> </project> Building and deploying PHP applications with Phing
  • 22. Filesets • Constructs a group of files to process • Supported by most tasks <fileset dir="./application" includes="**"/> <fileset dir="./application"> <include name="**/*.php" /> <exclude name="**/*Test.php" /> </fileset> • References: define once, use many <fileset dir="./application" includes="**" id="files"/> <fileset refid="files"/> Building and deploying PHP applications with Phing
  • 23. Filesets • Selectors allow fine-grained matching on certain attributes • contains, date, file name & size, ... <fileset dir="${dist}"> <and> <filename name="**"/> <date datetime="01/01/2011" when="before"/> </and> </fileset> Building and deploying PHP applications with Phing
  • 24. Mappers & Filters • Transform files during copy/move/... • Mappers • Change filename • Flatten directories • Filters • Strip comments, white space • Replace values • Perform XSLT transformation • Translation (i18n) Building and deploying PHP applications with Phing
  • 25. Mappers & Filters <copy todir="${build}"> <fileset refid="files"/> <mapper type="glob" from="*.txt" to="*.new.txt"/> <filterchain> <replaceregexp> <regexp pattern="rn" replace="n"/> <expandproperties/> </replaceregexp> </filterchain> </copy> Building and deploying PHP applications with Phing
  • 27. Examples • Version control • Unit testing • Packaging • Deployment • Database migration • Continuous integration Building and deploying PHP applications with Phing
  • 28. Version Control • (CVS), SVN, Git <svncopy username="michiel" password="test" repositoryurl="svn://localhost/phing/trunk/" todir="svn://localhost/phing/tags/1.0"/> <svnexport repositoryurl="svn://localhost/project/trunk/" todir="/home/michiel/dev"/> <svnlastrevision repositoryurl="svn://localhost/project/trunk/" propertyname="lastrev"/> <echo>Last revision: ${lastrev}</echo> Building and deploying PHP applications with Phing
  • 29. PHPUnit • Built-in support for most configuration options • Gathers code coverage information • Various output formats (JUnit / Clover) • Reporting (JUnit style) Building and deploying PHP applications with Phing
  • 30. PHPUnit Example • Stop the build when a test fails <phpunit haltonfailure="true" haltonerror="true" bootstrap="my_bootstrap.php" printsummary="true"> <batchtest> <fileset dir="src"> <include name="**/*Test.php"/> </fileset> </batchtest> </phpunit> Buildfile: /home/michiel/phpunit/build.xml Demo > test: [phpunit] Total tests run: 1, Failures: 1, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.00591 s Execution of target "test" failed for the following reason: /home/michiel/phpunit/build.xml:3:44: Test FAILURE (testSayHello in class HelloWorldTest): Failed asserting that two strings are equal. Building and deploying PHP applications with Phing
  • 31. PHPUnit Example • Determine which files to include in the coverage report <coverage-setup database="reports/coverage.db"> <fileset dir="src"> <include name="**/*.php"/> <exclude name="**/*Test.php"/> </fileset> </coverage-setup> • Gather code coverage and other data during the test run <phpunit codecoverage="true"> <formatter type="xml" todir="reports"/> <batchtest> <fileset dir="src"> <include name="**/*Test.php"/> </fileset> </batchtest> </phpunit> Building and deploying PHP applications with Phing
  • 32. PHPUnit Example • Generate some reports <phpunitreport infile="reports/testsuites.xml" format="frames" todir="reports/tests"/> <coverage-report outfile="reports/coverage.xml"> <report todir="reports/coverage" title="Demo"/> </coverage-report> Building and deploying PHP applications with Phing
  • 33. Documentation • Phing currently integrates with popular documentation tools • DocBlox • PhpDocumentor • ApiGen • Also supports r(e)ST (reStructuredText) <docblox title="Phing API Documentation" output="docs" quiet="true"> <fileset dir="../../classes"> <include name="**/*.php"/> </fileset> </docblox> Building and deploying PHP applications with Phing
  • 34. DocBlox Building and deploying PHP applications with Phing
  • 35. Packaging • Create bundles or packages • Phing supports most popular formats: tar (pear), zip, phar <pearpkg name="demo" dir="."> <fileset refid="files"/> <option name="outputdirectory" value="./build"/> <option name="description">Test package</option> <option name="version" value="0.1.0"/> <option name="state" value="beta"/> <mapping name="maintainers"> <element> <element key="handle" value="test"/> <element key="name" value="Test"/> <element key="email" value="test@test.nl"/> <element key="role" value="lead"/> </element> </mapping> </pearpkg> Building and deploying PHP applications with Phing
  • 36. Packaging - TAR / ZIP <tar compression="gzip" destFile="package.tgz" basedir="build"/> <zip destfile="htmlfiles.zip"> <fileset dir="."> <include name="**/*.html"/> </fileset> </zip> Building and deploying PHP applications with Phing
  • 37. Packaging - PHAR <pharpackage compression="gzip" destfile="test.phar" stub="stub.php" basedir="."> <fileset dir="hello"> <include name="**/**" /> </fileset> <metadata> <element name="version" value="1.0" /> <element name="authors"> <element name="John Doe"> <element name="e-mail" value="john@example.com" /> </element> </element> </metadata> </pharpackage> Building and deploying PHP applications with Phing
  • 38. Putting it all together - deployments
  • 39. Copying to a server • SSH <scp username="john" password="smith" host="webserver" todir="/www/htdocs/project/"> <fileset dir="test"> <include name="*.html"/> </fileset> </scp> • FTP <ftpdeploy host="server01" username="john" password="smit" dir="/var/www"> <fileset dir="."> <include name="*.html"/> </fileset> </ftpdeploy> Building and deploying PHP applications with Phing
  • 40. Symbolic links • All releases stored in ”backup” directory • Symlink application directory to latest release (similar to Capistrano) • Allows for easy (code) rollbacks <svnlastrevision repositoryurl="${deploy.svn}" property="deploy.rev"/> <svnexport repositoryurl="${deploy.svn}" todir="/www/releases/build-${deploy.rev}"/> <symlink target="/www/releases/build-${deploy.rev}" link="/www/current"/> • Also on a remote server <ssh host="webserver" command="ln -s /www/releases/build-${deploy.rev} /www/current"/> Building and deploying PHP applications with Phing
  • 41. Multiple servers / targets • Several deployment targets: testing, staging, production, ... • Keep one property file per target • Select property file based on input <input propertyname="env" validargs="testing,staging,production"> Enter environment name </input> <property file="${env}.properties"/> <ssh host="${deploy.host}" command="..."/> Building and deploying PHP applications with Phing
  • 42. Database Migration • Set of delta SQL files (1-create-post.sql) • Tracks current version of your db in changelog table • Generates do and undo SQL files 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 ) Building and deploying PHP applications with Phing
  • 43. Database Migration • Delta scripts with do (up) & undo (down) parts --// CREATE TABLE ‘post‘ ( ‘title‘ VARCHAR(255), ‘time_created‘ DATETIME, ‘content‘ MEDIUMTEXT ); --//@UNDO DROP TABLE ‘post‘; --// Building and deploying PHP applications with Phing
  • 44. Database Migration <dbdeploy url="sqlite:test.db" dir="deltas" outputfile="deploy.sql" undooutputfile="undo.sql"/> <pdosqlexec src="deploy.sql" url="sqlite:test.db"/> Buildfile: /home/michiel/dbdeploy/build.xml Demo > migrate: [dbdeploy] Getting applied changed numbers from DB: mysql:host=localhost;dbname=demo [dbdeploy] Current db revision: 0 [dbdeploy] Checkall: [pdosqlexec] Executing file: /home/michiel/dbdeploy/deploy.sql [pdosqlexec] 3 of 3 SQL statements executed successfully BUILD FINISHED Building and deploying PHP applications with Phing
  • 45. Database Migration -- Fragment begins: 1 -- INSERT INTO changelog (change_number, delta_set, start_dt, applied_by, description) VALUES (1, ’Main’, NOW(), ’dbdeploy’, ’1-create_initial_schema.sql’); --// CREATE TABLE ‘post‘ ( ‘title‘ VARCHAR(255), ‘time_created‘ DATETIME, ‘content‘ MEDIUMTEXT ); UPDATE changelog SET complete_dt = NOW() WHERE change_number = 1 AND delta_set = ’Main’; -- Fragment ends: 1 -- Building and deploying PHP applications with Phing
  • 46. Database Migration -- Fragment begins: 1 -- DROP TABLE ‘post‘; --// DELETE FROM changelog WHERE change_number = 1 AND delta_set = ’Main’; -- Fragment ends: 1 -- Building and deploying PHP applications with Phing
  • 47. Phing & Jenkins • Continuous integration • Phing plugin • Build periodically or after each commit • Verify and test the build • Deploy results Building and deploying PHP applications with Phing
  • 48. Phing & Jenkins Building and deploying PHP applications with Phing
  • 49. Phing & Jenkins Building and deploying PHP applications with Phing
  • 50. Phing & Jenkins Building and deploying PHP applications with Phing
  • 53. Extending Phing • Numerous extension points • Tasks • Types • Selectors • Filters • Mappers • Loggers • ... Building and deploying PHP applications with Phing
  • 54. Sample Task • Extends from Task • Contains main() method and optionally init() • Setter method for each attribute in the build file class SampleTask extends Task { private $var; public function setVar($v) { $this->var = $v; } public function main() { $this->log("value: " . $this->var); } } Building and deploying PHP applications with Phing
  • 55. Sample Task • Use taskdef to make Phing aware of your new task <project name="Example" default="default"> <taskdef name="sample" classpath="/dev/src" classname="tasks.my.SampleTask" /> <target name="default"> <sample var="Hello World" /> </target> </project> Building and deploying PHP applications with Phing
  • 56. Ad Hoc Extension • Define a task within your build file <target name="main"> <adhoc-task name="foo"><![CDATA[ class FooTest extends Task { private $bar; function setBar($bar) { $this->bar = $bar; } function main() { $this->log("In FooTest: " . $this->bar); } } ]]></adhoc-task> <foo bar="TEST"/> </target> Building and deploying PHP applications with Phing
  • 57. Future Improvements • More tasks & support • Better performance • PHAR package (including popular dependencies) • More documentation • Increased test coverage • IDE support Building and deploying PHP applications with Phing
  • 58. Future Improvements • More tasks & support • Better performance • PHAR package (including popular dependencies) • More documentation • Increased test coverage • IDE support • Pull requests! :-) Building and deploying PHP applications with Phing
  • 59. Helpful Links • http://pear.php.net/ • http://www.docblox-project.org/ • http://www.dbdeploy.com/ • http://www.jenkins-ci.org/ • http://www.phing.info/docs/guide/stable/ • http://github.com/phingofficial/phing Building and deploying PHP applications with Phing
  • 60. Questions? http://joind.in/4954 http://www.phing.info #phing (freenode) @phingofficial Thank you! Building and deploying PHP applications with Phing