CI/CD pour les projets Go : GitHub Actions de A à Z

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

CI/CD pour les projets Go : GitHub Actions de A à Z

\n\n

Dans le développement logiciel moderne, l'automatisation des processus de compilation, de test et de déploiement (CI/CD) est devenue non seulement une commodité, mais une nécessité. Pour les projets Go (Golang), l'utilisation de GitHub Actions est l'un des moyens les plus simples et les plus efficaces d'organiser l'intégration et la livraison continues. Dans cet article, nous allons parcourir le cycle complet de configuration d'un pipeline CI/CD pour les applications Go, depuis la configuration de base jusqu'au déploiement automatique.

\n\n

Qu'est-ce que GitHub Actions et pourquoi est-ce important pour Go ?

\n\n

GitHub Actions est une plateforme intégrée pour l'automatisation des workflows dans les dépôts GitHub. Elle permet de créer des pipelines qui se déclenchent sur des événements spécifiques : push vers une branche, création d'une pull request, publication d'une release, etc.

\n\n

Pour les projets Go, GitHub Actions offre plusieurs avantages clés :

\n
    \n
  • Compilation rapide — Go compile très rapidement, ce qui réduit le temps d'exécution du pipeline.
  • \n
  • Liaison statique — Les binaires Go ne nécessitent pas de dépendances externes, ce qui simplifie le déploiement.
  • \n
  • Tests intégrés — L'utilitaire go test s'intègre parfaitement avec les systèmes CI.
  • \n
  • Multiplateforme — Il est facile de compiler des binaires pour différents systèmes d'exploitation et architectures.
  • \n
\n\n

Configuration d'un pipeline CI de base

\n\n

Commençons par créer un workflow simple qui exécutera les tests et vérifiera la conformité du code aux standards Go. Pour cela, à la racine de votre dépôt, créez un répertoire .github/workflows et un fichier ci.yml.

\n\n

Exemple de configuration de base :

\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

Ce workflow effectue les étapes suivantes :

\n
    \n
  • Clone le dépôt.
  • \n
  • Installe Go version 1.22.
  • \n
  • Met en cache les modules pour accélérer les exécutions suivantes.
  • \n
  • Télécharge les dépendances via go mod download.
  • \n
  • Exécute go vet pour l'analyse statique.
  • \n
  • Effectue les tests avec le flag -race pour détecter les conditions de course.
  • \n
  • Compile le fichier binaire.
  • \n
\n\n

Configuration avancée : compilation multiplateforme et linters

\n\n

Go permet de compiler facilement des applications pour différentes plateformes. Ajoutons au pipeline une matrice de compilation (build matrix) et l'exécution du linter golangci-lint.

\n\n

Fichier ci.yml mis à jour :

\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