Integracao Contínua com CruiseControl e phpUnderControl

2,744 views
2,636 views

Published on

Palestra ministrada no evento CONAPHP/Conisli 2008

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,744
On SlideShare
0
From Embeds
0
Number of Embeds
98
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Integracao Contínua com CruiseControl e phpUnderControl

  1. 1. CONAPHP
  2. 2.  Diego Tremper  Zend Certified Engineer  Entusiasta PHP  Palestrante  Estudante
  3. 3.  Integração Contínua  Cenário  Vantagens  CruiseControl  Instalação  Arquitetura  phpUnderControl  Instalação  Funcionamento  Ambiente ▪ Estatísticas ▪ Execução de Testes ▪ Documentação ▪ Violação de Padrões ▪ Code Coverage ▪ Métricas  Prática
  4. 4. “Integração Contínua é uma prática de desenvolvimento de software em que membros de um time integram seu trabalho frequentemente, normalmente cada membro faz integrações diariamente, conduzindo a multiplas integrações diárias. Cada integração é verificada por um build automático (incluindo testes) para detectar erros o mais rápido possível.” Martin Fowler
  5. 5. Cotidiano de um time de desenvolvimento: Dev A Dev C Repositório (CVS, SVN, etc) Dev B Dev D
  6. 6.  Como detectar problemas de integração de maneira mais rápida?  Como descobrir se a alteração na tela X não causou problemas na telaY?  Quanto maior o projeto…  Maior a complexidade…  Maior o reaproveitamento…  Maior a probabilidade de ocorrerem problemas na integração!
  7. 7. Script Servidor de Repositório Integração Contínua (CVS, SVN, etc) Feedback Dev B Dev C Dev D
  8. 8.  Desenvolvedor publica suas modificações em qualquer sistema de controle de versão (SVN, CVS, etc)  A partir de uma definição, o CruiseControl periodicamente procura por modificações no código (config.xml)  Dispara um novo build (build.xml)  Captura e armazena os logs e artefatos gerados a partir do build  Publica o resultado do build e os artefatos gerados (web, email, etc)
  9. 9.  Acelera a detecção de bugs  Reduz os riscos  Reduz o tempo de integração  Aumenta a confiança do time  Agiliza o feedback  Facilita o refactoring
  10. 10. O CruiseControl é um framework para a automatização do processo de build  Inclue plugins de integração com diversas ferramentas de controle de código  Prove interface web para visualização de relatórios sobre os builds realizados  É gratuíto e de código aberto (BSD license)
  11. 11.  Arquitetura
  12. 12. O phpUnderControl é uma customização do CruiseControl que permite a fácil integração de ferramentas de controle de códigos PHP  phpDocumentor  PHPUnit  xDebug  PMD  PHP_CodeSniffer
  13. 13.  Modifica mecanismos de publicação do CruiseControl para que sejam mais focados a projetos PHP  A partir dos logs gerados no build, gera os gráficos para visualização das métricas  Provê interface (linha de comando) para o setup de novos projetos a serem monitorados
  14. 14.  Provê feedback  Documentação do código  Execução de testes  Cobertura dos testes (code coverage)  Métricas ▪ Complexidade ▪ Risco ▪ ...  Violação de padrões
  15. 15. Instalação CruiseControl $ unzip cruisecontrol-bin-2.7.3.zip -d /opt $ ln -s /opt/cruisecontrol-bin-2.7.3 /opt/cruisecontrol $ /opt/cruisecontrol/cruisecontrol.sh Algumas configurações de startup podem ser configuradas neste arquivo (JAVA_HOME, porta, etc)
  16. 16. Instalação phpUnderControl $ pear config-set preferred_stable beta $ pear channel-discover components.ez.co $ pear channel-discover pear.phpunit.de $ pear install –alldeps phpunit/phpUnderControl Aplica o patch na instalação do Cruise Control. Não esquecer de adicionar os executáveis do PHP_CodeSniffer, PHPUnit, phpDocumentor no PATH!!! Todos disponíveis no diretório de binários do PHP (phpcs, phpunit, phpdoc)
  17. 17. Instalação phpUnderControl $ /usr/local/php5/bin/phpuc install /opt/cruisecontrol
  18. 18. Lista de projetos monitorados
  19. 19. Estatísticas de build
  20. 20. Execução de testes (PHPUnit)
  21. 21. Documentação (phpDocumentor)
  22. 22. Violação de padrões (PHP_CodeSniffer)
  23. 23. Violação de padrões (PHP_CodeSniffer)  Possibilita ao desenvolvedor visualizar possíveis violações no padrão de código adotado para a escrita do projeto (PHP e JavaScript).  Suporta alguns padrões de escrita conhecidos (PEAR, Zend, etc), mas existe a possibilidade de extensão  Integra com Zend Code Analyzer
  24. 24. Code Coverage (PHPUnit + xDebug)
  25. 25. Métricas (PHPUnit + PMD)
  26. 26. Complexidade Ciclomática  Mede o número de caminhos independentes de um método  Considera contruções if, for, &&, case, while, etc.  Interpretação  Maior complexidade leva a mais erros  Maior complexidade faz o teste mais difícil
  27. 27. CRAP (Change Risk Analysis and Predictions )  Estima o esforço/tempo para a alteração de uma unidade de código  Considera a cobertura dos testes e a complexidade ▪ Menor cobertura => Maior risco ▪ Maior cobertura => Risco similar à complexidade
  28. 28. Criando um projeto de exemplo $ /usr/local/php5/bin/phpuc example --project-name conaphp /opt/cruisecontrol Opção para criação de um projeto de Nome do novo projeto exemplo e uma sub-opção para o nome do projeto Diretório de instação do CruiseControl
  29. 29. Estrutura de diretórios /opt/cruisecontrol |-- artifacts | |-- conaphp | | |-- 20081008002858 Os artefatos gerados em cada build | | | |-- api | | | |-- coverage ficam arquivados para visualização | | | `-- graph | `-- project-abc futura | `-- project-xyz |-- config.xml |-- cruisecontrol.sh |-- logs | |-- conaphp Arquivo monitorado pelo loop | `-- project-abc | `-- project-xyz principal do CruiseControl |-- projects |-- conaphp | |-- build | | |-- api | | |-- coverage | | | `-- logs |-- build.xml Arquivo de configuração do build do | | `-- source |-- src projeto define as tarefas a serem | | | `-- Math.php `-- tests executadas | `-- MathTest.php `-- project-abc `-- project-xyz
  30. 30.  Configuração do CruiseControl (config.xml) <cruisecontrol> … Nome projeto <project name=quot;conaphpquot; buildafterfailed=quot;falsequot;> <schedule interval=quot;300quot;> Agendamento <ant anthome=quot;apache-ant-1.7.0“ buildfile=quot;projects/${project.name}/build.xmlquot;/> </schedule> … <publishers> <currentbuildstatuspublisher file=quot;logs/${project.name}/buildstatus.txtquot;/> <artifactspublisher dir=quot;projects/${project.name}/build/api” dest=quot;artifacts/${project.name}quot; subdirectory=quot;apiquot;/> <artifactspublisher dir=quot;projects/${project.name}/build/coverage“ dest=quot;artifacts/${project.name}quot; subdirectory=quot;coveragequot;/> <execute command=quot;/usr/local/php5/bin/phpuc graph logs/${project.name} artifacts/${project.name}quot;/> </publishers> </project> … </cruisecontrol> Gera os gráficos
  31. 31.  Configuração do Ant (build.xml)  Organização ▪ Project: é a tag raiz do build.xml, ele representa todo o projeto e só pode existir um por buildfile. ▪ Target: é uma coleção de tarefas que desejamos aplicar em determinado momento e encadeando junto com outras tarefas. ▪ Task: é uma tarefa que desejamos que seja feita dentro do target, o Ant já disponibiliza tarefas prontas, porém é possível criar novas. ▪ Property: é um parâmetro em forma de nome-valor necessário para configurar nossa aplicação.
  32. 32.  Configuração do Ant (build.xml) <project name=quot;conaphpquot; default=quot;buildquot; basedir=quot;.quot;> <property name=“src” value=“${basedir}/src” /> <property /> <property /> <target name=“build” depends=“checkout”> <task /> <task /> </target> <target name=“checkout” > <echo>Baixando código do repositório…</echo> <task /> </target> </project>
  33. 33.  Configuração do Ant (build.xml) <project name=quot;conaphpquot; default=quot;buildquot; basedir=quot;.quot;> <target name=quot;buildquot; depends=quot;php-documentor,php-codesniffer,phpunitquot;/> <target name=quot;php-documentorquot;> <exec executable=quot;phpdocquot; dir=quot;${basedir}/sourcequot; logerror=quot;onquot;> <arg line=quot;--title '${ant.project.name}' -ue on -t ${basedir}/build/api -d src -tb '/usr/local/php5/lib/php/data/phpUnderControl/data/phpdoc' -o HTML:Phpuc:phpucquot;/> </exec> </target> <target name=quot;php-codesnifferquot;> <exec executable=quot;phpcsquot; dir=quot;${basedir}/source“ output=quot;${basedir}/build/logs/checkstyle.xml“ error=quot;/tmp/checkstyle.error.logquot;> <arg line=quot;--report=checkstyle --standard=PEAR srcquot;/> </exec> </target> …
  34. 34.  Configuração do Ant (build.xml) .. <target name=quot;phpunitquot;> <exec executable=quot;phpunitquot; dir=quot;${basedir}/sourcequot; failonerror=quot;onquot;> <arg line=quot; --log-xml ${basedir}/build/logs/phpunit.xml --log-pmd ${basedir}/build/logs/phpunit.pmd.xml --log-metrics ${basedir}/build/logs/phpunit.metrics.xml --coverage-xml ${basedir}/build/logs/phpunit.coverage.xml --coverage-html ${basedir}/build/coverage PhpUnderControl_Example_MathTest tests/MathTest.phpquot;/> </exec> </target> </project>
  35. 35. Perguntas?
  36. 36. Obrigado!!! Contato: diegotremper@gmail.com LinkedIn: http://www.linkedin.com/in/diegotremper Blog: http://www.diegotremper.com
  37. 37.  http://www.diegotremper.com  http://cruisecontrol.sourceforge.net/  http://ant.apache.org/  http://www.phpundercontrol.org/  http://www.phpunit.de/  http://pear.php.net/package/PHP_CodeSniffe r  http://www.phpdoc.org/

×