CLI em Go para orquestrar deploys em multiplos ambientes com foco em desempenho, resiliencia e operacao segura.
- Arquitetura modular em pacotes internos (
cli,config,deploy). - Execucao paralela com limite de concorrencia (
worker pool). - Retry com backoff exponencial e limite de atraso.
- Fail-fast opcional para interromper no primeiro erro.
- Comando
planpara revisar execucao antes do deploy. - Comando
validate-configpara validar configuracao carregada. - Status com filtro por ambiente e inventario de hosts.
- Pipeline CI com validacao de
gofmt,go testego build.
main.go: entrypoint da aplicacao.internal/cli/root.go: definicao dos comandos Cobra e parsing de flags.internal/config/config.go: carregamento e validacao de configuracao YAML.internal/deploy/engine.go: motor de deploy, retries, concorrencia e sumarios.
- Go 1.21+
Linux/macOS:
go mod tidy
go build -o deploy-cliWindows:
go mod tidy
go build -o deploy-cli.exePor padrao, a CLI tenta carregar:
deploy.yamldeploy.yml
Se nenhum arquivo for encontrado, usa defaults internos.
Use deploy.example.yaml como base:
services:
- api-backend
- frontend
- worker
- database
environments:
staging:
- staging-01.example.com
- staging-02.example.com
production:
- prod-01.example.com
- prod-02.example.com
- prod-03.example.comExecuta deploy real (ou simulacao com --dry-run).
Exemplo:
./deploy-cli deploy api-backend -e production -p --max-parallel 3 --retries 2 --retry-delay 1sMostra plano completo sem executar alteracoes.
Exemplo:
./deploy-cli plan api-backend -e production -p --max-parallel 3Mostra servicos cadastrados e inventario dos ambientes.
Exemplo:
./deploy-cli status
./deploy-cli status -e production --show-servers=trueValida a configuracao carregada e exibe resumo.
Exemplo:
./deploy-cli validate-config
./deploy-cli validate-config -c deploy.example.yaml| Flag | Descricao | Padrao |
|---|---|---|
-c, --config |
Caminho do YAML de configuracao | deploy.yaml |
| Flag | Descricao | Padrao |
|---|---|---|
-e, --env |
Ambiente alvo | staging |
-p, --parallel |
Ativa execucao paralela | false |
--max-parallel |
Limite de deploys simultaneos | 4 |
-t, --timeout |
Timeout total em segundos | 300 |
--dry-run |
Simula deploy sem executar | false |
--retries |
Tentativas adicionais por host | 1 |
--retry-delay |
Delay base entre retries | 2s |
--fail-fast |
Para no primeiro erro | false |
| Flag | Descricao | Padrao |
|---|---|---|
-e, --env |
Filtra por ambiente | vazio |
--show-servers |
Exibe hosts de cada ambiente | true |
- Use
--parallelem ambientes com mais de 1 host. - Ajuste
--max-parallelde acordo com capacidade de rede e SSH. - Em ambientes instaveis, aumente
--retriese ajuste--retry-delay. - Para rollout mais conservador, use
--fail-fast. - Sempre rode
planantes de deploy em producao.
Workflow em .github/workflows/ci.yml com:
- verificacao de formatacao (
gofmt -l .), - execucao de testes (
go test ./...), - build (
go build ./...).
Disparos:
pushemmainemaster;pull_request;- execucao manual (
workflow_dispatch).
Executar testes:
go test ./...Executar build:
go build ./...Executar status:
go run . statusgo test ./...sem falhas.go build ./...sem falhas.go run . validate-configvalidando o arquivo esperado.- Conferir se
deploy.yamllocal nao foi commitado (ignorado no.gitignore). - Conferir se nao ha binarios (
*.exe,deploy-cli) no commit.