phing

54
Phpmsconf 2012 - duodraco Phpmsconf 2012 - duodraco Doing Things with PHING Doing Things with PHING phpMS Conf 12 phpMS Conf 12

Upload: anderson-casimiro

Post on 18-May-2015

725 views

Category:

Technology


2 download

DESCRIPTION

PHING - Ferramenta de automação de build feita em, e para, PHP!

TRANSCRIPT

Page 1: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Doing Things with PHINGDoing Things with PHINGphpMS Conf 12phpMS Conf 12

Page 2: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Duodraco...Duodraco...

● Cofundador do PHPSPCofundador do PHPSP● Anfitrião do PHPUBSPAnfitrião do PHPUBSP● TeamLeader na ArizonaTeamLeader na Arizona● Opensourcer por ReligiãoOpensourcer por Religião● PHPer por paixãoPHPer por paixão

Page 3: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

AgendaAgenda

● Ferramentas de BuildFerramentas de Build● O que é o PhingO que é o Phing● WalkthroughWalkthrough● Exemplos de usoExemplos de uso● ConclusãoConclusão

Page 4: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Ferramentas de BuildFerramentas de Build

● MakeMake● AntAnt● IvyIvy● MavenMaven● BakeBake● Symfony consoleSymfony console● Etc...Etc...

Page 5: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Ferramentas de BuildFerramentas de Build

Mas afinal o que são?Mas afinal o que são?

Page 6: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Ferramentas de BuildFerramentas de Build

● Automação de tarefasAutomação de tarefas– CompilaçãoCompilação– EmpacotamentoEmpacotamento– TestesTestes– DeploymentDeployment– DocumentaçãoDocumentação– ……

Page 7: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

PHINGPHING

PHing Is Not Gnumake

Page 8: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

PHINGPHING

● Baseado no Apache AntBaseado no Apache Ant● Instalável via PEARInstalável via PEAR● Buildfiles em XMLBuildfiles em XML● Inúmeras Tarefas disponíveisInúmeras Tarefas disponíveis● Extensível via PHP (inclusive no XML)Extensível via PHP (inclusive no XML)● Cross-platformCross-platform● Não requer ferramentas externasNão requer ferramentas externas

Page 9: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

PHINGPHING

● Baseado no Apache AntBaseado no Apache Ant● Instalável via PEARInstalável via PEAR● Buildfiles em XMLBuildfiles em XML● Inúmeras Tarefas disponíveisInúmeras Tarefas disponíveis● Extensível via PHP (inclusive no XML)Extensível via PHP (inclusive no XML)● Cross-platformCross-platform● Não requer ferramentas externasNão requer ferramentas externas

– Extensão XSLExtensão XSL

Page 10: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Ferramenta de build pra PHP?

Bitch Please...

Page 11: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

pear install -a pear.phing.info/phingpear install -a pear.phing.info/phing

Page 12: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

Page 13: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

Tag RootTag RootTag RootTag Root

Page 14: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

Tag RootTag RootTag RootTag Root

Page 15: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

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

Page 16: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

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

Page 17: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

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

Page 18: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

““parametro” da tarefaparametro” da tarefa““parametro” da tarefaparametro” da tarefa

Page 19: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

build.xmlbuild.xml

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”xpto” name=”xpto” dependsdepends=”a,b,c”>=”a,b,c”> < <tasktask atributo=”1”> atributo=”1”> < <typetype/>/> </task> </task> </target> </target></project></project>

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

Page 20: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Vamos a um exemplo realVamos a um exemplo real

<?xml version=”1.0”?><?xml version=”1.0”?><<projectproject name=” name=”phpmsphpms” ” defaultdefault=”xpto”>=”xpto”> < <targettarget name=”hello” name=”hello” dependsdepends=””>=””> < <echoecho msg=”Hello Phing!”> msg=”Hello Phing!”> </target> </target></project></project>

Page 21: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Essa enrolação toda pra fazer um Essa enrolação toda pra fazer um Hello World?Hello World?

Page 22: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Vamos começar um projeto...Vamos começar um projeto...

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

● Criar um bootstrapCriar um bootstrap– Já deixar um autoloader prontoJá deixar um autoloader pronto

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

Page 23: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Show me the codeShow me the code

Page 24: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

O que vimos de novo?O que vimos de novo?

● BasedirBasedir● VariáveisVariáveis● Novas TasksNovas Tasks

– MkdirMkdir– DeleteDelete– PropertyProperty

● Depends em TargetsDepends em Targets● Target pode estar vazioTarget pode estar vazio

Page 25: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Core TasksCore Tasks

● Append, LoadfileAppend, Loadfile● Available, TouchAvailable, Touch● Chmod, ChownChmod, Chown● Copy, Move, DeleteCopy, Move, Delete● EchoEcho● Exec, PhpExec, Php● InputInput● TstampTstamp

● Phing, PhingcallPhing, Phingcall● PropertyProperty● PropertypromptPropertyprompt● ImportImport● Typedef, TaskdefTypedef, Taskdef● Adhoc...Adhoc...

– TypedefTypedef– TaskdefTaskdef

Page 26: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Core TasksCore Tasks

● Append, LoadfileAppend, Loadfile● Available, TouchAvailable, Touch● Chmod, ChownChmod, Chown● Copy, Move, DeleteCopy, Move, Delete● EchoEcho● Exec, PhpExec, Php● InputInput● TstampTstamp

● Phing, PhingcallPhing, Phingcall● PropertyProperty● PropertypromptPropertyprompt● ImportImport● Typedef, TaskdefTypedef, Taskdef● Adhoc...Adhoc...

– TypedefTypedef– TaskdefTaskdef

Page 27: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Core TasksCore Tasks

● Append, LoadfileAppend, Loadfile● Available, TouchAvailable, Touch● Chmod, ChownChmod, Chown● Copy, Move, DeleteCopy, Move, Delete● EchoEcho● ExecExec, , PhpPhp● InputInput● TstampTstamp

● Phing, Phing, PhingcallPhingcall● PropertyProperty● PropertypromptPropertyprompt● ImportImport● Typedef, TaskdefTypedef, Taskdef● AdhocAdhoc......

– TypedefTypedef– TaskdefTaskdef

Page 28: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

RTFMRTFM

Read Read The The

(Mother)F**king (Mother)F**king ManualManual

Page 29: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Core Tasks - LógicaCore Tasks - Lógica

● IfIf● ConditionCondition● ForeachForeach

– Listas...Listas...

● TrycatchTrycatch– Ok, não é logica...Ok, não é logica...

– NotNot– AndAnd– OrOr– EqualsEquals– OsOs– IssetIsset– ContainsContains– IstrueIstrue– IsfalseIsfalse

Page 30: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Poderíamos resolver dependências facilmente...Poderíamos resolver dependências facilmente...

Page 31: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Tasks OpcionaisTasks Opcionais

● Docblox, PHPDocDocblox, PHPDoc● DBDeploy, DBDeploy,

Liquidbase e Liquidbase e PDOExecPDOExec

● FTP, S3, Scp e Ssh FTP, S3, Scp e Ssh ● SVN, Hg e GitSVN, Hg e Git● HTTPRequestHTTPRequest● VersionVersion

● Ioncube, ZendGuardIoncube, ZendGuard● Pear, Pear2, Phk, Phar, Pear, Pear2, Phk, Phar,

Zip, TarZip, Tar● PHPUnit. SimpleTest, PHPUnit. SimpleTest,

CodeSniffer, MD, CodeSniffer, MD, CPD, LintCPD, Lint

● SymfonyConsoleSymfonyConsole● ......

Page 32: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Tasks OpcionaisTasks Opcionais

● Docblox, Docblox, PHPDocPHPDoc● DBDeploy, DBDeploy,

Liquidbase e Liquidbase e PDOExecPDOExec

● FTP, S3, Scp e Ssh FTP, S3, Scp e Ssh ● SVN, Hg e SVN, Hg e GitGit● HTTPRequestHTTPRequest● VersionVersion

● Ioncube, ZendGuardIoncube, ZendGuard● Pear, Pear2, Phk, Phar, Pear, Pear2, Phk, Phar,

Zip, TarZip, Tar● PHPUnit. SimpleTest, PHPUnit. SimpleTest,

CodeSniffer, MD, CodeSniffer, MD, CPD, LintCPD, Lint

● SymfonyConsoleSymfonyConsole● ......

Page 33: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Tasks OpcionaisTasks Opcionais

● Docblox, Docblox, PHPDocPHPDoc● DBDeploy, DBDeploy,

Liquidbase e Liquidbase e PDOExecPDOExec

● FTP, S3, Scp e Ssh FTP, S3, Scp e Ssh ● SVN, Hg e SVN, Hg e GitGit● HTTPRequestHTTPRequest● VersionVersion

● Ioncube, ZendGuardIoncube, ZendGuard● Pear, Pear2, Phk, Phar, Pear, Pear2, Phk, Phar,

Zip, TarZip, Tar● PHPUnit. SimpleTest, PHPUnit. SimpleTest,

CodeSniffer, MD, CodeSniffer, MD, CPD, LintCPD, Lint

● SymfonyConsoleSymfonyConsole● ......

Inclusive PHPDoc2Inclusive PHPDoc2Inclusive PHPDoc2Inclusive PHPDoc2

Page 34: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Tasks OpcionaisTasks Opcionais

● Docblox, Docblox, PHPDocPHPDoc● DBDeploy, DBDeploy,

Liquidbase e Liquidbase e PDOExecPDOExec

● FTP, S3, Scp e Ssh FTP, S3, Scp e Ssh ● SVN, Hg e SVN, Hg e GitGit● HTTPRequestHTTPRequest● VersionVersion

● Ioncube, ZendGuardIoncube, ZendGuard● Pear, Pear2, Phk, Phar, Pear, Pear2, Phk, Phar,

Zip, TarZip, Tar● PHPUnit. SimpleTest, PHPUnit. SimpleTest,

CodeSniffer, MD, CodeSniffer, MD, CPD, LintCPD, Lint

● SymfonyConsoleSymfonyConsole● ......

Controle suas versõesControle suas versõesControle suas versõesControle suas versões

Page 35: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Tasks OpcionaisTasks Opcionais

● Docblox, Docblox, PHPDocPHPDoc● DBDeploy, DBDeploy,

Liquidbase e Liquidbase e PDOExecPDOExec

● FTP, S3, Scp e Ssh FTP, S3, Scp e Ssh ● SVN, Hg e SVN, Hg e GitGit● HTTPRequestHTTPRequest● VersionVersion

● Ioncube, ZendGuardIoncube, ZendGuard● Pear, Pear2, Phk, Phar, Pear, Pear2, Phk, Phar,

Zip, TarZip, Tar● PHPUnit. SimpleTest, PHPUnit. SimpleTest,

CodeSniffer, MD, CodeSniffer, MD, CPD, LintCPD, Lint

● SymfonyConsoleSymfonyConsole● ......

Exemplos a seguirExemplos a seguirExemplos a seguirExemplos a seguir

Page 36: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

E se quiséssemos colocar o E se quiséssemos colocar o RespectRespect no nosso no nosso projeto?projeto?

Page 37: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

PORQUE DIABOS NO MUNDO

VOCÊ NÃO USOU O COMPOSER?

Page 38: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Integração ContínuaIntegração Contínua

Page 39: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

O que usamos dessa vez...O que usamos dessa vez...

● Tasks core e opcionaisTasks core e opcionais● Build.propertiesBuild.properties● FilesetsFilesets

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

Page 40: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

CasosCasos

Page 41: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 1Problema 1

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

● Software com Software com dependências dependências insolúveis por ele insolúveis por ele mesmomesmo

● Deploys demoradosDeploys demorados

Page 42: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 1Problema 1

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

● Software com Software com dependências dependências insolúveis por ele insolúveis por ele mesmomesmo

● Deploys demoradosDeploys demorados

● Checagem de Checagem de dependênciasdependências

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

● Migração de BDMigração de BD● Deploy!Deploy!

Page 43: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 2Problema 2

● Equipe inexperienteEquipe inexperiente– demora para iniciar demora para iniciar

projetos novosprojetos novos– Projetos sem testesProjetos sem testes– Commits/Pushes sem Commits/Pushes sem

verificação ou testesverificação ou testes

Page 44: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 2Problema 2

● Equipe inexperienteEquipe inexperiente– demora para iniciar demora para iniciar

projetos novosprojetos novos– Projetos sem testesProjetos sem testes– Commits/Pushes sem Commits/Pushes sem

verificação ou testesverificação ou testes

● Criação automatizada Criação automatizada de estruturade estrutura

● Criação automatizada Criação automatizada de esqueleto de de esqueleto de testestestes

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

Page 45: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 3Problema 3

● Deploys multi-stepDeploys multi-step– Staging, ProduçãoStaging, Produção

● Muitos passos para Muitos passos para deploydeploy

● Deploys em Deploys em diferentes ambientesdiferentes ambientes– FTP, Git, AmazonFTP, Git, Amazon

Page 46: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 3Problema 3

● Deploys multi-stepDeploys multi-step– Staging, ProduçãoStaging, Produção

● Muitos passos para Muitos passos para deploydeploy

● Deploys em Deploys em diferentes ambientesdiferentes ambientes– FTP, Git, AmazonFTP, Git, Amazon

● Verificação de regrasVerificação de regras● Automatização de Automatização de

passospassos● Envio direto para cada Envio direto para cada

um dos ambientesum dos ambientes

Page 47: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Problema 3Problema 3

● Deploys multi-stepDeploys multi-step– Staging, ProduçãoStaging, Produção

● Muitos passos para Muitos passos para deploydeploy

● Deploys em Deploys em diferentes ambientesdiferentes ambientes– FTP, Git, AmazonFTP, Git, Amazon

● Verificação de regrasVerificação de regras● Automatização de Automatização de

passospassos● Envio direto para cada Envio direto para cada

um dos ambientesum dos ambientes

Page 48: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

DicasDicas

● Crie arquivos externos de propriedadesCrie arquivos externos de propriedades– Build.propertiesBuild.properties

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

● Organize bem seu build.xmlOrganize bem seu build.xml– Opcionalmente quebre-o em mais de um arquivo Opcionalmente quebre-o em mais de um arquivo

por domínio de usopor domínio de uso

● Use e abuse do sistema de interdependência de Use e abuse do sistema de interdependência de targetstargets

Page 49: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

ConclusãoConclusão

Page 50: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Para mais informações:Para mais informações:http://phing.infohttp://phing.info

Page 51: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Questions ???Questions ???

Page 52: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Obrigado Mato GrossoObrigado Mato Grosso

Page 53: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

Obrigado Mato GrossoObrigado Mato Grosso do Suldo Sul

Page 54: Phing

Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco

[email protected]● phpsp.org.br● [twitter | facebook | github]/duodraco● http://duodra.co/contato/

speakerdeck.com/u/duodraco