Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Doing Things with PHING

Doing Things with PHING

Apresentação da ferramenta de automação de desenvolvimento feita em e para PHP - Phing

Anderson Casimiro

August 18, 2012
Tweet

More Decks by Anderson Casimiro

Other Decks in Technology

Transcript

  1. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Doing Things with PHING
    Doing Things with PHING
    phpMS Conf 12
    phpMS Conf 12

    View full-size slide

  2. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Duodraco...
    Duodraco...

    Cofundador do PHPSP
    Cofundador do PHPSP

    Anfitrião do PHPUBSP
    Anfitrião do PHPUBSP

    TeamLeader na Arizona
    TeamLeader na Arizona

    Opensourcer por Religião
    Opensourcer por Religião

    PHPer por paixão
    PHPer por paixão

    View full-size slide

  3. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Agenda
    Agenda

    Ferramentas de Build
    Ferramentas de Build

    O que é o Phing
    O que é o Phing

    Walkthrough
    Walkthrough

    Exemplos de uso
    Exemplos de uso

    Conclusão
    Conclusão

    View full-size slide

  4. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Ferramentas de Build
    Ferramentas de Build

    Make
    Make

    Ant
    Ant

    Ivy
    Ivy

    Maven
    Maven

    Bake
    Bake

    Symfony console
    Symfony console

    Etc...
    Etc...

    View full-size slide

  5. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Ferramentas de Build
    Ferramentas de Build
    Mas afinal o que são?
    Mas afinal o que são?

    View full-size slide

  6. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Ferramentas de Build
    Ferramentas de Build

    Automação de tarefas
    Automação de tarefas
    – Compilação
    Compilação
    – Empacotamento
    Empacotamento
    – Testes
    Testes
    – Deployment
    Deployment
    – Documentação
    Documentação
    – …

    View full-size slide

  7. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    PHING
    PHING
    PHing Is Not Gnumake

    View full-size slide

  8. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    PHING
    PHING

    Baseado no Apache Ant
    Baseado no Apache Ant

    Instalável via PEAR
    Instalável via PEAR

    Buildfiles em XML
    Buildfiles em XML

    Inúmeras Tarefas disponíveis
    Inúmeras Tarefas disponíveis

    Extensível via PHP (inclusive no XML)
    Extensível via PHP (inclusive no XML)

    Cross-platform
    Cross-platform

    Não requer ferramentas externas
    Não requer ferramentas externas

    View full-size slide

  9. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    PHING
    PHING

    Baseado no Apache Ant
    Baseado no Apache Ant

    Instalável via PEAR
    Instalável via PEAR

    Buildfiles em XML
    Buildfiles em XML

    Inúmeras Tarefas disponíveis
    Inúmeras Tarefas disponíveis

    Extensível via PHP (inclusive no XML)
    Extensível via PHP (inclusive no XML)

    Cross-platform
    Cross-platform

    Não requer ferramentas externas
    Não requer ferramentas externas
    – Extensão XSL
    Extensão XSL

    View full-size slide

  10. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Ferramenta de build pra PHP?
    Bitch Please...

    View full-size slide

  11. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    pear install -a pear.phing.info/phing
    pear install -a pear.phing.info/phing

    View full-size slide

  12. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    View full-size slide

  13. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    Tag Root
    Tag Root
    Tag Root
    Tag Root

    View full-size slide

  14. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    Tag Root
    Tag Root
    Tag Root
    Tag Root

    View full-size slide

  15. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    Cada passo do build
    Cada passo do build
    Cada passo do build
    Cada passo do build

    View full-size slide

  16. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    Dependência de passo
    Dependência de passo
    Dependência de passo
    Dependência de passo

    View full-size slide

  17. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    Cada tarefa a ser executada em um passo
    Cada tarefa a ser executada em um passo
    Cada tarefa a ser executada em um passo
    Cada tarefa a ser executada em um passo

    View full-size slide

  18. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />







    “parametro” da tarefa
    parametro” da tarefa

    “parametro” da tarefa
    parametro” da tarefa

    View full-size slide

  19. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    build.xml
    build.xml


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”xpto”
    name=”xpto” depends
    depends=”a,b,c”>
    =”a,b,c”>
    <
    task atributo=”1”>
    atributo=”1”>
    <
    type/>
    />






    Não esqueça do passo padrão
    Não esqueça do passo padrão
    Não esqueça do passo padrão
    Não esqueça do passo padrão

    View full-size slide

  20. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Vamos a um exemplo real
    Vamos a um exemplo real


    <
    project name=”
    name=”phpms
    phpms”
    ” default
    default=”xpto”>
    =”xpto”>
    <
    target name=”hello”
    name=”hello” depends
    depends=””>
    =””>
    <
    echo msg=”Hello Phing!”>
    msg=”Hello Phing!”>




    View full-size slide

  21. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Essa enrolação toda pra fazer um
    Essa enrolação toda pra fazer um
    Hello World?
    Hello World?

    View full-size slide

  22. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Vamos começar um projeto...
    Vamos começar um projeto...

    Criar “esqueleto” de diretórios
    Criar “esqueleto” de diretórios
    – application, tests, vendor, web
    application, tests, vendor, web

    Criar um bootstrap
    Criar um bootstrap
    – Já deixar um autoloader pronto
    Já deixar um autoloader pronto

    Criar um front-controller (index.php)
    Criar um front-controller (index.php)

    View full-size slide

  23. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Show me the code
    Show me the code

    View full-size slide

  24. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    O que vimos de novo?
    O que vimos de novo?

    Basedir
    Basedir

    Variáveis
    Variáveis

    Novas Tasks
    Novas Tasks
    – Mkdir
    Mkdir
    – Delete
    Delete
    – Property
    Property

    Depends em Targets
    Depends em Targets

    Target pode estar vazio
    Target pode estar vazio

    View full-size slide

  25. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Core Tasks
    Core Tasks

    Append, Loadfile
    Append, Loadfile

    Available, Touch
    Available, Touch

    Chmod, Chown
    Chmod, Chown

    Copy, Move, Delete
    Copy, Move, Delete

    Echo
    Echo

    Exec, Php
    Exec, Php

    Input
    Input

    Tstamp
    Tstamp

    Phing, Phingcall
    Phing, Phingcall

    Property
    Property

    Propertyprompt
    Propertyprompt

    Import
    Import

    Typedef, Taskdef
    Typedef, Taskdef

    Adhoc...
    Adhoc...
    – Typedef
    Typedef
    – Taskdef
    Taskdef

    View full-size slide

  26. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Core Tasks
    Core Tasks

    Append, Loadfile
    Append, Loadfile

    Available, Touch
    Available, Touch

    Chmod, Chown
    Chmod, Chown

    Copy, Move, Delete
    Copy, Move, Delete

    Echo
    Echo

    Exec, Php
    Exec, Php

    Input
    Input

    Tstamp
    Tstamp

    Phing, Phingcall
    Phing, Phingcall

    Property
    Property

    Propertyprompt
    Propertyprompt

    Import
    Import

    Typedef, Taskdef
    Typedef, Taskdef

    Adhoc...
    Adhoc...
    – Typedef
    Typedef
    – Taskdef
    Taskdef

    View full-size slide

  27. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Core Tasks
    Core Tasks

    Append, Loadfile
    Append, Loadfile

    Available, Touch
    Available, Touch

    Chmod, Chown
    Chmod, Chown

    Copy, Move, Delete
    Copy, Move, Delete

    Echo
    Echo

    Exec
    Exec,
    , Php
    Php

    Input
    Input

    Tstamp
    Tstamp

    Phing,
    Phing, Phingcall
    Phingcall

    Property
    Property

    Propertyprompt
    Propertyprompt

    Import
    Import

    Typedef, Taskdef
    Typedef, Taskdef

    Adhoc
    Adhoc...
    ...
    – Typedef
    Typedef
    – Taskdef
    Taskdef

    View full-size slide

  28. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    RTFM
    RTFM
    Read
    Read
    The
    The
    (Mother)F**king
    (Mother)F**king
    Manual
    Manual

    View full-size slide

  29. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Core Tasks - Lógica
    Core Tasks - Lógica

    If
    If

    Condition
    Condition

    Foreach
    Foreach
    – Listas...
    Listas...

    Trycatch
    Trycatch
    – Ok, não é logica...
    Ok, não é logica...
    – Not
    Not
    – And
    And
    – Or
    Or
    – Equals
    Equals
    – Os
    Os
    – Isset
    Isset
    – Contains
    Contains
    – Istrue
    Istrue
    – Isfalse
    Isfalse

    View full-size slide

  30. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Poderíamos resolver dependências facilmente...
    Poderíamos resolver dependências facilmente...

    View full-size slide

  31. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Tasks Opcionais
    Tasks Opcionais

    Docblox, PHPDoc
    Docblox, PHPDoc

    DBDeploy,
    DBDeploy,
    Liquidbase e
    Liquidbase e
    PDOExec
    PDOExec

    FTP, S3, Scp e Ssh
    FTP, S3, Scp e Ssh

    SVN, Hg e Git
    SVN, Hg e Git

    HTTPRequest
    HTTPRequest

    Version
    Version

    Ioncube, ZendGuard
    Ioncube, ZendGuard

    Pear, Pear2, Phk, Phar,
    Pear, Pear2, Phk, Phar,
    Zip, Tar
    Zip, Tar

    PHPUnit. SimpleTest,
    PHPUnit. SimpleTest,
    CodeSniffer, MD,
    CodeSniffer, MD,
    CPD, Lint
    CPD, Lint

    SymfonyConsole
    SymfonyConsole

    ...
    ...

    View full-size slide

  32. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Tasks Opcionais
    Tasks Opcionais

    Docblox,
    Docblox, PHPDoc
    PHPDoc

    DBDeploy,
    DBDeploy,
    Liquidbase e
    Liquidbase e
    PDOExec
    PDOExec

    FTP, S3, Scp e Ssh
    FTP, S3, Scp e Ssh

    SVN, Hg e
    SVN, Hg e Git
    Git

    HTTPRequest
    HTTPRequest

    Version
    Version

    Ioncube, ZendGuard
    Ioncube, ZendGuard

    Pear, Pear2, Phk, Phar,
    Pear, Pear2, Phk, Phar,
    Zip, Tar
    Zip, Tar

    PHPUnit. SimpleTest,
    PHPUnit. SimpleTest,
    CodeSniffer, MD,
    CodeSniffer, MD,
    CPD, Lint
    CPD, Lint

    SymfonyConsole
    SymfonyConsole

    ...
    ...

    View full-size slide

  33. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Tasks Opcionais
    Tasks Opcionais

    Docblox,
    Docblox, PHPDoc
    PHPDoc

    DBDeploy,
    DBDeploy,
    Liquidbase e
    Liquidbase e
    PDOExec
    PDOExec

    FTP, S3, Scp e Ssh
    FTP, S3, Scp e Ssh

    SVN, Hg e
    SVN, Hg e Git
    Git

    HTTPRequest
    HTTPRequest

    Version
    Version

    Ioncube, ZendGuard
    Ioncube, ZendGuard

    Pear, Pear2, Phk, Phar,
    Pear, Pear2, Phk, Phar,
    Zip, Tar
    Zip, Tar

    PHPUnit. SimpleTest,
    PHPUnit. SimpleTest,
    CodeSniffer, MD,
    CodeSniffer, MD,
    CPD, Lint
    CPD, Lint

    SymfonyConsole
    SymfonyConsole

    ...
    ...
    Inclusive PHPDoc2
    Inclusive PHPDoc2
    Inclusive PHPDoc2
    Inclusive PHPDoc2

    View full-size slide

  34. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Tasks Opcionais
    Tasks Opcionais

    Docblox,
    Docblox, PHPDoc
    PHPDoc

    DBDeploy,
    DBDeploy,
    Liquidbase e
    Liquidbase e
    PDOExec
    PDOExec

    FTP, S3, Scp e Ssh
    FTP, S3, Scp e Ssh

    SVN, Hg e
    SVN, Hg e Git
    Git

    HTTPRequest
    HTTPRequest

    Version
    Version

    Ioncube, ZendGuard
    Ioncube, ZendGuard

    Pear, Pear2, Phk, Phar,
    Pear, Pear2, Phk, Phar,
    Zip, Tar
    Zip, Tar

    PHPUnit. SimpleTest,
    PHPUnit. SimpleTest,
    CodeSniffer, MD,
    CodeSniffer, MD,
    CPD, Lint
    CPD, Lint

    SymfonyConsole
    SymfonyConsole

    ...
    ...
    Controle suas versões
    Controle suas versões
    Controle suas versões
    Controle suas versões

    View full-size slide

  35. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Tasks Opcionais
    Tasks Opcionais

    Docblox,
    Docblox, PHPDoc
    PHPDoc

    DBDeploy,
    DBDeploy,
    Liquidbase e
    Liquidbase e
    PDOExec
    PDOExec

    FTP, S3, Scp e Ssh
    FTP, S3, Scp e Ssh

    SVN, Hg e
    SVN, Hg e Git
    Git

    HTTPRequest
    HTTPRequest

    Version
    Version

    Ioncube, ZendGuard
    Ioncube, ZendGuard

    Pear, Pear2, Phk, Phar,
    Pear, Pear2, Phk, Phar,
    Zip, Tar
    Zip, Tar

    PHPUnit. SimpleTest,
    PHPUnit. SimpleTest,
    CodeSniffer, MD,
    CodeSniffer, MD,
    CPD, Lint
    CPD, Lint

    SymfonyConsole
    SymfonyConsole

    ...
    ...
    Exemplos a seguir
    Exemplos a seguir
    Exemplos a seguir
    Exemplos a seguir

    View full-size slide

  36. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    E se quiséssemos colocar o
    E se quiséssemos colocar o Respect
    Respect no nosso
    no nosso
    projeto?
    projeto?

    View full-size slide

  37. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    PORQUE DIABOS NO MUNDO
    VOCÊ NÃO USOU O COMPOSER?

    View full-size slide

  38. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Integração Contínua
    Integração Contínua

    View full-size slide

  39. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    O que usamos dessa vez...
    O que usamos dessa vez...

    Tasks core e opcionais
    Tasks core e opcionais

    Build.properties
    Build.properties

    Filesets
    Filesets
    – Dominar filesets fará toda a diferença
    Dominar filesets fará toda a diferença

    View full-size slide

  40. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Casos
    Casos

    View full-size slide

  41. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 1
    Problema 1

    Equipes diferentes de
    Equipes diferentes de
    desenvolvimento,
    desenvolvimento,
    deploy e infra
    deploy e infra

    Software com
    Software com
    dependências
    dependências
    insolúveis por ele
    insolúveis por ele
    mesmo
    mesmo

    Deploys demorados
    Deploys demorados

    View full-size slide

  42. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 1
    Problema 1

    Equipes diferentes de
    Equipes diferentes de
    desenvolvimento,
    desenvolvimento,
    deploy e infra
    deploy e infra

    Software com
    Software com
    dependências
    dependências
    insolúveis por ele
    insolúveis por ele
    mesmo
    mesmo

    Deploys demorados
    Deploys demorados

    Checagem de
    Checagem de
    dependências
    dependências

    Solução de
    Solução de
    dependências
    dependências

    Migração de BD
    Migração de BD

    Deploy!
    Deploy!

    View full-size slide

  43. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 2
    Problema 2

    Equipe inexperiente
    Equipe inexperiente
    – demora para iniciar
    demora para iniciar
    projetos novos
    projetos novos
    – Projetos sem testes
    Projetos sem testes
    – Commits/Pushes sem
    Commits/Pushes sem
    verificação ou testes
    verificação ou testes

    View full-size slide

  44. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 2
    Problema 2

    Equipe inexperiente
    Equipe inexperiente
    – demora para iniciar
    demora para iniciar
    projetos novos
    projetos novos
    – Projetos sem testes
    Projetos sem testes
    – Commits/Pushes sem
    Commits/Pushes sem
    verificação ou testes
    verificação ou testes

    Criação automatizada
    Criação automatizada
    de estrutura
    de estrutura

    Criação automatizada
    Criação automatizada
    de esqueleto de
    de esqueleto de
    testes
    testes

    Checagem do projeto
    Checagem do projeto
    via hook de commit
    via hook de commit

    View full-size slide

  45. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 3
    Problema 3

    Deploys multi-step
    Deploys multi-step
    – Staging, Produção
    Staging, Produção

    Muitos passos para
    Muitos passos para
    deploy
    deploy

    Deploys em
    Deploys em
    diferentes ambientes
    diferentes ambientes
    – FTP, Git, Amazon
    FTP, Git, Amazon

    View full-size slide

  46. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 3
    Problema 3

    Deploys multi-step
    Deploys multi-step
    – Staging, Produção
    Staging, Produção

    Muitos passos para
    Muitos passos para
    deploy
    deploy

    Deploys em
    Deploys em
    diferentes ambientes
    diferentes ambientes
    – FTP, Git, Amazon
    FTP, Git, Amazon

    Verificação de regras
    Verificação de regras

    Automatização de
    Automatização de
    passos
    passos

    Envio direto para cada
    Envio direto para cada
    um dos ambientes
    um dos ambientes

    View full-size slide

  47. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Problema 3
    Problema 3

    Deploys multi-step
    Deploys multi-step
    – Staging, Produção
    Staging, Produção

    Muitos passos para
    Muitos passos para
    deploy
    deploy

    Deploys em
    Deploys em
    diferentes ambientes
    diferentes ambientes
    – FTP, Git, Amazon
    FTP, Git, Amazon

    Verificação de regras
    Verificação de regras

    Automatização de
    Automatização de
    passos
    passos

    Envio direto para cada
    Envio direto para cada
    um dos ambientes
    um dos ambientes

    View full-size slide

  48. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Dicas
    Dicas

    Crie arquivos externos de propriedades
    Crie arquivos externos de propriedades
    – Build.properties
    Build.properties

    Crie filesets apontando para sua library, suite de
    Crie filesets apontando para sua library, suite de
    testes e/ou bibliotecas externas
    testes e/ou bibliotecas externas

    Organize bem seu build.xml
    Organize bem seu build.xml
    – Opcionalmente quebre-o em mais de um arquivo
    Opcionalmente quebre-o em mais de um arquivo
    por domínio de uso
    por domínio de uso

    Use e abuse do sistema de interdependência de
    Use e abuse do sistema de interdependência de
    targets
    targets

    View full-size slide

  49. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Conclusão
    Conclusão

    View full-size slide

  50. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Para mais informações:
    Para mais informações:
    http://phing.info
    http://phing.info

    View full-size slide

  51. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Questions ???
    Questions ???

    View full-size slide

  52. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Obrigado Mato Grosso
    Obrigado Mato Grosso

    View full-size slide

  53. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco
    Obrigado Mato Grosso
    Obrigado Mato Grosso do Sul
    do Sul

    View full-size slide

  54. Phpmsconf 2012 - duodraco
    Phpmsconf 2012 - duodraco

    [email protected]

    phpsp.org.br

    [twitter | facebook | github]/duodraco

    http://duodra.co/contato/
    speakerdeck.com/u/duodraco

    View full-size slide