Dans le développement logiciel moderne, un pipeline CI/CD bien conçu est essentiel pour assurer un flux de travail fluide, réduire les erreurs humaines et accélérer les cycles de développement. GitHub Actions est un outil puissant qui permet d’automatiser ce pipeline de manière transparente, directement dans votre dépôt GitHub. Dans cet article, nous allons explorer comment utiliser GitHub Actions pour créer un pipeline CI/CD complet, du test à la mise en production.
1. Qu’est-ce que GitHub Actions ?
GitHub Actions est un outil d’automatisation qui vous permet de définir des workflows d’intégration et de livraison continue pour vos projets directement dans GitHub. Un workflow est une définition d’une série d’actions à réaliser sur des événements spécifiques du dépôt, comme un push ou une pull request.
Les workflows sont écrits en YAML, un langage simple et lisible. Les actions sont des unités réutilisables de travail dans un workflow, telles que l’exécution de scripts ou le déploiement d’applications.
Principaux éléments de GitHub Actions :
- Workflow : Un fichier YAML qui décrit les étapes à suivre.
- Job : Un ensemble de tâches exécutées sur un runner. Chaque job peut s’exécuter sur un environnement différent.
- Step : Une action ou un script individuel dans un job.
- Runner : Un serveur qui exécute les jobs. GitHub propose des runners hébergés, mais vous pouvez également utiliser des runners auto-hébergés.
- Event : L’événement qui déclenche un workflow, comme un push, un pull request ou un release.
2. Configurer un Workflow GitHub Actions pour un pipeline CI/CD
L’un des avantages de GitHub Actions est sa simplicité pour automatiser les pipelines. Commençons par configurer un pipeline CI/CD de base.
a. Création d’un fichier de Workflow
Les workflows GitHub Actions sont définis dans le répertoire .github/workflows de votre dépôt. Pour commencer, vous devez créer un fichier YAML dans ce répertoire. Ce fichier décrira les étapes à exécuter, telles que les tests et le déploiement.
Par exemple, créez un fichier .github/workflows/ci-cd-pipeline.yml dans votre dépôt avec le contenu suivant :
yamlCopierModifiername: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
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 application
run: npm run build
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: ./deploy.sh
b. Explication des étapes du fichier YAML :
- on : Cette section définit les événements qui déclencheront le workflow. Ici, le workflow est déclenché à chaque fois qu’il y a un push ou une pull request sur la branche
main. - jobs : Un workflow peut contenir plusieurs jobs. Chaque job est exécuté dans un environnement spécifique. Ici, nous avons un job appelé
build, qui sera exécuté sur un runner Ubuntu. - steps : Chaque job contient des étapes. Les étapes sont des actions ou des commandes exécutées dans l’ordre. Dans ce workflow, nous avons les étapes suivantes :
- Checkout code : Utilisation de l’action officielle
actions/checkoutpour récupérer le code du dépôt. - Set up Node.js : Utilisation de l’action
actions/setup-nodepour configurer l’environnement Node.js. - Install dependencies : Exécution de
npm installpour installer les dépendances. - Run tests : Exécution de tests avec
npm test. - Build application : Construction de l’application avec
npm run build. - Deploy to production : Cette étape de déploiement est conditionnelle, elle ne s’exécute que si la branche est
main. Vous pouvez personnaliser cette étape avec un script de déploiement (par exemple,deploy.sh).
- Checkout code : Utilisation de l’action officielle
c. Déclenchement du Workflow
Le workflow que nous avons défini sera déclenché automatiquement chaque fois qu’un commit est poussé dans la branche main ou lorsqu’une pull request est créée vers cette branche. Vous pouvez personnaliser cela selon les besoins, par exemple, en ajoutant d’autres branches ou en définissant des événements spécifiques.
3. Ajouter des Étapes de Test, Linter et Validation
Un bon pipeline CI/CD ne se limite pas seulement au déploiement. Pour garantir que le code est de qualité et ne casse pas l’application, vous devez ajouter des étapes pour effectuer des tests, du linting, et des validations de votre code avant chaque déploiement.
Voici comment ajouter des étapes de tests et de linting à votre pipeline GitHub Actions :
yamlCopierModifierjobs:
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 linting
run: npm run lint
- name: Run tests
run: npm test
- name: Build application
run: npm run build
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: ./deploy.sh
Dans cet exemple, une étape de linting a été ajoutée avant les tests (npm run lint). Vous pouvez personnaliser ces commandes en fonction de votre projet et des outils que vous utilisez (comme ESLint pour JavaScript, Pylint pour Python, etc.).
4. Déploiement Automatisé avec GitHub Actions
Une fois que vos tests sont réussis, vous pouvez ajouter une étape de déploiement automatique. Il existe de nombreuses façons de déployer votre application, en fonction de votre environnement cible. Voici quelques exemples :
- Déploiement sur AWS : Utilisez l’action GitHub officielle
aws-actions/configure-aws-credentialspour configurer l’accès à AWS et déployer sur des services comme EC2 ou S3. - Déploiement sur Azure : Utilisez l’action
azure/actions/azure-webapps-deploypour déployer sur Azure App Services. - Déploiement sur Heroku : Utilisez l’action
akhileshns/heroku-deploypour déployer sur Heroku.
Voici un exemple d’étape de déploiement sur AWS EC2 :
yamlCopierModifier- name: Deploy to AWS EC2
uses: appleboy/ssh-action@v0.1.1
with:
host: ${{ secrets.AWS_EC2_HOST }}
username: ${{ secrets.AWS_EC2_USER }}
key: ${{ secrets.AWS_EC2_PRIVATE_KEY }}
script: |
cd /path/to/your/project
git pull origin main
docker-compose up -d
Dans cet exemple, l’action ssh-action est utilisée pour se connecter à un serveur EC2 et déployer l’application.
5. Conclusion
Automatiser un pipeline CI/CD avec GitHub Actions permet d’améliorer l’efficacité, la rapidité et la qualité du processus de développement. En utilisant des workflows définis en YAML, vous pouvez facilement configurer des tests automatisés, des étapes de validation, et même un déploiement continu vers différents environnements.
Les avantages de GitHub Actions incluent :
- Une intégration native avec GitHub.
- Un support pour les déploiements multi-cloud.
- Un contrôle total sur les étapes du workflow.
En mettant en place un pipeline CI/CD solide, vous réduisez les erreurs humaines, optimisez votre cycle de développement et offrez une expérience de déploiement plus fluide et plus fiable.

















