CI/CD para proyectos Go: GitHub Actions de la A a la Z

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

CI/CD para proyectos Go: GitHub Actions de la A a la Z

\n\n

En el desarrollo de software moderno, la automatización de los procesos de compilación, prueba e implementación (CI/CD) se ha convertido no solo en una conveniencia, sino en una necesidad. Para proyectos en Go (Golang), usar GitHub Actions es una de las formas más simples y efectivas de organizar la integración y entrega continuas. En este artículo, analizaremos el ciclo completo de configuración de un pipeline de CI/CD para aplicaciones Go, desde la configuración básica hasta el despliegue automático.

\n\n

¿Qué es GitHub Actions y por qué es importante para Go?

\n\n

GitHub Actions es una plataforma integrada para automatizar flujos de trabajo (workflows) en repositorios de GitHub. Permite crear pipelines que se activan con eventos específicos: push a una rama, creación de un pull request, publicación de un lanzamiento, etc.

\n\n

Para proyectos Go, GitHub Actions ofrece varias ventajas clave:

\n
    \n
  • Compilación rápida — Go compila muy rápido, lo que reduce el tiempo de ejecución del pipeline.
  • \n
  • Enlace estático — Los binarios de Go no requieren dependencias externas, lo que simplifica el despliegue.
  • \n
  • Pruebas integradas — La utilidad go test se integra perfectamente con los sistemas de CI.
  • \n
  • Multiplataforma — Es fácil compilar binarios para diferentes sistemas operativos y arquitecturas.
  • \n
\n\n

Configuración de un pipeline CI básico

\n\n

Comencemos creando un workflow simple que ejecutará pruebas y verificará que el código cumpla con los estándares de Go. Para ello, en la raíz de tu repositorio, crea el directorio .github/workflows y el archivo ci.yml.

\n\n

Ejemplo de configuración 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 realiza los siguientes pasos:

\n
    \n
  • Clona el repositorio.
  • \n
  • Instala Go versión 1.22.
  • \n
  • Almacena en caché los módulos para acelerar ejecuciones posteriores.
  • \n
  • Descarga las dependencias mediante go mod download.
  • \n
  • Ejecuta go vet para el análisis estático.
  • \n
  • Realiza las pruebas con la bandera -race para detectar condiciones de carrera.
  • \n
  • Compila el archivo binario.
  • \n
\n\n

Configuración avanzada: compilación multiplataforma y linters

\n\n

Go permite compilar fácilmente aplicaciones para diferentes plataformas. Agreguemos al pipeline una matriz de compilación (build matrix) y la ejecución del linter golangci-lint.

\n\n

Archivo ci.yml actualizado:

\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