Ao final da aula o aluno deverá ser capaz de:
Imagine uma equipe de desenvolvimento:
Cada desenvolvedor trabalha separadamente durante vários dias.
Quando todos juntam o código surgem problemas:
Esse cenário ficou conhecido como:
Cada aluno escreve uma parte do trabalho separadamente.
No dia da entrega todos juntam os arquivos.
Problemas comuns:
Se os alunos compartilharem o trabalho constantemente:
Essa é a ideia da Integração Contínua.
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.
CI significa:
Isso é feito através de:
Resultado:
Build aprovado Build falhou
Algumas ferramentas populares:
A adoção de CI traz várias vantagens:
Sem CI:
Erro aparece dias ou semanas depois.
Com CI:
Erro aparece minutos após o commit.
É como fazer exercícios e corrigir imediatamente.
Se o erro aparece rápido:
mais fácil corrigir menos impacto no sistema
Quando o código é integrado frequentemente:
Integrações grandes geram mais conflitos.
Um dos objetivos da CI é garantir que o sistema esteja sempre:
Isso aumenta a estabilidade do projeto.
Outro conceito importante da CI é o Build.
Build é o processo de transformar código fonte em aplicação executável.
Esse processo pode incluir:
Código fonte:
MeuSistema.java
Compilação:
javac MeuSistema.java
MeuSistema.class
Um projeto Node geralmente executa:
npm install npm run build
Isso instala dependências e prepara a aplicação.
Durante o build o sistema gera:
app.apk
Esse arquivo é o aplicativo que será instalado no celular.
Quando usamos CI:
O build é executado automaticamente.
Fluxo:
Desenvolvedor faz push ↓ Servidor CI detecta mudança ↓ Sistema inicia build ↓ Projeto é compilado
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.
Outro pilar da Integração Contínua são os 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.
Sistema de login:
Entrada:
usuario: admin senha: 123
Resultado esperado:
login realizado com sucesso
Se o sistema falhar → o teste falha.
Principais tipos:
Testam pequenas partes do código.
Exemplo:
function soma(a,b){ return a + b }
Teste:
soma(2,3) = 5
Testam interação entre partes do sistema.
Verificam se os componentes funcionam corretamente juntos.
Testam o sistema como um usuário real.
Ferramentas comuns:
Na Integração Contínua os testes são executados automaticamente.
Commit ↓ Servidor CI inicia pipeline ↓ Build do sistema ↓ Execução de testes ↓ Resultado final
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.
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
Grandes empresas utilizam CI diariamente:
Essas empresas fazem centenas ou milhares de deploys por dia.
Integração Contínua permite:
Desenvolvedor escreve código ↓ Commit ↓ Push ↓ CI executa build ↓ CI executa testes ↓ Resultado