Integração Contínua (CI)

DevOps / Engenharia de Software

Objetivos da Aula

Ao final da aula o aluno deverá ser capaz de:

  • Compreender o conceito de Integração Contínua
  • Entender por que CI é utilizada
  • Identificar os benefícios da CI
  • Entender o conceito de build automático
  • Compreender o papel dos testes automatizados

O Problema no Desenvolvimento de Software

Imagine uma equipe de desenvolvimento:

Desenvolvedor Parte do sistema
Ana Login
João Cadastro
Maria Pagamentos
Pedro Relatórios
Lucas API

Cada desenvolvedor trabalha separadamente durante vários dias.

O Problema da Integração

Quando todos juntam o código surgem problemas:

  • sistema não compila
  • funcionalidades param de funcionar
  • conflitos de código
  • erros inesperados

Esse cenário ficou conhecido como:

Integration Hell

(Inferno da Integração)

Analogia Simples

Trabalho em grupo da faculdade

Cada aluno escreve uma parte do trabalho separadamente.

No dia da entrega todos juntam os arquivos.

Problemas comuns:

  • conteúdo repetido
  • partes faltando
  • formatação diferente
  • erros no documento

Com Integração Contínua

Se os alunos compartilharem o trabalho constantemente:

  • todos conseguem ver mudanças
  • erros são corrigidos rapidamente
  • o trabalho evolui de forma organizada

Essa é a ideia da Integração Contínua.

O que é Integração Contínua (CI)

Integração Contínua (Continuous Integration) é uma prática onde:

Desenvolvedores integram frequentemente suas alterações em um repositório compartilhado e cada integração é verificada automaticamente.

Definição Simplificada

CI significa:

Integrar código frequentemente

Verificar automaticamente se tudo continua funcionando

Isso é feito através de:

  • build automático
  • testes automatizados

Fluxo da Integração Contínua

  1. Desenvolvedor altera o código
  2. Faz commit no repositório
  3. Envia o código (push)
  4. Servidor CI detecta mudança
  5. Sistema executa build e testes

Resultado:

✔ Build aprovado
❌ Build falhou

Ferramentas de CI

Algumas ferramentas populares:

Ferramenta Descrição
Jenkins Servidor clássico de CI
GitHub Actions CI integrada ao GitHub
GitLab CI Sistema CI do GitLab
CircleCI Plataforma CI em nuvem
Travis CI Popular em projetos open source

Benefícios da Integração Contínua

A adoção de CI traz várias vantagens:

  • detecção rápida de erros
  • redução de conflitos de código
  • sistema sempre funcional
  • maior confiança nas mudanças

Detecção Rápida de Erros

Sem CI:

Erro aparece dias ou semanas depois.

Com CI:

Erro aparece minutos após o commit.

Analogia

É como fazer exercícios e corrigir imediatamente.

Se o erro aparece rápido:

✔ mais fácil corrigir
✔ menos impacto no sistema

Redução de Conflitos de Código

Quando o código é integrado frequentemente:

  • as alterações são pequenas
  • conflitos são menores
  • problemas são mais fáceis de resolver

Integrações grandes geram mais conflitos.

Sistema Sempre Funcional

Um dos objetivos da CI é garantir que o sistema esteja sempre:

  • compilando
  • executando
  • passando nos testes

Isso aumenta a estabilidade do projeto.

Build Automático

Outro conceito importante da CI é o Build.

O que é Build?

Build é o processo de transformar código fonte em aplicação executável.

Esse processo pode incluir:

  • compilação
  • download de dependências
  • geração de artefatos
  • empacotamento do sistema

Exemplo em Java

Código fonte:

MeuSistema.java

Compilação:

javac MeuSistema.java

Resultado:

MeuSistema.class

Exemplo em Node.js

Um projeto Node geralmente executa:

npm install
npm run build

Isso instala dependências e prepara a aplicação.

Exemplo Android

Durante o build o sistema gera:

app.apk

Esse arquivo é o aplicativo que será instalado no celular.

Build Automático na CI

Quando usamos CI:

O build é executado automaticamente.

Fluxo:

Desenvolvedor faz push
↓
Servidor CI detecta mudança
↓
Sistema inicia build
↓
Projeto é compilado

Analogia com Fábrica

Imagine uma linha de produção.

Você coloca as peças na esteira.

A máquina monta o produto automaticamente.

Na CI:

Código entra → sistema executa build → aplicação pronta.

Testes Automatizados

Outro pilar da Integração Contínua são os testes automatizados.

O que são Testes Automatizados

São programas que verificam automaticamente se o sistema funciona corretamente.

Eles executam partes do sistema e comparam o resultado com o esperado.

Exemplo de Teste

Sistema de login:

Entrada:

usuario: admin
senha: 123

Resultado esperado:

login realizado com sucesso

Se o sistema falhar → o teste falha.

Tipos de Testes

Principais tipos:

  • Testes Unitários
  • Testes de Integração
  • Testes de Interface

Testes Unitários

Testam pequenas partes do código.

Exemplo:

function soma(a,b){
 return a + b
}

Teste:

soma(2,3) = 5

Testes de Integração

Testam interação entre partes do sistema.

Exemplo:

  • API
  • banco de dados
  • serviços externos

Verificam se os componentes funcionam corretamente juntos.

Testes de Interface

Testam o sistema como um usuário real.

Exemplo:

  • abrir página
  • clicar botão
  • preencher formulário

Ferramentas comuns:

  • Selenium
  • Cypress
  • Playwright

Testes dentro da CI

Na Integração Contínua os testes são executados automaticamente.

Fluxo:

Commit
↓
Servidor CI inicia pipeline
↓
Build do sistema
↓
Execução de testes
↓
Resultado final

Exemplo de Pipeline de CI

Um pipeline geralmente executa:

1 - baixar código do repositório
2 - instalar dependências
3 - executar build
4 - rodar testes
5 - gerar artefato

Tudo isso acontece automaticamente.

Exemplo de CI no GitHub

name: CI

on: [push]

jobs:
 build:
   runs-on: ubuntu-latest

   steps:
     - uses: actions/checkout@v3

     - name: Instalar dependências
       run: npm install

     - name: Executar testes
       run: npm test

Uso no Mundo Real

Grandes empresas utilizam CI diariamente:

  • Netflix
  • Google
  • Amazon
  • Spotify
  • Facebook

Essas empresas fazem centenas ou milhares de deploys por dia.

Resumo da Aula

Integração Contínua permite:

  • integrar código frequentemente
  • executar build automático
  • rodar testes automatizados
  • detectar erros rapidamente

Fluxo Simplificado da CI

Desenvolvedor escreve código
↓
Commit
↓
Push
↓
CI executa build
↓
CI executa testes
↓
Resultado