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
Here is the translated HTML content in Portuguese (Português), with all HTML tags preserved and only the text content translated as requested. ```html

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



A automação dos processos de compilação, teste e implantação é uma parte essencial do desenvolvimento moderno em Go (Golang). O GitHub Actions fornece um conjunto de ferramentas poderoso e flexível para construir pipelines de CI/CD diretamente no seu repositório. Neste artigo, vamos abordar como configurar um ciclo completo de integração e entrega contínua para um projeto Go, desde testes simples até a implantação automática.



O que é CI/CD e por que é importante para Go?



CI (Continuous Integration) é a prática de mesclar código com frequência no branch principal, com compilação e testes automáticos. CD (Continuous Delivery/Deployment) é a implantação automática da aplicação pronta.

Para projetos Go, o CI/CD é especialmente útil, pois:

  • Go compila para um binário estático, o que simplifica a implantação
  • Testes rápidos graças à velocidade nativa do Go
  • Verificação automática com linters e formatação (gofmt, golangci-lint)
  • Possibilidade de compilação multiplataforma (Linux, macOS, Windows)


Fundamentos do GitHub Actions para Go



O GitHub Actions usa arquivos YAML no diretório .github/workflows. Cada arquivo descreve um ou mais workflows (pipelines).



Vamos considerar um workflow básico para um projeto Go:



name: Go CI

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

jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Cache Go modules uses: actions/cache@v4 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: Run tests run: go test -v -race -coverprofile=coverage.out ./... - name: Upload coverage uses: actions/upload-artifact@v4 with: name: coverage path: coverage.out


Este workflow é acionado ao fazer push para main/develop e em pull requests. Ele configura o Go, armazena em cache as dependências, executa os testes com as flags -race (detector de corrida) e -coverprofile (cobertura de código).



Configurações avançadas: linters e compilação multiplataforma



Para manter a qualidade do código, vamos adicionar uma verificação com linter. O golangci-lint é o padrão de facto para Go.



  lint:    runs-on: ubuntu-latest    steps:    - uses: actions/checkout@v4    - name: Set up Go      uses: actions/setup-go@v5      with:        go-version: '1.22'    - name: golangci-lint      uses: golangci/golangci-lint-action@v6      with:        version: latest        args: --timeout=5m ./...


A compilação multiplataforma é útil se sua aplicação precisar funcionar em diferentes sistemas operacionais:



  build:    needs: [test, lint]    strategy:      matrix:        os: [ubuntu-latest, macos-latest, windows-latest]        goarch: [amd64, arm64]        runs-on: ${{ matrix.os }}        steps:    - uses: actions/checkout@v4    - name: Set up Go      uses: actions/setup-go@v5      with:        go-version: '1.22'    - name: Build      run: |        GOARCH=${{ matrix.goarch }} go build -v -o myapp-${{ matrix.os }}-${{ matrix.goarch }} ./cmd/app


Observe: para Windows, será necessário ajustar o nome do arquivo de saída (adicionar .exe). Use if runner.os == 'Windows' ou defina o nome através de variáveis.



Implantação automática de aplicações Go



Para implantação, vamos considerar dois cenários populares: publicação de imagem Docker e upload do binário para um servidor.



Blogs

Book Recommendations