CI/CD pour projets Go avec GitHub Actions : guide complet
L'automatisation des processus de compilation, de test et de déploiement est une partie essentielle du développement moderne en Go (Golang). GitHub Actions fournit une boîte à outils puissante et flexible pour construire des pipelines CI/CD directement dans votre dépôt. Dans cet article, nous allons voir comment configurer un cycle complet d'intégration et de livraison continues pour un projet Go, des tests simples au déploiement automatique.
Qu'est-ce que CI/CD et pourquoi est-ce important pour Go ?
CI (Continuous Integration) est la pratique de fusionner fréquemment le code dans la branche principale avec compilation et tests automatiques. CD (Continuous Delivery/Deployment) est le déploiement automatique de l'application prête.
Pour les projets Go, CI/CD est particulièrement utile car :
- Go compile en un binaire statique, ce qui simplifie le déploiement
- Tests rapides grâce à la vitesse native de Go
- Vérification automatique par des linters et du formatage (
gofmt,golangci-lint) - Possibilité de compilation multiplateforme (Linux, macOS, Windows)
Bases de GitHub Actions pour Go
GitHub Actions utilise des fichiers YAML dans le répertoire .github/workflows. Chaque fichier décrit un ou plusieurs workflows (pipelines).
Examinons un workflow de base pour un projet Go :
name: Go CI
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Cache Go modules uses: actions/cache@v4 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: Run tests run: go test -v -race -coverprofile=coverage.out ./... - name: Upload coverage uses: actions/upload-artifact@v4 with: name: coverage path: coverage.outCe workflow s'exécute lors d'un push sur main/develop et sur une pull request. Il installe Go, met en cache les dépendances, lance les tests avec les flags -race (détecteur de concurrence) et -coverprofile (couverture de code).
Configurations avancées : linters et compilation multiplateforme
Pour maintenir la qualité du code, ajoutons une vérification par linter. golangci-lint est la norme de facto pour Go.
lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: golangci-lint uses: golangci/golangci-lint-action@v6 with: version: latest args: --timeout=5m ./...La compilation multiplateforme est utile si votre application doit fonctionner sur différents OS :
build: needs: [test, lint] strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] goarch: [amd64, arm64] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Build run: | GOARCH=${{ matrix.goarch }} go build -v -o myapp-${{ matrix.os }}-${{ matrix.goarch }} ./cmd/appNote : pour Windows, il faudra ajuster le nom du fichier de sortie (ajouter .exe). Utilisez if runner.os == 'Windows' ou définissez le nom via des variables.
Déploiement automatique d'une application Go
Pour le déploiement, examinons deux scénarios populaires : publication d'une image Docker et téléchargement du binaire sur un serveur.
Blogs
Book Recommendations
Lire aussi
Outils du développeur TypeScript : de l'IDE aux linters et formateurs
Principes SOLID en Swift : théorie et pratique pour iOS/macOS
Immutable vs const en Rust : quelle est la différence ? Guide 2025
Introduction à C# 2025 : par où commencer pour un débutant complet
Programmation fonctionnelle en Kotlin : de A à Z — guide complet
Blogs
Book Recommendations
Lire aussi
Principes SOLID en Swift : théorie et pratique pour iOS/macOS