CI/CD para proyectos Go: Configuración de GitHub Actions

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué CI/CD es importante para proyectos Go



El desarrollo moderno en Go (Golang) requiere no solo escribir código limpio y eficiente, sino también configurar procesos que automaticen la verificación, compilación y entrega de aplicaciones. CI/CD (Continuous Integration / Continuous Delivery) es un conjunto de prácticas que permite enviar cambios a producción de forma rápida y segura. Para desarrolladores de Go, GitHub Actions se ha convertido en una de las herramientas más populares debido a su estrecha integración con los repositorios y su facilidad de configuración.



En este artículo, analizaremos cómo crear un pipeline CI/CD completo para un proyecto Go utilizando GitHub Actions. Aprenderá a automatizar las pruebas, la compilación de archivos binarios y el despliegue en un servidor. Todos los ejemplos serán en Go (Golang) con pasos prácticos.



1. Fundamentos de GitHub Actions para Go



GitHub Actions es un sistema integrado de automatización de flujos de trabajo (workflows). Cada workflow es un archivo YAML que describe los pasos de compilación, prueba e implementación. Para proyectos Go, un pipeline mínimo incluye:



  • Instalación de Go
  • Almacenamiento en caché de dependencias
  • Ejecución de pruebas
  • Compilación de la aplicación


Estructura del archivo de workflow



Cree en la raíz del repositorio el directorio .github/workflows/ y el archivo ci.yml. Aquí tiene una configuración básica para Go:



name: CI para proyecto Go

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

jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Instalación de Go uses: actions/setup-go@v5 with: go-version: '1.22'

- name: Almacenamiento en caché de módulos uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-

- name: Descarga de dependencias run: go mod download

- name: Linting de código run: go vet ./...

- name: Ejecución de pruebas run: go test -v -race -coverprofile=coverage.out ./...

- name: Compilación del archivo binario run: go build -o myapp ./cmd/main.go


Este workflow se ejecuta al hacer push a main o develop, así como al crear un pull request. Verifica el código en busca de errores, ejecuta pruebas con el flag race (detector de carreras de datos) y compila el binario.



2. Pipeline avanzado: pruebas y calidad del código



La verificación básica está bien, pero para un proyecto Go serio se necesita más. Añadamos análisis estático y verificación de cobertura de código.



Adición de golangci-lint



golangci-lint es un agregador de linters que incluye go vet, errcheck, staticcheck y otros. Añadámoslo al workflow:



      - name: Instalación de golangci-lint        uses: golangci/golangci-lint-action@v4        with:          version: latest

- name: Ejecución del linter run: golangci-lint run ./...


Informe de cobertura de código



La cobertura de pruebas es una métrica de calidad importante. GitHub Actions puede generar informes e incluso bloquear PRs si la cobertura es baja:



      - name: Generación del informe de cobertura        run: go test -coverprofile=coverage.out -covermode=atomic ./...

- name: Verificación de cobertura mínima run: | go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//' > coverage.txt if [ $(cat coverage.txt) -lt 70 ]; then echo "La cobertura de código es menor al 70%" exit 1 fi


Ahora el workflow fallará si la cobertura de pruebas cae por debajo del 70%. Esta es una excelente práctica para mantener la calidad de un proyecto Go.



3. Compilación y publicación de la imagen Docker



Las aplicaciones Go a menudo se despliegan como contenedores Docker. GitHub Actions permite aut

Blogs

Book Recommendations