📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Ferramentas. Recomendado revisar antes de começar.
v1.0 — DevContainers W3C, Docker, Automação de Tarefas com Make e Ambientes Herméticos
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Ambientes Reprodutíveis · DevContainers · Docker · Makefile Canônico
- v2: Gerenciamento de Segredos com Vault & SOPS
- v3: CLI Customizado em Rust/Go para Automação Interna de Equipes
- v4: Platform Engineering: Developer Portal com Backstage
🎓 Nível Profissional Simulado: Engenheiro DevOps / Platform Engineer Trainee. O dilema “na minha máquina funciona” acabou. Empresas modernas utilizam DevContainers e Makefiles, garantindo que um novo desenvolvedor consiga clonar o repositório e rodar o projeto em 30 segundos, exatamente com as mesmas versões de compilador e dependências de produção.
Criar a infraestrutura de Ambiente Reprodutível de Desenvolvimento utilizando a especificação aberta DevContainers (.devcontainer/devcontainer.json), isolamento com Docker e automação padronizada de comandos operacionais (make build, make test, make lint, make run) através de um Makefile Canônico.
“Levamos 3 dias para configurar o computador de um novo desenvolvedor contratado porque cada um usa um sistema operacional diferente (Windows, Mac, Ubuntu) com versões conflitantes do Java, Node e Python. Queremos que qualquer desenvolvedor abra o VS Code, clique em ‘Reopen in Container’ e tenha o ambiente 100% pronto com todas as extensões instaladas e possa rodar o projeto simplesmente digitando
make run.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Configurar .devcontainer/devcontainer.json com imagem base, portas e extensões recomendadas. |
“clique em Reopen in Container” |
| RF02 | Funcional | Implementar Makefile com targets canônicos: build, test, lint, clean e run. |
“rodar o projeto digitando make run” |
| RF03 | Funcional | Script de pós-criação (postCreateCommand) instalando ferramentas automaticamente. |
“ambiente 100% pronto” |
| RNF01 | Não-Funcional | Reprodutibilidade idêntica em Windows (WSL2), macOS (Apple Silicon) e Linux. | Portabilidade Total |
| RNF02 | Não-Funcional | Makefile determinístico com declaração explícita de .PHONY. |
Boas Práticas Make |
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como novo membro do time, quero começar a programar no meu primeiro dia sem instalar 10 ferramentas locais. | Alta |
| US02 | Como time de CI/CD, quero rodar make test no GitHub Actions executando exatamente a mesma instrução dos devs. |
Alta |
# Branch da funcionalidade
git checkout -b feature/US01-devcontainer-makefile
# Executar os targets do Makefile
make build
make test
SHELL := /bin/bash
.PHONY: all build test clean run
all: build test
build:
@echo "==> Compilando a aplicacao..."
test:
@echo "==> Executando suíte de testes automatizados..."
clean:
@echo "==> Limpando artefatos temporarios..."
run:
@echo "==> Iniciando o servidor de desenvolvimento..."
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd tools_01_devcontainer_makefile
# Executar comandos específicos da tecnologia:
python main.py # ou npm run dev / ./gradlew build
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/tools_01_devcontainer_makefile`
# Validar se o Makefile executa todos os alvos sem erros
make all
O diagrama abaixo ilustra a topologia de componentes, balanceamento, esteiras de automação e observabilidade na subpasta .devcontainer/:
flowchart TD
subgraph Config["Configuração & IaC"]
C1["Manifestos Declarativos"] --> C2["Variáveis & Segredos"]
end
subgraph Orquestracao["Orquestração & Redes"]
O1["Load Balancer / Ingress"] --> O2["Pods / Contêineres de Serviço"]
end
subgraph Observabilidade["Observabilidade & Segurança"]
M1["Telemetria Prometheus / k6"] --> M2["Scanners SAST & Dashboards"]
end
subgraph Qualidade["Homologação & Qualidade"]
Q1["Automação CI/CD"] --> Q2["Checkpoints CP-01..05 PASS"]
end
Config --> Orquestracao
Orquestracao --> Observabilidade
Observabilidade --> Qualidade
style Config fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
style Orquestracao fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
style Observabilidade fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px
| ID | Persona | História de Usuário | Critério de Aceite | Prioridade |
|---|---|---|---|---|
| US-01 | Desenvolvedor em Onboarding | Desejo abrir o projeto em um DevContainer VS Code totalmente configurado | Setup instantâneo com runtime, linters, formatadores e extensões pré-instalados | Alta |
| US-02 | Tech Lead | Desejo Makefile padronizando comandos essenciais (make lint, test, build, clean) | Interface de automação unificada operando de forma idêntica em qualquer máquina | Alta |
| US-03 | Engenheiro de Plataforma | Desejo definição Dockerfile do container com ferramentas de linha de comando | Imagem Docker customizada contendo git, curl, zsh, linters e SDKs | Alta |
| US-04 | Analista de Infraestrutura | Desejo persistência de dados de extensões e histórico via mounts de volume | Volumes Docker mapeando ~/.ssh e caches locais para produtividade | Média |
| US-05 | Auditor de Ambiente | Desejo testes automatizados comprovando execução de make test dentro do container | Validação de que todas as metas do Makefile executam com código de retorno zero | Média |
| ID | Descrição do Requisito | Criticidade |
|---|---|---|
| RF-01 | Configuração devcontainer.json com definições de extensões e configurações VS Code | Alta |
| RF-02 | Makefile canônico com alvos padronizados: help, install, lint, test, build, clean | Alta |
| RF-03 | Dockerfile de desenvolvimento com ferramentas utilitárias e permissões de usuário | Alta |
| RF-04 | Scripts de postCreateCommand configurando ambiente no primeiro boot | Média |
| RF-05 | Módulo de testes automatizados com verificação de alvos do Makefile | Média |
| ID | Especificação Arquitetural | Criticidade |
|---|---|---|
| RNF-01 | Eliminação do problema ‘funciona na minha máquina’ via contêiner padronizado | Alta |
| RNF-02 | Compatibilidade multiplataforma com VS Code no Windows, Mac e Linux | Alta |
| RNF-03 | Tempo de inicialização do devcontainer após build inferior a 5 segundos | Média |
| RNF-04 | Conformidade com a especificação oficial Development Containers (containers.dev) | Alta |
| RNF-05 | Isolamento dos arquivos de configuração em .devcontainer/ | Alta |
| User Story | Requisito Funcional | Requisito Não-Funcional | Módulo / Artefato de Código | Status de Homologação |
|---|---|---|---|---|
| US-01 | RF-01 |
RNF-01, RNF-04 |
.devcontainer/devcontainer.json |
Testado |
| US-02 | RF-02 |
RNF-01, RNF-02 |
Makefile |
Testado |
| US-03 | RF-03 |
RNF-01, RNF-03 |
.devcontainer/Dockerfile |
Testado |
| US-04 | RF-04 |
RNF-02, RNF-03 |
.devcontainer/devcontainer.json |
Testado |
| US-05 | RF-05 |
RNF-01, RNF-05 |
Makefile |
Testado |
| Checkpoint | Escopo da Validação | Artefato Verificado | Status |
|---|---|---|---|
| CP-01 | Configuração Declarativa do Ambiente | .devcontainer/ |
PASS ✅ |
| CP-02 | Provisionamento & Orquestração | Deployments / Services |
PASS ✅ |
| CP-03 | Redes, Proxies & Segurança de Borda | Ingress / Security Groups |
PASS ✅ |
| CP-04 | Observabilidade, Métricas & SAST | Metrics / Scanners |
PASS ✅ |
| CP-05 | Homologação com Suíte de Testes | Test Suite / CI Gate |
PASS ✅ |