Share
Embed
Doing Things with PHING
Apresentação da ferramenta de automação de desenvolvimento feita em e para PHP - Phing
Anderson Casimiro
August 18, 2012
Transcript
54 slides
-
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Doing Things
with PHING Doing Things with PHING phpMS Conf 12 phpMS Conf 12 -
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 -
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 -
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... -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Ferramentas de
Build Ferramentas de Build Mas afinal o que são? Mas afinal o que são? -
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 – … … -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco PHING PHING
PHing Is Not Gnumake -
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 -
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 -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Ferramenta de
build pra PHP? Bitch Please... -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco pear install
-a pear.phing.info/phing pear install -a pear.phing.info/phing -
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> -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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> -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Essa enrolação
toda pra fazer um Essa enrolação toda pra fazer um Hello World? Hello World? -
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) -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Show me
the code Show me the code -
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 -
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 -
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 -
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 -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco RTFM RTFM
Read Read The The (Mother)F**king (Mother)F**king Manual Manual -
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 -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Poderíamos resolver
dependências facilmente... Poderíamos resolver dependências facilmente... -
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 • ... ... -
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 • ... ... -
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 -
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 -
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 -
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? -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco PORQUE DIABOS
NO MUNDO VOCÊ NÃO USOU O COMPOSER? -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Integração Contínua
Integração Contínua -
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 -
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 -
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! -
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 -
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 -
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 -
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 -
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 -
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 -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Para mais
informações: Para mais informações: http://phing.info http://phing.info -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Obrigado Mato
Grosso Obrigado Mato Grosso -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Obrigado Mato
Grosso Obrigado Mato Grosso do Sul do Sul -
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco • [email protected]
• phpsp.org.br • [twitter | facebook | github]/duodraco • http://duodra.co/contato/ speakerdeck.com/u/duodraco