paint-brush
Comment créer un pipeline CI/CD à l'aide de GitHub et AWS EC2par@wesleybaxterhuber
1,357 lectures
1,357 lectures

Comment créer un pipeline CI/CD à l'aide de GitHub et AWS EC2

par Wes Huber6m2024/04/30
Read on Terminal Reader

Trop long; Pour lire

Cette technique permet essentiellement à votre serveur EC2 de répondre aux modifications apportées à votre référentiel Github.
featured image - Comment créer un pipeline CI/CD à l'aide de GitHub et AWS EC2
Wes Huber HackerNoon profile picture

Salut tout le monde, aujourd'hui, je souhaite faire un didacticiel sur l'une de mes façons préférées de déployer une API REST rapide, à l'aide de NodeJS/Express, sur un serveur Amazon EC2. Cette technique permet essentiellement à votre serveur EC2 de répondre aux modifications apportées à votre référentiel GitHub.

Tout d'abord, « Bonjour tout le monde »

Créez un nouveau répertoire sur votre machine pour qu'une application NodeJS/Express vive. J'appelle ma rekognition


Ouvrez un terminal et exécutez cette commande pour initialiser un package.json npm init -y


Installer express.js npm i express


Créez un serveur express de base avec un « hello world » sur la route par défaut

 const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });

Testez pour vous assurer que vous voyez « Hello World ! » sur http://localhost:3000/


Bon travail, première étape terminée ! 💪

Ensuite, transférons notre code vers GitHub

Initialisez un dépôt Git dans votre répertoire et effectuez votre premier commit -

 git init git add . git commit -m "First commit"


Créez un référentiel distant sur votre compte GitHub

Ajoutez le nouveau dépôt comme origine et poussez votre branche.

 git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master


Remplacez <REMOTE_REPOSITORY_URL> par le lien vers le dépôt distant que vous venez de créer.


Vous devrez peut-être modifier les paramètres de votre référentiel pour utiliser « master » comme branche par défaut au lieu de « main ».

Après cela, vous pouvez supprimer la branche « principale ».


Étape 2 : terminer ! On cuisine au gaz ⛽️

Passons au cloud - Configurez le serveur Ec2

Voici les étapes pour lancer votre instance EC2 :



  • Accédez au tableau de bord EC2 et lancez une nouvelle instance.

  • Choisissez une AMI (Amazon Machine Image) appropriée ; J'utilise Amazon Linux 2.


  • Sélectionnez un type d'instance (par exemple, t2.micro si vous bénéficiez du niveau gratuit).


  • Configurez les détails de l'instance, ajoutez du stockage et ajoutez des balises si nécessaire.


  • Configurez un groupe de sécurité pour autoriser le trafic entrant sur les ports dont vous aurez besoin (au moins le port TCP 22 pour SSH et le port de votre application, puis 3000 pour le trafic Web).


  • Examinez et lancez l’instance ; assurez-vous d’enregistrer la paire de clés utilisée pour l’accès SSH.


Testons maintenant la connexion à votre serveur via SSH sur un terminal :

ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem


Remplacez les variables par les valeurs que vous avez définies pour votre instance EC2.

Si vous voyez ceci, vous êtes connecté à votre serveur, félicitations ! 👏

Mais nous n’avons pas encore terminé – nous ne faisons que commencer 😏

Installons NodeJS sur notre serveur :
sudo yum install -y nodejs


Installez pm2 globalement sur notre serveur via npm

sudo npm i -g pm2


Installez git sur le serveur et configurez vos informations d'identification :

sudo yum install git -y

 git config --global user.name "Your Name" git config --global user.email "[email protected]"


Bon, maintenant nous allons créer un dossier var/www/ s'il n'existe pas déjà :

sudo mkdir -p /var/www


Ajoutez ensuite la propriété à notre utilisateur ec2 :

sudo chown -R ec2-user:ec2-user /var/www


Accédez au répertoire à partir de la racine de votre serveur – pas au dossier /home people 👌 cd ~/var/www


Maintenant, à partir de là, nous allons cloner notre dépôt git : git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY

Remplacez [USERNAME] [REPO_NAME] et [YOUR_PROJECT_DIRECTORY] par vos propres valeurs.


Ensuite, nous modifions le répertoire dans notre référentiel, afin que cd YOUR_PROJECT_DIRECTORY puisse créer le fichier ecosystem.config.js pour notre configuration pm2 :

nano ecosystem.config.js


Cela ressemble à ceci :

 module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };

Cool beans, d'accord - une fois que cela est créé et enregistré, démarrons l'application avec pm2 :

pm2 start ecosystem.config.js


Maintenant, nous pouvons vérifier que nous avons un message « Hello World ! » depuis notre serveur sur le port 3000 :

Pour que pm2 démarre automatiquement au redémarrage du serveur, exécutons :

 pm2 save pm2 startup

Pour vérifier que votre serveur est en cours d'exécution, vous pouvez faire pm2 status ; vous pouvez lire la documentation sur pm2 ici


Si vous êtes arrivé jusqu'ici, vous êtes une superstar ⭐️

Intégration avec les actions GitHub

C'est la dernière étape de notre processus. Nous allons créer un fichier .yml pour les actions Github afin de mettre à jour notre serveur chaque fois qu'une modification est transmise à notre branche principale.

Dans votre référentiel, accédez à l'onglet « Actions » et créez un nouveau workflow personnalisé. J'appelle le mien nodejs.yml


Voici le fichier .yml pour mettre à jour le dépôt et redémarrer pm2 :

 name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application

Assurez-vous de mettre à jour « votre_répertoire_projet »


Enfin, vous devrez ajouter ces secrets d'environnement. REMOTE_HOST c'est l'adresse IP de votre serveur ; REMOTE_USER il s'agit de ec2-user pour l'AMI Amazon Linux 2, puis collez le contenu de votre fichier .pem en tant que SSH_PRIVATE_KEY


Vous pouvez faire tout cela dans les paramètres du référentiel :

C'est ça! Nous avons fini, ouais 😁


Vous pouvez tester tout cela en modifiant le message « Hello World » et en transmettant cette modification à votre branche principale ; alors vous devriez voir la mise à jour sur http://your.ip.address:3000


C'est un peu un processus à mettre en place, mais lorsque vous développez, c'est vraiment agréable d'avoir un pipeline CI/CD simple déployant automatiquement les modifications sur votre serveur API REST. De cette façon, vous pouvez rapidement déployer les modifications en direct et les voir dans le front-end de votre application Web/mobile.


Faites-moi savoir si cela a été utile dans les commentaires, et merci d'avoir lu !!


Paix dehors,

- Nous s