La Livraison Continue (CD) automatise le déploiement de nouvelles versions de logiciels, améliorant la productivité et réduisant le temps de mise en ligne. Cet article vous montre comment configurer un pipeline de livraison continue auto-hébergé sur un VPS avec GitHub Actions. Vous découvrirez ainsi les bases de plateformes comme Netlify et Vercel, qui offrent des services similaires gratuitement.
Qu'est-ce que la Livraison Continue (CD) ?
La livraison continue automatise le déploiement des nouvelles versions logicielles après validation des tests. Elle permet des mises à jour fréquentes, réduit les temps d'interruption et améliore la fiabilité des déploiements.
GitHub Actions : Qu'est-ce que c'est ?
GitHub Actions est une plateforme pour automatiser les processus de build et de déploiement. Vous pouvez définir des workflows pour déclencher des déploiements automatiques ou manuels dans vos dépôts GitHub. Nous utiliserons GitHub Actions pour configurer un pipeline de livraison continue sur un serveur auto-hébergé.
Qu'est-ce qu'un Self-Hosted Runner ?
Un self-hosted runner est une machine que vous gérez pour exécuter des tâches de GitHub Actions. Contrairement aux runners GitHub standardisés, les runners auto-hébergés offrent un contrôle total sur le matériel, le système d'exploitation et les outils logiciels.
Prérequis pour un Pipeline de Livraison Continue Auto-Hébergé
Pour configurer un pipeline avec un runner auto-hébergé, vous aurez besoin :
- D'un projet : Votre code source à déployer.
- D'un dépôt de code (ex. GitHub) : Pour gérer les pull requests et configurer les workflows.
- D'un serveur (VPS) : Pour héberger le runner et exécuter les tâches de déploiement.
Mise en Place de la Livraison Continue (CD)
Passons à la pratique : nous allons configurer la livraison continue pour déployer automatiquement votre projet à chaque modification. Voici comment configurer votre dépôt GitHub et définir les variables d'environnement nécessaires.
Configuration du Dépôt
- Créer un Dépôt GitHub :
- Connectez-vous à GitHub.
- Cliquez sur New Repository pour créer un nouveau dépôt.
- Clonez le dépôt sur votre machine locale ou poussez votre projet existant.
Exemple de dépôt utilisé : mindev-site, un projet Astro.
- Pousser les Modifications :
Ajouter les modifications :
git add .
Valider les changements :
git commit -m "Initial commit"
Pousser vers GitHub :
git push origin main
Ajout des Variables d’Environnement (ENV)
Pour que votre pipeline de livraison continue fonctionne correctement, vous devez définir des variables d'environnement dans GitHub. Ces variables contiennent des informations sensibles comme des clés API ou des tokens.
- Accéder aux Variables d’Environnement :
- Allez dans l'onglet Settings de votre dépôt.
- Sous la section Actions, cliquez sur Secrets and variables puis sur New Repository Secret.
- Ajouter une Variable :
- Name : Nom de la variable (ex. API_KEY).
- Secret : Valeur de la variable (ex. votre clé API).
- Vous pouvez modifier les variables en cliquant sur l'icône en forme de crayon à côté du secret.
Exemples de Secrets à Ajouter
- API_KEY : Clé d'API pour un service tiers.
- SSH_PRIVATE_KEY : Clé SSH privée pour accéder à votre serveur.
- DATABASE_URL : URL de connexion à la base de données.
Ces secrets permettent au pipeline d’interagir de manière sécurisée avec des ressources externes.
Configuration de notre VPS
Si vous venez d'acquérir un VPS (serveur privé virtuel), il est crucial de le configurer correctement pour garantir la sécurité et installer les outils nécessaires à vos applications. Voici les étapes générales :
- Sécuriser l'accès SSH.
- Installer un pare-feu (comme ufw).
- Gérer les utilisateurs et les droits d'accès.
Pour des instructions détaillées, consultez des ressources sur Comment bien configurer un VPS.
Si vous avez besoin d’installer un serveur web comme NGINX, suivez ce guide : Installer NGINX sur un VPS.
Configuration d'un Self-Hosted Runner
Nous allons configurer votre VPS pour qu'il serve de runner auto-hébergé pour GitHub Actions. Ce runner exécutera les pipelines de livraison continue définis dans votre dépôt GitHub, vous offrant ainsi un contrôle total sur l'environnement de déploiement.
Étapes pour configurer un runner auto-hébergé :
- Accédez à votre dépôt GitHub :
- Ouvrez le dépôt pour lequel vous souhaitez configurer un pipeline de livraison continue.
- Accédez aux Paramètres :
- Cliquez sur l'onglet Settings de votre dépôt.
- Configurer le Self-Hosted Runner :
- Allez dans la section Actions.
- Cliquez sur Runners, puis sur New self-hosted runner..
Pour exécuter la commande correcte sur votre VPS, vous devez connaître les détails de sa configuration, notamment son architecture (x86_64 ou ARM).
Vérifier l'Architecture de Votre VPS
- Ouvrez votre terminal.
Exécutez la commande suivante pour connaître l'architecture de votre machine :
uname -m
Cette commande vous indiquera si votre VPS utilise une architecture x86_64 ou ARM, ce qui est crucial pour choisir la commande appropriée.
Exécution ces commandes sur votre VPS
Connectez-vous à votre VPS via SSH et exécutez les commandes suivantes, une par une, pour configurer le self-hosted runner.
Créer un dossier pour le runner :
mkdir actions-runner && cd actions-runner
Cette commande crée un dossier nommé actions-runner et vous positionne dans ce dossier, où nous allons installer le runner.
Télécharger le package du runner :
curl -o actions-runner-linux-x64-2.319.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.319.1/actions-runner-linux-x64-2.319.1.tar.gz
- Cela télécharge la dernière version du package GitHub Actions Runner.
Vérifier l'intégrité du fichier (facultatif) :
echo [votre_hash_ici] | shasum -a 256 -c
- Cette commande permet de vérifier l'intégrité du fichier téléchargé en comparant son hash. Remplacez [votre_hash_ici] par le hash fourni sur la page de téléchargement.
Extraire le package :
tar xzf ./actions-runner-linux-x64-2.319.1.tar.gz
- Cette commande extrait le contenu du fichier tar.gz, qui contient les fichiers nécessaires pour configurer et exécuter le runner.
Configurer le runner :
./config.sh --url https://github.com/afdevs/mindev-site --token [votre_token_ici]
- Cela configure le runner en le liant à votre dépôt GitHub. Remplacez [votre_token_ici] par le token généré lors de la configuration du self-hosted runner sur GitHub. Assurez-vous que l'URL du dépôt est correcte.
Démarrer le runner :
./run.sh
- Cette commande démarre le runner, qui sera désormais prêt à exécuter les workflows de GitHub Actions liés à votre dépôt.
Vérification du Fonctionnement du Runner
Pour vérifier que le runner est correctement configuré et prêt à exécuter vos workflows, suivez ces étapes :
- Accédez à votre dépôt GitHub.
- Cliquez sur l'onglet Settings.
- Allez dans Actions > Runners.
- Idle : Le runner est prêt et attend un job.
- Offline : Le runner est hors ligne, soit parce qu'il a été arrêté manuellement, soit à cause d'un problème de connexion.
Si vous arrêtez le runner en appuyant sur Ctrl + C dans le terminal, le statut passera de "idle" à "offline" après un rafraîchissement de la page GitHub.
Exécution du Runner en Arrière-Plan
Pour faire fonctionner le runner en arrière-plan, utilisez le script svc.sh fourni dans le répertoire actions-runner. Ce script vous permet de gérer le runner comme un service, ce qui est préférable pour maintenir le runner actif sans monopoliser le terminal.
Vérifier le statut du service :
sudo ./svc.sh status
Installer le service :
sudo ./svc.sh install
Démarrer le service :
sudo ./svc.sh start
Pour arrêter le service :
sudo ./svc.sh stop
Vérification du Statut du Runner
Après avoir configuré le runner, actualisez la page Runners dans l'onglet Settings de votre dépôt GitHub. Le statut de votre runner devrait être "idle", à moins qu'il ne soit arrêté. Cela signifie que tout est prêt pour la suite !
Création d'un Workflow
Voici les étapes pour créer un workflow :
- Allez dans l'onglet Actions de votre dépôt GitHub.
- Cherchez "node" dans la barre de recherche pour trouver les actions liées à Node.js.
- Cliquez sur Set up this workflow pour configurer votre workflow personnalisé.
Configuration du Workflow
Une fois que vous avez créé votre workflow, vous devrez le personnaliser pour répondre à vos besoins spécifiques. Voici les trois éléments essentiels à configurer :
- runs-on: self-hosted : Ajoutez cette ligne pour spécifier que le workflow doit s'exécuter sur votre runner auto-hébergé.
- node-version : Indiquez la version de Node.js installée sur votre machine.
- env : Définissez les variables d'environnement nécessaires à l'exécution de votre workflow.
Pour approfondir la configuration de votre workflow et explorer les options avancées, consultez la documentation GitHub sur les workflows.
Une fois que vous avez terminé vos configurations, n'oubliez pas de cliquer sur "Commit changes" pour enregistrer et appliquer vos modifications.
Si vous retournez dans l'onglet Actions, vous devriez voir votre pipeline démarrer. Avec un peu de chance, le pipeline s'exécutera correctement.
Cependant, si des erreurs apparaissent, comme c'est le cas pour moi où le pipeline a échoué parce que npm cherchait un fichier package-lock.json qui n'existe pas (car j'utilise pnpm), il est nécessaire d'ajuster certaines configurations dans votre workflow. Dans ce cas, vous devrez spécifier l'utilisation de pnpm au lieu de npm pour résoudre ce problème.
Voici le contenu de mon fichier de configuration du workflow :
Accédez au répertoire de votre application sur votre VPS en utilisant la commande suivante :
cd actions-runner/work/[votre_app]/[votre_app]
Ensuite, lancez votre projet avec la commande appropriée. Personnellement, j'utilise PM2 pour gérer les processus. Voici la commande que j'utilise pour démarrer mon projet :
pm2 start pnpm --name "mindev" -- preview --watch
En entrant l'adresse IP de votre VPS suivie du port de l'application dans votre navigateur, vous devriez pouvoir accéder à votre application. Pour ma part, j'ai configuré un reverse proxy pour le sous-domaine mindev.tech. En visitant cette URL, vous serez redirigé vers mon application.
Pour finaliser, ajoutez les deux dernières commandes dans le workflow pour redémarrer le projet à chaque push et garantir que les dernières modifications sont prises en compte :
- name: Navigate to the project directory
run: cd /home/afdev/actions-runner/_work/mindev-site/mindev-site
- name: Restart the project with PM2
run: pm2 restart mindev
Et voilà, tout devrait maintenant fonctionner correctement !
Conclusion
Mettre en place un système de CI/CD est essentiel pour optimiser vos processus de développement. Comme nous l'avons vu dans cet article, la création d'un pipeline CI/CD de base est relativement simple. En suivant les six étapes décrites, vous obtiendrez un système CI/CD fonctionnel et prêt à l'emploi.
Ce que nous avons abordé ici constitue une approche fondamentale, mais elle vous offre une excellente base pour explorer des configurations plus avancées, telles que l'intégration avec Docker ou d'autres outils sophistiqués.
Pour approfondir vos connaissances, voici quelques liens utiles :