Apresentações – Bruno Caimar
Apresentação de Integração Contínua
Perguntas:
Quem sabe/não sabe o que é integração continua?
Quem aqui sabe/não sabe que temos um servidor de integração continua?
O que é IC?
Definição básica: pratica de integrar seu código continuamente (build), seja manual ou de forma automatizada.
Integrar no sentido de: baixar do repositório, compilar, rodar testes, publicar relatórios, gerar setups/pacote
Manual X Automatizado
Exemplos:
Erros de compilação – Quem nunca baixou um projeto do repositório e não conseguir nem compilá-lo?
Alguém esqueceu de subir alguma arquivo para o repositório, faltou alguma dependência / etc.
Exemplo: Projeto XX do ano passado – 1h30 para conseguir compilar o projeto.
Vamos ver com mais detalhes esses pontos nessa apresentação.
Mas antes disso ...
Antes de falar os por quês, pra quês, como ....
Integração Contínua NÃO é uma desculpa para encontrar culpados.
Blaming Culture;
Apontar o dedo;
Estigmatizar – ‘Chapéu’ de quebrador
Se isso acontecer/está acontecendo tem algo muito errado acontecendo (e não é somente seu build que está quebrado)
Integração Contínua NÃO é sobre encontrar, castigar e punir.
(BC - Não está muito pesado isso (as imagens)?)
Remo - Brincadeira é bacana se o time gostar! Funciona como um incentivo em muitos times. E, na verdade, ninguém vai te dar uma remada de verdade.
Trocar.
Afinal: Por que ter um build se ele nunca quebra?
Opiniões:
Testes e builds são feitos para serem quebrados – Roy Osherove - @RoyOsherove
Se o build nunca quebra, por quê tê-lo em primeiro lugar? – Ken Egozi - @kenegozi
Software Entropy
If something is wrong, fix it
Take some action to prevent future damage
Small problems accumulate and turn your code into crap
Teoria das janelas quebradas - Pragmatic programmer
Um build quebrado por um ou dois dias, Ok. Mais que isso já é perigoso e mais que isso demostra atitude ‘eu não me importo’
Afinal, se meu build está quebrado a mais de uma semana é por que ou ele não serve para nada ou ninguém se importa com ele. Se chegarem nesse ponto a melhor coisa a se fazer é remover o build do servidor.
Agora vamos para o que interessa...
IC essencialmente sobre aprendizado...
Aprender com o que está acontecendo durante o tempo de vida do projeto
Aprender com as falhas que ocorrem.
Meu build quebrou – Por que aconteceu isso? Perguntas, Perguntas, Perguntas!
Falhar, falhar novamente!
Confiança – O que eu fiz não está errado / Posso continuar nesse passo que estou caminho certo.
Trabalho em equipe – O que eu fiz não está errado a ponto de atrapalhar meus colegas de equipe. Ajudar/Aprender algo com meus colegas quando um build está quebrado.
Habito – Fazer sempre, fazer melhor.
Minimizar Riscos
Responsabilidade / Compromisso
Antecipar problemas – Não quero descobrir surpresas de última hora
Comunicação
Build é uma ferramenta de comunicação. Posso ficar sabendo o que está acontecendo no meu projeto mesmo não estando presente.
Feedback – Saber que estou fazendo (ou não) as coisas certas.
Testes tem muito a ver com isso. Se eu tenho testes automatizados no meu projeto, tenho esse feedback para saber se o que eu fiz está correto ou não.
Visibilidade – Mostrar para todos o que está acontecendo no meu projeto.
Falar sobre o uso da televisão
Automatização
Trabalhar melhor
Fazer o trabalho que realmente importa. Deixar para a maquina o que ela pode fazer pra gente.
Testes
Executar testes unitários, performance, carga, etc.
Exemplos: Sabesp, Pegasus, etc.
Automatizar testes – Sejam eles quais forem (unitários, funcionais, performance, carga)
Métricas
Linhas de código, número de testes, analise estática de código
Conhecer a saúde de meu código
Conhecer as praticas da linguagem que estou trabalhando (analise estática). Exemplo: meu uso recente de Python.
Antes de mostrar as coisas funcionando....
Tudo isso é muito bonito, mas vai fazer eu entregar o meu projeto certo?
Não! Mas pode te ajudar nisso, e ainda te poupar bastante dor de cabeça ‘técnica’ em sua entrega.
(BC – Ver se achamos outra imagem)
SW servidor de integração continua – jenkins
- O que é o Jenkins? Servidor de integração continua - Open Source feito em Java (Fork do Hudson)
Plugins
Visualizações
Etc
Novidade
- Paciência – As coisas costumam piorar antes de melhorar!
Nós vamos falar de algumas ferramentas sem detalhes.
Demostração
Configurar um projeto simples (Integração Github, relatório, notificação por email/tray));
Efetuar um push para o GitHub para ver o Build rodando na TV
Exibir a notificação – Email/Tray
Usar o projeto Python Test
Preparar roteiro demonstração
Xkcd – The #1 programmer excuse for legitimately slacking off: “My Code’s compiling.”
Dicas – Build tem que ser rapido
Se tenho um build lento é melhor separa-lo
Não encontrou algo? Ferramenta? Algo não funciona? Converse com seu colega, converse conosco!
Exemplo: Listen to your build / tests
Contar caso do testes quebrados no projeto da Sabesp (Servidor de IC ficou fora do ar por mais de um mês e o build estava quebrado por causa de falha em testes. Alguns testes estavam frágeis. Dependiam de data/hora - Quebravam aleatoriamente.
Build foi ignorado mas continha um outro teste importante quebrado. Erro foi percebido somente em ambiente de homologação (por sorte)
Beautiful Builds
Patterns for Growing Readable, Maintainable
Automated Build Processes
Roy Osherove
This book is for sale at http://leanpub.com/build
http://BeautifulBuilds.com
http://www.martinfowler.com/articles/continuousIntegration.html
--> Jenkins Continuous Integration Cookbook - Packt
http://www.amazon.com/Jenkins-Continuous-Integration-Cookbook-Alan/dp/1849517401
Jenkins: The Definitive Guide - O'Reilly - $ 20
http://www.amazon.com/gp/product/1449305350/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=1944687742&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=1849517401&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=1C020529AAGWVJKZ3EW5
Download Gratis
http://wakaleo.com/books/jenkins-the-definitive-guide/download-jtdg-pdf
(2007) Continuous Integration: Improving Software Quality and Reducing Risk
http://www.amazon.com/Continuous-Integration-Improving-Software-Reducing/dp/0321336380/ref=pd_sim_b_5?ie=UTF8&refRID=1DA35FP6WXMKWH0HF624
Dúvidas?
Não encontrou algo? Ferramenta? Algo não funciona?
Peça ajuda!
Falar das próximas apresentações sobre as ferramentas.