CI/CD pour projets Go avec GitHub Actions : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction au CI/CD pour les projets Go



Le développement moderne en Go (Golang) nécessite non seulement un code de qualité, mais aussi une automatisation fiable des processus de build, de test et de déploiement. CI/CD (Continuous Integration / Continuous Deployment) est une approche qui permet de vérifier automatiquement chaque modification du code, d'exécuter les tests et de livrer l'application prête aux utilisateurs. Dans cet article, nous allons détailler comment configurer un pipeline CI/CD pour les projets Go avec GitHub Actions.



GitHub Actions est un système CI/CD intégré qui permet de créer des workflows directement dans le dépôt GitHub. Pour les développeurs Go, c'est particulièrement pratique car cela ne nécessite pas de configuration de services externes et s'intègre facilement à l'infrastructure existante.



Pourquoi GitHub Actions pour Go ?



  • Gratuit pour les dépôts publics — jusqu'à 2000 minutes de builds par mois gratuitement
  • Support Go intégré — actions officielles pour configurer l'environnement
  • Flexibilité — possibilité d'exécuter sur Ubuntu, Windows, macOS
  • Mise en cache — accélération des builds grâce au cache des Go modules
  • Tests matriciels — exécution parallèle sur différentes versions de Go


Création d'un pipeline CI/CD de base



Commençons par créer un workflow simple qui s'exécutera à chaque push dans le dépôt. Pour cela, il faut créer un fichier .github/workflows/go.yml à la racine de votre projet.



Exemple de workflow de base



name: Go CI/CD

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

jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.21', '1.22' ]

steps: - uses: actions/checkout@v4

- name: Setup Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }}

- name: Cache Go modules uses: actions/cache@v3 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: Build run: go build -v ./...

- name: Test run: go test -v -race -coverprofile=coverage.txt ./...

- name: Upload coverage uses: codecov/codecov-action@v3 with: file: ./coverage.txt flags: unittests


Ce workflow effectue les actions suivantes :

  • Se déclenche lors d'un push sur main/develop ou lors de la création d'une pull request
  • Teste sur deux versions de Go (1.21 et 1.22)
  • Met en cache les modules pour accélérer les builds suivants
  • Build le projet et exécute les tests avec les flags -race (détecteur de race conditions) et -cover (couverture de code)
  • Télécharge le rapport de couverture vers Codecov


Paramètres avancés : linting et sécurité



Pour un projet Go professionnel, il ne suffit pas de builder et de tester le code. Ajoutons l'analyse statique et la vérification de la sécurité.



Ajout du linting avec golangci-lint



- name: Lint  uses: golangci/golangci-lint-action@v3  with:    version: latest    args: --timeout=5m --out-format=colored-line-number    skip-pkg-cache: true


golangci-lint combine des dizaines de linters (govet, staticcheck, errcheck et autres) et produit un rapport unifié. Cela aide à détecter les erreurs potentielles, le code inutilisé et les problèmes de style.



Vérification de la sécurité avec govulncheck



- name: Check vulnerabilities  run: |    go install golang.org/x/vuln/cmd/govulncheck@latest    govulncheck ./...


L'utilitaire govulncheck analyse les dépendances du projet pour détecter les vulnérabilités connues issues de la base de données Go Vulnerability Database. C'est une étape critique

Blogs

Book Recommendations