CI/CD para projetos Go: GitHub Actions do A ao Z

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

CI/CD para projetos Go: GitHub Actions do A ao Z

\n\n

No desenvolvimento de software moderno, a automação dos processos de compilação, teste e implantação (CI/CD) tornou-se não apenas uma conveniência, mas uma necessidade. Para projetos em Go (Golang), usar o GitHub Actions é uma das maneiras mais simples e eficazes de organizar a integração e entrega contínuas. Neste artigo, abordaremos o ciclo completo de configuração de um pipeline de CI/CD para aplicações Go, desde a configuração básica até o deploy automático.

\n\n

O que é GitHub Actions e por que é importante para Go?

\n\n

GitHub Actions é uma plataforma integrada para automatizar fluxos de trabalho (workflows) em repositórios do GitHub. Ela permite criar pipelines que são acionados por eventos específicos: push em um branch, criação de pull request, publicação de release, etc.

\n\n

Para projetos Go, o GitHub Actions oferece várias vantagens importantes:

\n
    \n
  • Compilação rápida — Go compila muito rapidamente, reduzindo o tempo de execução do pipeline.
  • \n
  • Linkagem estática — Binários Go não exigem dependências externas, simplificando o deploy.
  • \n
  • Teste integrado — A ferramenta go test se integra perfeitamente com sistemas de CI.
  • \n
  • Multiplataforma — É fácil compilar binários para diferentes sistemas operacionais e arquiteturas.
  • \n
\n\n

Configuração do pipeline CI básico

\n\n

Vamos começar criando um workflow simples que executará testes e verificará se o código está em conformidade com os padrões Go. Para isso, na raiz do seu repositório, crie o diretório .github/workflows e o arquivo ci.yml.

\n\n

Exemplo de configuração básica:

\n\n
name: CI Pipeline for Go\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    \n    steps:\n    - name: Checkout code\n      uses: actions/checkout@v4\n\n    - name: Setup Go\n      uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n\n    - name: Cache Go modules\n      uses: actions/cache@v4\n      with:\n        path: ~/go/pkg/mod\n        key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}\n        restore-keys: |\n          ${{ runner.os }}-go-\n\n    - name: Download dependencies\n      run: go mod download\n\n    - name: Run vet\n      run: go vet ./...\n\n    - name: Run tests\n      run: go test -v -race -count=1 ./...\n\n    - name: Build\n      run: go build -o myapp ./cmd/app
\n\n

Este workflow executa as seguintes etapas:

\n
    \n
  • Clona o repositório.
  • \n
  • Instala o Go versão 1.22.
  • \n
  • Armazena em cache os módulos para acelerar execuções futuras.
  • \n
  • Baixa as dependências via go mod download.
  • \n
  • Executa go vet para análise estática.
  • \n
  • Executa os testes com a flag -race para detectar condições de corrida.
  • \n
  • Compila o arquivo binário.
  • \n
\n\n

Configuração avançada: compilação multiplataforma e linters

\n\n

Go permite compilar aplicativos facilmente para diferentes plataformas. Vamos adicionar ao pipeline uma matriz de compilação (build matrix) e a execução do linter golangci-lint.

\n\n

Arquivo ci.yml atualizado:

\n\n
name: Advanced Go CI/CD\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n    - name: golangci-lint\n      uses: golangci/golangci-lint-action@v4\n      with:\n        version: latest\n        args: --timeout=5m\n\n  test:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v4\n    - uses: actions/setup-go@v5\n      with:\n        go-version: '1.22'\n    - run: go test -v -race -coverprofile=covera                

Blogs

Book Recommendations