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
  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
  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
  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...
  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?
  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 – … …
  7. 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
  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 – Extensão XSL Extensão XSL
  9. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco pear install

    -a pear.phing.info/phing pear install -a pear.phing.info/phing
  10. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project>
  11. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> Tag Root Tag Root Tag Root Tag Root
  12. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> Tag Root Tag Root Tag Root Tag Root
  13. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> Cada passo do build Cada passo do build Cada passo do build Cada passo do build
  14. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> Dependência de passo Dependência de passo Dependência de passo Dependência de passo
  15. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> 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
  16. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> “ “parametro” da tarefa parametro” da tarefa “ “parametro” da tarefa parametro” da tarefa
  17. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco build.xml build.xml

    <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”xpto” name=”xpto” depends depends=”a,b,c”> =”a,b,c”> < <task task atributo=”1”> atributo=”1”> < <type type/> /> </task> </task> </target> </target> </project> </project> 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
  18. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Vamos a

    um exemplo real Vamos a um exemplo real <?xml version=”1.0”?> <?xml version=”1.0”?> < <project project name=” name=”phpms phpms” ” default default=”xpto”> =”xpto”> < <target target name=”hello” name=”hello” depends depends=””> =””> < <echo echo msg=”Hello Phing!”> msg=”Hello Phing!”> </target> </target> </project> </project>
  19. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Essa enrolação

    toda pra fazer um Essa enrolação toda pra fazer um Hello World? Hello World?
  20. 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)
  21. 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
  22. 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
  23. 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
  24. 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
  25. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco RTFM RTFM

    Read Read The The (Mother)F**king (Mother)F**king Manual Manual
  26. 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
  27. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Poderíamos resolver

    dependências facilmente... Poderíamos resolver dependências facilmente...
  28. 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 • ... ...
  29. 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 • ... ...
  30. 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
  31. 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
  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 • ... ... Exemplos a seguir Exemplos a seguir Exemplos a seguir Exemplos a seguir
  33. 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?
  34. 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
  35. 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
  36. 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!
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Para mais

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

    Grosso Obrigado Mato Grosso do Sul do Sul
  45. Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco • [email protected]

    • phpsp.org.br • [twitter | facebook | github]/duodraco • http://duodra.co/contato/ speakerdeck.com/u/duodraco