CI/CD para projetos Go com GitHub Actions: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao CI/CD para Projetos Go



O desenvolvimento moderno em Go (Golang) exige não apenas código de qualidade, mas também automação confiável dos processos de build, teste e deploy. CI/CD (Continuous Integration / Continuous Deployment) é uma abordagem que permite verificar automaticamente cada alteração no código, executar testes e entregar a aplicação pronta aos usuários. Neste artigo, vamos detalhar como configurar um pipeline CI/CD para projetos Go usando GitHub Actions.



GitHub Actions é um sistema CI/CD integrado que permite criar workflows diretamente no repositório GitHub. Para desenvolvedores Go, isso é especialmente conveniente, pois não requer configuração de serviços externos e se integra facilmente com a infraestrutura existente.



Por que GitHub Actions para Go?



  • Gratuito para repositórios públicos — até 2000 minutos de build por mês gratuitamente
  • Suporte nativo a Go — actions oficiais para configuração do ambiente
  • Flexibilidade — pode ser executado em Ubuntu, Windows, macOS
  • Cache — aceleração de builds usando cache de Go modules
  • Teste matricial — execução paralela em diferentes versões do Go


Criando um Pipeline CI/CD Básico



Vamos começar criando um workflow simples que será executado a cada push no repositório. Para isso, é necessário criar o arquivo .github/workflows/go.yml na raiz do seu projeto.



Exemplo de workflow básico



name: Go CI/CD

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.21', '1.22' ]

steps: - uses: actions/checkout@v4

- name: Setup Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }}

- name: Cache Go modules uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-

- name: Install dependencies run: go mod download

- name: Build run: go build -v ./...

- name: Test run: go test -v -race -coverprofile=coverage.txt ./...

- name: Upload coverage uses: codecov/codecov-action@v3 with: file: ./coverage.txt flags: unittests


Este workflow faz o seguinte:

  • Executa ao fazer push em main/develop ou ao criar um pull request
  • Testa em duas versões do Go (1.21 e 1.22)
  • Armazena em cache os módulos para acelerar builds subsequentes
  • Compila o projeto e executa testes com as flags -race (detector de data races) e -cover (cobertura de código)
  • Envia o relatório de cobertura para o Codecov


Configurações Avançadas: Linting e Segurança



Para um projeto Go profissional, não basta apenas compilar e testar o código. Vamos adicionar análise estática e verificação de segurança.



Adicionando Linting com golangci-lint



- name: Lint  uses: golangci/golangci-lint-action@v3  with:    version: latest    args: --timeout=5m --out-format=colored-line-number    skip-pkg-cache: true


golangci-lint combina dezenas de linters (govet, staticcheck, errcheck e outros) e gera um relatório unificado. Isso ajuda a encontrar erros potenciais, código não utilizado e problemas de estilo.



Verificação de Segurança com govulncheck



- name: Check vulnerabilities  run: |    go install golang.org/x/vuln/cmd/govulncheck@latest    govulncheck ./...


A ferramenta govulncheck analisa as dependências do projeto em busca de vulnerabilidades conhecidas no banco de dados Go Vulnerability Database. Isso é crítico para manter a segurança da aplicação.

Blogs

Book Recommendations