Integração Contínua
A integração contínua é uma prática de desenvolvimento de software em que os trabalhos feitos por diferentes desenvolvedores são integrados com frequência. Organizações que fazem uso de uma abordagem linear para desenvolver software geralmente possuem uma fase dedicada à integração dos componentes do sistema que forem construídos separadamente. O problema é que nessa fase de integração, a equipe deve fundir códigos que foram escritos há muito tempo e a quantidade de conflitos e defeitos gerados é imensa. A integração contínua possui uma proposta simples (e um nome sugestivo) que procura amenizar os riscos presentes à integração de software: integre seu trabalho frequentemente. Apesar de sua simplicidade, os benefícios trazidos por esta prática podem ser enormes, pois quaisquer conflitos de código são identificados o mais cedo possível e isso reduz o esforço despendido pela equipe para integrar seus códigos.
Geralmente, a integração contínua é utilizada em projetos submetidos à controle de versão. Múltiplos desenvolvedores compartilham uma linha de desenvolvimento do projeto, realizam suas modificações no código, e integram (com frequência) suas versões do projeto à esta linha de desenvolvimento. A sequência de atividades realizadas pelo programador é muito simples: obtenha a versão mais atual da linha de desenvolvimento compartilhada pelos desenvolvedores da sua equipe, faça suas modificações (corrija um bug, adicione funcionalidades, etc...), paralelamente à isso, atualize periodicamente a versão do projeto que você possui na sua máquina, para que ela se mantenha sincronizada à versão compartilhada pelos desenvolvedores, resolva quaisquer conflitos que surgirem durante essas atualizações, após o término da sua tarefa no código, atualize novamente a versão que você possui do sistema, resolva possíveis conflitos e, finalmente, integre seu código à linha de desenvolvimento do repositório remoto. Uma prática que complementa a integração contínua (e essencial) é garantir que a versão do sistema com as suas modificações passe em todos os testes da aplicação e gere uma build válida antes de integrá-la à uma linha de desenvolvimento no repositório remoto.
Integração Contínua Automatizada
Existem ferramentas que foram desenvolvidas para automatizar o processo de integração de software. Elas são utilizadas em conjunto às atividades descritas anteriormente e executam uma série de scripts que verificam se a versão integrada do software é válida. Estas ferramentas mantêm os desenvolvedores informados do estado das versões do projeto e notificam quaisquer erros que eventualmente surgiram durante a integração. Ao longo desta wiki, a ferramenta Jenkins será apresentada ao leitor para mostrar, na prática, como automatizar a integração contínua no seu projeto.
As ferramentas de automatização são hospedadas em servidores dedicados à realizar a integração do seu projeto. Estas ferramentas monitoram constantemente as atividades do repositório do projeto. O processo possui os seguintes passos:
- Os desenvolvedores enviam suas versões do projeto para o repositório remoto (servidor que hospede um sistema de controle de versão).
- O servidor de integração identifica a movimentação no repositório e avalia a nova versão do sistema (neste passo, um servidor de automatização de build geralmente é utilizado em conjunto).
- O servidor tenta integrar as versões enviadas pelos desenvolvedores à linha de desenvolvimento no repositório remoto, caso o resultado seja positivo, ele avalia a versão integrada (Executa um conjunto de testes da aplicação).
- O servidor de integração notifica os resultados obtidos à equipe.