Introduction : Pourquoi CI/CD est important pour les projets Go
Le développement moderne en Go (Golang) nécessite non seulement d'écrire un code propre et efficace, mais aussi de configurer des processus qui automatisent la vérification, la construction et la livraison des applications. CI/CD (Continuous Integration / Continuous Delivery) est un ensemble de pratiques permettant de livrer rapidement et en toute sécurité des changements en production. Pour les développeurs Go, GitHub Actions est devenu l'un des outils les plus populaires grâce à son intégration étroite avec les dépôts et sa simplicité de configuration.
Dans cet article, nous allons voir comment créer un pipeline CI/CD complet pour un projet Go en utilisant GitHub Actions. Vous apprendrez à automatiser les tests, la construction de fichiers binaires et le déploiement sur un serveur. Tous les exemples seront en Go (Golang) avec des étapes pratiques.
1. Bases de GitHub Actions pour Go
GitHub Actions est un système d'automatisation de workflows intégré. Chaque workflow est un fichier YAML qui décrit les étapes de construction, de test et de déploiement. Pour les projets Go, un pipeline minimal inclut :
- L'installation de Go
- La mise en cache des dépendances
- L'exécution des tests
- La construction de l'application
Structure du fichier workflow
Créez à la racine du dépôt le répertoire .github/workflows/ et le fichier ci.yml. Voici une configuration de base pour Go :
name: CI pour projet Go
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4
- name: Installation de Go uses: actions/setup-go@v5 with: go-version: '1.22'
- name: Mise en cache des modules uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-
- name: Téléchargement des dépendances run: go mod download
- name: Linting du code run: go vet ./...
- name: Exécution des tests run: go test -v -race -coverprofile=coverage.out ./...
- name: Construction du fichier binaire run: go build -o myapp ./cmd/main.goCe workflow s'exécute lors d'un push sur main ou develop, ainsi que lors de la création d'une pull request. Il vérifie le code pour les erreurs, exécute les tests avec le flag race (détecteur de data races) et construit le binaire.
2. Pipeline avancé : tests et qualité du code
Une vérification de base est bonne, mais pour un projet Go sérieux, il en faut plus. Ajoutons l'analyse statique et la vérification de la couverture de code.
Ajout de golangci-lint
golangci-lint est un agrégateur de linters qui inclut go vet, errcheck, staticcheck et d'autres. Ajoutons-le au workflow :
- name: Installation de golangci-lint uses: golangci/golangci-lint-action@v4 with: version: latest
- name: Exécution du linter run: golangci-lint run ./...Rapport de couverture de code
La couverture de tests est une métrique de qualité importante. GitHub Actions peut générer des rapports et même bloquer les PR en cas de faible couverture :
- name: Génération du rapport de couverture run: go test -coverprofile=coverage.out -covermode=atomic ./...
- name: Vérification de la couverture minimale 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 couverture du code est inférieure à 70%" exit 1 fiMaintenant, le workflow échouera si la couverture des tests tombe en dessous de 70%. C'est une excellente pratique pour maintenir la qualité d'un projet Go.
3. Construction et publication d'une image Docker
Les applications Go sont souvent déployées sous forme de conteneurs Docker. GitHub Actions permet d'aut