Aula 11 - CI/CD Moderno (GitHub Actions) 🚀
!!! tip "Objetivo" Objetivo: Compreender o ciclo de integração e entrega contínua (CI/CD), aprender a criar workflows automatizados no GitHub e garantir que o código seja testado automaticamente a cada push.
1. O que é CI/CD? 🔄
Em vez de rodar testes e linters manualmente na sua máquina local, a nuvem assume a responsabilidade após cada interação no controle de versão.
=== "CI (Integração Contínua)" Integrar e validar o código de dezenas de desenvolvedores repetidas vezes ao dia. O servidor "puxa" o código, roda os linters, compila (build) e dispara centenas de testes unitários. Se algo quebrar, o pull request é bloqueado.
=== "CD (Entrega/Deploy Contínuo)" Uma vez que os testes garantem que o software está estável (CI passou), o processo de CD empacota esse aplicativo e o instale automaticamente nos servidores hospedados de teste ou de produção, sem intervenção humana.
2. GitHub Actions: Automação na Nuvem 🤖
O GitHub Actions é a ferramenta de CI/CD integrada ao GitHub. Ele funciona através de arquivos de configuração no formato YAML.
Componentes do Actions:
- Workflow: O processo completo (ex: "Build e Teste").
- Event: O que dispara o processo (ex: um
pushou umpull_request). - Job: Uma tarefa específica dentro do workflow (ex: "rodar testes unitários").
- Steps: Os comandos passo a passo dentro de um Job.
3. Visualização da Pipeline (Mermaid)
graph LR
Push([Git Push]) --> Trigger{GitHub Event}
Trigger --> VM([Spin up Virtual Machine])
VM --> Install([npm install])
Install --> Lint([npx eslint .])
Lint --> Test([npm test])
Test -- Success --> Deploy([Auto Deploy])
Test -- Failure --> Notify([Notificar Developer])
4. O Arquivo de Configuração (.yml) 📄
Abaixo, um exemplo de como é um arquivo de workflow real:
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
5. Praticando no Terminal (Simulação) 💻
Imagine o terminal do servidor do GitHub executando seu workflow:
$ runner-ci --start
Starting Workflow: Node.js CI
Step 1: Checking out code... OK
Step 2: Installing Node 18... OK
Step 3: Running npm install... OK
Step 4: Running npm test...
PASS test/auth.test.js
PASS test/db.test.js
Step 5: All tests passed! Pipeline completed.
6. Mini-Projeto: Monitorando um Workflow 🚀
- Vá até um repositório seu no GitHub.
- Clique na aba Actions.
- O GitHub sugerirá "Workflows" baseados na sua linguagem.
- Escolha um simples (como Node.js ou Python) e clique em Set up this workflow.
- Clique em Commit changes.
- Veja o workflow rodar em tempo real e verifique se ele fica "Verde" (Sucesso).
7. Exercício de Fixação 📝
- Básico: Qual a principal diferença entre Integração Contínua (CI) e Entrega Contínua (CD)?
- Básico: Para que serve o evento
on: [pull_request]em um workflow? - Intermediário: Por que é perigoso fazer o Deploy (CD) sem ter uma etapa de Testes (CI) antes?
- Intermediário: O que acontece com um Pull Request se o workflow de testes falhar?
- Desafio: Pesquise o que são "GitHub Secrets" e por que nunca devemos colocar senhas diretamente no arquivo
.yml.
Próxima Aula: Vamos falar de infraestrutura com Automação e IaC (Ansible/Terraform)! ⚙️