Nouveau : Datasets open source gratuits disponibles !Decouvrir →
⚙️
Intermediaire 25 min GitHub Actions

Migrer de Jenkins vers GitHub Actions

Migrer de Jenkins vers GitHub Actions

Pourquoi Migrer de Jenkins vers GitHub Actions ?

La transition de Jenkins vers GitHub Actions peut offrir plusieurs avantages, notamment :

  1. Intégration Native : GitHub Actions est intégré au workflow de développement quotidien sur GitHub, ce qui augmente la productivité et la connectivité.
  2. Simplicité et Rapidité : Avec GitHub Actions, le processus de configuration et d'exécution des pipelines devient plus simple et rapide.
  3. Coût Économique : GitHub Actions est gratuit pour les projets open source, ce qui peut aider à réduire les coûts associés aux systèmes CI/CD traditionnels comme Jenkins.

Prerequis

  • Connaissances Nécessaires :

    • Connaissance de base en programmation et développement.
    • Familiarité avec les terminologies Git et GitHub.
    • Un projet existant ou un nouveau projet à développer sur GitHub.
  • Outils à Installer :

    • Git : Pour versionner le code et intégrer à GitHub.
    • Node.js (pour des projets JavaScript/TypeScript) : Version recommandée >= 14.0.0
    • Python (pour des projets Python) : Version recommandée >= 3.8.0

Concepts Fondamentaux

Actions

Définition : Une action est le plus petit élément d'un workflow. Elle peut être une tâche simple, comme exécuter un script shell, ou elle peut être une collection de plusieurs actions. Schema Mental :

- Action 1: Exécuter un script bash
- Action 2: Installer des dépendances

Code Fonctionnel :

## Exécution d'un script bash
- name: Run a one-line script
  run: echo "Hello, world!"

## Installation de dépendances (Node.js)
- name: Install dependencies
  uses: actions/setup-node@v2
  with:
    node-version: '14'

Triggers

Définition : Un trigger détermine quand un workflow doit être exécuté. Par exemple, il peut être déclenché par une push dans le dépôt ou par une création de pull request. Schema Mental :

- Trigger 1: Exécuter le pipeline lors d'une push sur la branche main

Code Fonctionnel :

## Déclenchement du workflow sur une push dans la branche main
on:
  push:
    branches: [ main ]

Job

Définition : Un job est un ensemble d'actions qui s'exécutent dans le même environnement. Par exemple, vous pouvez avoir des jobs pour le build, les tests et le déploiement. Schema Mental :

- Job 1: Build l'application
- Job 2: Exécute les tests

Code Fonctionnel :

## Définition d'un job pour le build de l'application
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Build the application
        run: npm install && npm run build

Mise en Pratique : Projet Fil Rouge

Mini-Projet Réaliste

Nous allons créer un gestionnaire de tâches simple avec des fonctionnalités de création, lecture et suppression de tâches. Le projet sera basé sur Node.js et Express.

Étape 1 : Initialiser le Projet

mkdir task-manager
cd task-manager
npm init -y

Étape 2 : Installer les Dépendances

npm install express body-parser

Étape 3 : Créer le Code Source

Créez un fichier app.js avec le code suivant :

// app.js
const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const port = process.env.PORT || 3000;

app.use(bodyParser.json());

let tasks = [];

app.get('/tasks', (req, res) => {
  res.json(tasks);
});

app.post('/tasks', (req, res) => {
  const task = req.body;
  tasks.push(task);
  res.status(201).json(task);
});

app.delete('/tasks/:id', (req, res) => {
  const taskId = parseInt(req.params.id);
  tasks = tasks.filter(task => task.id !== taskId);
  res.sendStatus(204);
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

Étape 4 : Créer le Workflow GitHub Actions

Créez un fichier .github/workflows/nodejs.yml avec le code suivant :

## .github/workflows/nodejs.yml
name: Node.js CI

on:
  push:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

      - name: Build project
        run: npm run build

Étape 5 : Ajouter les Scripts dans package.json

{
  "name": "task-manager",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.20.1",
    "express": "^4.18.2"
  }
}

Étape 6 : Exécuter le Workflow

  • Commitez et poussez vos modifications sur GitHub.
  • Allez dans l'onglet Actions de votre dépôt GitHub pour suivre la progression du workflow.

Erreurs Frequentes et Debugging

Erreur 1 : Le build échoue avec une erreur de Node.js

Code Incorrect :

## .github/workflows/nodejs.yml
- name: Set up Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '14'

Code Correct :

## .github/workflows/nodejs.yml
- name: Set up Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '14.x'

Erreur 2 : Les tests ne sont pas exécutés

Code Incorrect :

## .github/workflows/nodejs.yml
- name: Run tests
  run: npm test

Code Correct :

## .github/workflows/nodejs.yml
- name: Install dependencies
  run: npm install

- name: Run tests
  run: npm test

Erreur 3 : Le serveur ne démarre pas correctement

Code Incorrect :

// app.js
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

Code Correct :

// app.js
const server = app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}/`);
});

process.on('SIGTERM', () => {
  server.close(() => {
    process.exit(0);
  });
});

Pour Aller Plus loin

  1. Migrer des Tâches Complexes : Découvrez comment migrer des tâches complexes, comme le déploiement sur des serveurs et la gestion de la production.
  2. Utiliser les Secrets : Apprenez à utiliser les secrets pour stocker des informations sensibles, comme les clés API ou les mots de passe.
  3. Intégration avec d'autres Services : Explorez comment intégrer GitHub Actions avec d'autres services tels que Docker, Kubernetes et AWS.

Défi Pratique

  1. Développer une Application API Simple : Créez une application API simple en utilisant Express.js ou FastAPI, puis configurez un workflow GitHub Actions pour la construction et les tests automatiques.

Besoin d'aide sur GitHub Actions ?

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

Recevoir des conseils

Questions frequentes

Quelle est la première étape pour migrer mon projet Jenkins vers GitHub Actions ?
La première étape consiste à créer un fichier de configuration GitHub Actions (yml) dans le répertoire .github/workflows de votre dépôt GitHub. Ce fichier définit les travaux et les étapes qui doivent être exécutées.
Est-ce que Jenkins et GitHub Actions sont compatibles avec tous types de projets ?
La plupart des types de projets sont compatibles, mais il peut y avoir des différences dans la façon dont les tâches spécifiques sont implémentées. Par exemple, certains plugins Jenkins peuvent ne pas être directement disponibles dans GitHub Actions.
Quelle est la configuration recommandée pour un projet Java avec Maven ?
Pour un projet Java avec Maven, vous pouvez configurer un workflow GitHub Actions qui utilise une image de base comme `openjdk` et exécute les commandes maven telles que `mvn clean install`. Assurez-vous d'inclure des étapes pour installer les dépendances et exécuter les tests.

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.