Introduction à Github actions
Github actions permet d’automatiser les étapes de construction, de test, et de déploiement d’une application. L’ensemble du processus est défini dans un fichier .yml du dossier .github/workflows à la racine du dépôt.
Ce fichier contient les différentes étapes (jobs) que le pipeline suivra pour exécuter les commandes définies à chaque modification du code.
name: CI-CD
on: [push]
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Install dependencies
run: npm install
- name: Cache node_modules
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
test:
runs-on: ubuntu-latest
needs: install
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Restore node_modules cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
- name: Run tests
run: npm run test
build:
runs-on: ubuntu-latest
needs: install
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Restore node_modules cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
- name: Build project
run: npm run build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: build
path: dist/
retention-days: 1Configuration de la pipeline
name: CI-CD
on: [push]La première ligne indique uniquement le nom de la pipeline.
La deuxième ligne indique les conditions de déclenchement de la pipeline.
Techniquement il est possible de déclencher une pipeline uniquement sur certains typologie de branches.
Jobs
Les étapes de la pipeline sont définies sous la clé jobs
install
Dans ce job on va simplement installer les dépendances.
install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Install dependencies
run: npm installOn peut les mettres dans un cache en utilisant l’action action/cache@v4. Celà nous servira à réutiliser le cache dans les jobs suivants.
- name: Cache node_modules
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}test
Ce job est dépendant du job d’install précédent donc il faut le mentionner:
test:
runs-on: ubuntu-latest
needs: install
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Restore node_modules cache # <----- Ici on récupère le cache du job précédent
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }} # en définissant la clé de cache
- name: Run tests # et enfin on lance les tests
run: npm run testbuild
Dans ce job on va build le projet et l’upload pour qu’il soit disponible:
build:
runs-on: ubuntu-latest
needs: install
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Restore node_modules cache
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
- name: Build project
run: npm run build
- name: Upload artifacts
uses: actions/upload-artifact@v4 # <--- ici on upload les artéfacts de build
with:
name: build
path: dist/
retention-days: 1