O que é CI/CD? Integração Contínua e Entrega Contínua
⚡ Resumo Inteligente
A integração contínua é uma prática de desenvolvimento de software em que os membros da equipe mesclam seu trabalho em um repositório compartilhado pelo menos diariamente, e cada commit aciona uma compilação e um teste automatizados para detectar erros de integração precocemente.

O que é Integração Contínua (CI)?
Integração contínua É um método de desenvolvimento de software no qual os membros da equipe integram seu trabalho pelo menos uma vez por dia. Cada integração é verificada por uma compilação automatizada que detecta erros. O conceito foi introduzido há mais de duas décadas para evitar o "inferno da integração", que ocorre quando a integração é adiada até o final do projeto.
Após um commit de código, o software é compilado e testado imediatamente. Em um projeto grande com muitos desenvolvedores, os commits ocorrem várias vezes ao dia. A cada commit, o código é compilado e testado; se o teste for aprovado, a compilação é verificada para implantação; e se a implantação for bem-sucedida, o código é enviado para produção. Esse ciclo de commit, compilação, teste e implantação é contínuo, o que dá nome à prática.
O que é Entrega Contínua (CD)?
Entrega Contínua É um método de engenharia de software no qual uma equipe desenvolve software em ciclos curtos e garante que ele possa ser lançado de forma confiável a qualquer momento. O objetivo é construir, testar e lançar software com boa velocidade e frequência, reduzindo o custo, o tempo e o risco de implementar mudanças por meio de atualizações frequentes em produção.
Diferença entre CI e CD
Integração contínua Testar automaticamente cada alteração no código-fonte é uma abordagem que visa testar cada mudança no código-fonte, enquanto a Entrega Contínua é uma abordagem para implementar alterações como novos recursos, configurações e correções de bugs em produção de forma segura e rápida.
Desenvolvimento sem CI vs. Desenvolvimento com CI
| Desenvolvimento sem CI | Desenvolvimento com CI |
|---|---|
| Muitos insetos | Menos bugs |
| Commitções pouco frequentes | Confirmações regulares |
| Lançamentos pouco frequentes e lentos | Lançamentos regulares de trabalho |
| Integração difícil | Integração fácil e eficaz |
| O teste acontece tarde | Os testes são realizados cedo e com frequência. |
| Os problemas são mais difíceis de resolver. | Os problemas são encontrados e resolvidos mais rapidamente. |
| Má visibilidade do projeto | Melhor visibilidade do projeto |
Diferença entre compilação e integração contínua
Enquanto a compilação apenas converte o código em linguagem de máquina, a CI executa diversas atividades mais abrangentes:
- Integração com banco de dados: Mantém o banco de dados e o código sincronizados e automatiza a criação do banco de dados e dos dados de teste.
- Code inspeção: Garante uma base de código saudável, identifica problemas precocemente e aplica as melhores práticas.
- Implantação automatizada: Permite lançar o produto a qualquer momento e mantê-lo em um estado continuamente de demonstração.
- Geração de documentos: Mantém a documentação atualizada e gera relatórios e métricas de compilação.
- Compilação: Converte código de alto nível em linguagem de máquina e garante que ele seja compilado em todas as plataformas de destino.
Idealmente, a compilação é executada a partir da linha de comando, em vez de depender de uma IDE, ocorre continuamente em um servidor CI dedicado (não uma tarefa cron), é acionada a cada commit e fornece feedback imediato sem nenhum esforço do desenvolvedor.
O que você precisa para realizar o processo de melhoria contínua?
- Sistema de controle de versão (VCS): Um método confiável para centralizar e preservar as alterações feitas em seu projeto ao longo do tempo.
- Máquina virtual: Um servidor sobressalente ou pelo menos um máquina virtual para construir seu sistema.
- Soluções de ferramentas de CI hospedadas: Para evitar a gestão de servidores, as soluções hospedadas cuidam de todo o processo e oferecem maior facilidade de escalabilidade.
- Ferramentas: Se você optar por uma variante auto-hospedada, instale uma ferramenta de CI como... Jenkins, TeamCity, Bambooou GitLab.
Como funciona a integração contínua?
Um exemplo antigo é a Nokia, que utilizava um procedimento chamado compilação noturna. Após várias contribuições de diversos desenvolvedores durante o dia, o software era compilado todas as noites. Como a compilação ocorria apenas uma vez por dia, isolar, identificar e corrigir erros em uma base de código extensa era uma tarefa árdua.
Later A equipe adotou a Integração Contínua. O software era compilado e testado assim que um desenvolvedor enviava o código, de modo que qualquer erro era detectado imediatamente e o desenvolvedor responsável podia corrigir o defeito rapidamente.
Recursos do CI
- Permite manter um único repositório de código-fonte.
- Permite testar um clone do ambiente de produção, mantido o mais próximo possível da produção.
- Garante a disponibilidade constante de uma versão atualizada.
- Torna todo o processo de construção, teste e implantação visível para todas as partes interessadas.
Por que usar CI?
- Ajuda você a criar softwares de melhor qualidade e a realizar testes repetíveis.
- Aumenta a capacidade de entrega das equipes de engenharia e permite que os desenvolvedores trabalhem em funcionalidades em paralelo.
- Aumenta a visibilidade e a comunicação em toda a equipe.
- Fornece feedback imediato quando um problema surge e reduz o risco, tornando a implementação mais rápida e previsível.
- Evita confusões de última hora no momento do lançamento.
Melhores Práticas de Utilização de Sistemas de Inteligência Artificial
- Faça commits cedo e com frequência, e nunca faça commits de código quebrado.
- Corrija imediatamente as falhas de compilação e aja com base nas métricas.
- Compile em todos os ambientes de destino e crie artefatos a partir de cada compilação.
- Automatize a compilação para que ela não dependa de uma IDE.
- Crie e teste tudo quando houver alterações, incluindo o esquema do banco de dados.
- Mantenha a compilação rápida e utilize a implantação automatizada.
Desvantagens do IC
- É necessário um período inicial de configuração e treinamento para se familiarizar com um servidor de CI.
- É necessário desenvolver procedimentos de teste adequados, e um conjunto de testes bem estruturado requer recursos significativos.
- Os processos familiares precisam ser convertidos, e servidores e ambientes adicionais são necessários.
- Podem ocorrer tempos de espera quando vários desenvolvedores desejam integrar seu código ao mesmo tempo.
Ferramentas para o Processo de Melhoria Contínua
Jenkins
Jenkins é uma ferramenta de integração contínua de código aberto escrita em JavaIsso facilita os testes e a geração de relatórios em tempo real sobre alterações isoladas em uma base de código maior e ajuda os desenvolvedores a encontrar e corrigir defeitos rapidamente, além de automatizar os testes de compilação.
Bamboo
Bamboo É um servidor de integração contínua que realiza compilação, teste e lançamento automatizados em um único local. Ele funciona perfeitamente com o Jira e Bitbucket e oferece suporte a diversas tecnologias, como Docker, Git, SVN, Mercurial e AWS.
TeamCity
TeamCity É um servidor de integração contínua com muitos recursos poderosos. Ele mantém o servidor de CI íntegro e estável mesmo quando nenhuma compilação está em execução e proporciona melhor qualidade de código para qualquer projeto.
