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.goEste 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 fiAhora 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