Upload
anderson-casimiro
View
725
Download
2
Tags:
Embed Size (px)
DESCRIPTION
PHING - Ferramenta de automação de build feita em, e para, PHP!
Citation preview
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Doing Things with PHINGDoing Things with PHINGphpMS Conf 12phpMS Conf 12
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
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Ferramentas de BuildFerramentas de Build
● MakeMake● AntAnt● IvyIvy● MavenMaven● BakeBake● Symfony consoleSymfony console● Etc...Etc...
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Ferramentas de BuildFerramentas de Build
Mas afinal o que são?Mas afinal o que são?
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– ……
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
PHINGPHING
PHing Is Not Gnumake
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
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Ferramenta de build pra PHP?
Bitch Please...
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
pear install -a pear.phing.info/phingpear install -a pear.phing.info/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>
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
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
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
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
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
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
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
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>
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Essa enrolação toda pra fazer um Essa enrolação toda pra fazer um Hello World?Hello World?
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)
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Show me the codeShow me the code
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
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
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
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
RTFMRTFM
Read Read The The
(Mother)F**king (Mother)F**king ManualManual
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Poderíamos resolver dependências facilmente...Poderíamos resolver dependências facilmente...
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● ......
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● ......
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
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
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
E se quiséssemos colocar o E se quiséssemos colocar o RespectRespect no nosso no nosso projeto?projeto?
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
PORQUE DIABOS NO MUNDO
VOCÊ NÃO USOU O COMPOSER?
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Integração ContínuaIntegração Contínua
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
CasosCasos
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
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!
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
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
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
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
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
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
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
ConclusãoConclusão
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Para mais informações:Para mais informações:http://phing.infohttp://phing.info
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Questions ???Questions ???
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Obrigado Mato GrossoObrigado Mato Grosso
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
Obrigado Mato GrossoObrigado Mato Grosso do Suldo Sul
Phpmsconf 2012 - duodracoPhpmsconf 2012 - duodraco
● [email protected]● phpsp.org.br● [twitter | facebook | github]/duodraco● http://duodra.co/contato/
speakerdeck.com/u/duodraco