Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐹
Intermediaire 25 min Go

CI/CD pour Go avec GitHub Actions

Pourquoi CI/CD pour Go avec GitHub Actions ?

La continuité d'intégration et du déploiement (CI/CD) est essentielle dans le développement logiciel moderne, surtout pour les langages de programmation comme Go qui sont connus pour leur efficacité et leur rapidité. Avec GitHub Actions, un outil puissant et facile à utiliser, la mise en œuvre d'un pipeline CI/CD peut être réalisée directement depuis votre dépôt Git sur GitHub.

Un cas concret d'utilisation de la CI/CD avec Go est lorsque vous travaillez sur une application web qui nécessite des tests unitaires, des tests d'intégration et un déploiement continu sur différents environnements (développement, test, production). La CI/CD automatisera ces tâches, assurant que votre code est toujours en état de fonctionner et prêt à être déployé.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Un compte GitHub
  • Connaissance de base de Go (version 1.16 ou ultérieure recommandée)
  • La version go installée sur votre machine (go version)
  • La ligne de commande git

Concepts fondamentaux

Pipeline et Workflow

Un pipeline est une séquence d'étapes logicielles qui définissent comment le code source est transformé en un produit final, comme une application déployée. Un workflow est une collection de pipelines.

## .github/workflows/go.yml
name: CI/CD for Go

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: '1.16'

Actions et Steps

Dans un workflow, les étapes (steps) sont des actions spécifiques qui s'exécutent dans l'ordre. Chaque étape peut exécuter une commande shell ou utiliser une action préconçue.

      - name: Run tests
        run: go test ./...

Variables d'environnement

Les variables d'environnement peuvent être définies pour les actions et les étapes.

      - name: Set environment variable
        run: echo "MY_ENV_VAR=value" >> $GITHUB_ENV

Mise en pratique : projet fil rouge

Nous allons créer un simple gestionnaire de tâches en Go. Ce projet comprendra des tests unitaires et une étape de déploiement sur GitHub Pages.

Étape 1 : Initialisation du projet

mkdir task-manager
cd task-manager
go mod init task-manager

Créez un fichier main.go :

// main.go
package main

import (
	"fmt"
)

type Task struct {
	ID   int
	Name string
}

func (t *Task) Complete() {
	fmt.Printf("Task %d: %s completed\n", t.ID, t.Name)
}

func main() {
	task := &Task{ID: 1, Name: "Write documentation"}
	task.Complete()
}

Étape 2 : Ajout des tests unitaires

Créez un fichier task_test.go :

// task_test.go
package main

import (
	"testing"
)

func TestComplete(t *testing.T) {
	task := &Task{ID: 1, Name: "Write documentation"}
	task.Complete()

	if got := fmt.Sprintf("%s", task); got != "Task 1: Write documentation completed" {
		t.Errorf("Expected 'Task 1: Write documentation completed', but got '%s'", got)
	}
}

Étape 3 : Création du fichier go.yml pour GitHub Actions

## .github/workflows/go.yml
name: CI/CD for Go

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: '1.16'
      
      - name: Run tests
        run: go test ./...

Étape 4 : Déploiement sur GitHub Pages

Ajoutez une étape de déploiement sur GitHub Pages :

      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: $secrets.GITHUB_TOKEN
          publish_dir: ./docs

Créez un fichier index.html dans le répertoire docs :

<!-- docs/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Task Manager</title>
</head>
<body>
  <h1>Welcome to Task Manager</h1>
</body>
</html>

Étape 5 : Commit et push

git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/your-username/task-manager.git
git push -u origin main

Erreurs frequentes et debugging

  1. Erreur : go test: no packages named 'task_manager' in current directory

    # ❌ Mauvais
    go test ./...
    
    # ✅ Correct
    go test ./...
    
  2. Erreur : actions/checkout@v2: Resource not accessible by token.

    # ❌ Mauvais
    uses: actions/checkout@v2
    
    # ✅ Correct
    uses: actions/checkout@v2
    
  3. Erreur : actions/setup-go@v2: The Go version '1.16' is not available.

    # ❌ Mauvais
    with:
      go-version: '1.16'
    
    # ✅ Correct
    with:
      go-version: '1.16'
    

Pour aller plus loin

1. Utilisation de Go Modules pour la gestion des dépendances

L'utilisation de Go Modules permet de gérer les dépendances de manière transparente.

## .github/workflows/go.yml
- name: Install dependencies
  run: go mod tidy

2. Configuration du déploiement sur une infrastructure cloud (AWS, Google Cloud, Azure)

La mise en œuvre du déploiement continu vers une infrastructure cloud peut être réalisée avec des actions spécifiques à chaque fournisseur.

## .github/workflows/deploy-aws.yml
name: Deploy to AWS

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      
      # Autres étapes pour configurer et déployer sur AWS

3. Utilisation de l'actions cache pour accélérer le build

L'utilisation du cache des actions permet d'accélérer le processus de build en stockant les dépendances et les outils nécessaires.

## .github/workflows/go.yml
- name: Set up Go cache
  uses: actions/cache@v2
  with:
    path: ~/.cache/go-build
    key: $runner.os-go-$hashFiles('**/go.mod')

Défi pratique

Développer une API de blog en utilisant les concepts vus dans ce tutoriel, avec des tests unitaires et des étapes de déploiement sur GitHub Pages.

Besoin d'aide sur Go ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment configurer GitHub Actions pour un projet Go?
Pour configurer GitHub Actions sur votre projet Go, créez un fichier .github/workflows/main.yml et ajoutez-y des étapes qui définissent le processus de construction et de tests de votre application Go.
Quels sont les avantages d'utiliser GitHub Actions pour le CI/CD en Go?
GitHub Actions offre une plateforme simple et sécurisée pour les pipelines CI/CD. Elle permet une exécution rapide des tâches, un suivi des builds et la mise en place automatique des déploiements.
Comment puis-je déployer mon application Go sur un serveur distant avec GitHub Actions?
Pour déployer votre application Go sur un serveur distant, vous pouvez utiliser des étapes de script dans votre workflow GitHub Actions pour transférer les fichiers binaires générés par la construction et exécuter les commandes nécessaires pour démarrer votre service.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.