vendredi, 29 mars 2024

Un pipeline de build automatisé simple pour Node.js

Les procédures de développement peuvent être assez avancées pour les applications d’entreprise, mais même les travaux simples et à un stade précoce peuvent bénéficier de pipelines de construction automatisés. Cet article décrit un système rapide à déployer pour exécuter un pipeline de build, de test et de publication automatique avec Node.js, Jenkins et Git.

Vous aurez besoin de Git et de Node/NPM installés sur votre système à suivre. Vous aurez également besoin d’un compte Cloud Platform (GCP). (Google fournit un généreux compte d’essai gratuit.)

Cet article se concentre sur le côté devops des choses, nous n’entrerons donc pas dans les détails sur le fonctionnement de l’application Node.js.

Nous utiliserons le démarreur facile trouvé ici, pour développer une application Node.js « Hey there World ».

  • Commencer
  • Installer l’application Node sur GCP
  • Configurer Jenkins sur GCP
  • Configurer le webhook GitHub sur Jenkins
  • Viva CI/CD

Démarrer

Nous allons établir un pipeline de construction qui répondra aux enregistrements dans notre référentiel, commencez donc par bifurquer la tâche. Accédez à https://github.com/fhinkel/nodejs-hello-world dans votre navigateur Internet et cliquez sur « Fork » comme indiqué dans l’image 1.

Image 1. Forking the project

IDG

Maintenant, vous pouvez cloner votre projet sur votre système régional en tapant :

git clone https://github.com//nodejs-hello-world.git (en changeant avec votre nom d’utilisateur) Lorsque cela est terminé, un Le site de répertoire brand-new/ nodejs-hello-world sera ajouté à votre système de fichiers

. Déplacez-vous dans ce répertoire et tapez npm install. Cela ne prendra qu’une minute pour configurer les dépendances

. Ensuite, tapez npm run start. L'application doit maintenant être en cours d'exécution et vous pouvez accéder à localhost:30 pour voir la

réaction facile "Hey there world!". Configurez l'application Node sur GCP Maintenant, connectez-vous à GCP. Si vous en avez besoin, vous pouvez créer un compte gratuit ici.

Créez une toute nouvelle instance de VM

dans la console GCP en cliquant sur "Console" en haut à droite, puis en cliquant"-> Allez dans Calculate Engine "dans le tableau de bord (ou vous pouvez sélectionner "Calculate Engine" dans le menu coulissant de gauche). En cliquant sur "Créer des circonstances", l'écran de configuration de l'instance s'affichera comme sur l'image 2.

Image 2. Création d'un IDG de circonstances Donnez aux circonstances un nom dont vous vous souviendrez.

Et notification que j'ai en fait choisi N1 comme série

et Micro-1 comme type de fabricant. Ce profil d'appareil est dans le niveau complémentaire (même après la fin de la durée d'essai), mais il ne convient que pour des utilisations vraiment basiques, pas pour le développement ou le test dans le monde réel, et certainement pas pour la production. Assurez-vous de sélectionner "Autoriser le trafic HTTP par défaut" afin que la plate-forme ouvre instantanément le port 80 dans les routes.

Lorsque vous appuyez sur le bouton "Développer l'instance", l'instance apparaîtra dans votre liste de VM. Vous pouvez maintenant SSH dans

la VM en cliquant sur le bouton "SSH". C'est pratique pour obtenir rapidement une CLI des circonstances sans traiter de secrets. Une fois le shell ouvert, vous pouvez taper cat/etc/os-release pour voir quel système d'exploitation vous utilisez.

Dans mon cas, Debian Buster . Maintenant, configurons Git. Exécutez sudo apt update et laissez APT mettre à niveau vers le plus récent. Ensuite, tapez sudo apt

set up git et acceptez le opportun en choisissant yes. Git est maintenant installé. Vous pouvez maintenant cloner l'application avec git clone https://github.com//nodejs-hello-world, comme vous l'avez fait sur votre

système local. cd dans le nouveau site de répertoire d'applications. Configurez maintenant Node/NPM avec sudo apt install nodejs npm.Maintenant, vous pouvez exécuter l’application avec npm setup suivi de npm run start. Vous devez pouvoir supprimer l’application en obtenant son IP externe dans la liste des VM,

et en y accédant dans un navigateur Internet. Dans mon cas, ce est http://34.134.201.13/:80. Assurez-vous d'avoir accès à HTTP et non à HTTPS. L'exécution d'applications Node directement dans la production n'est pas suggérée. Personnalisez le fichier package.json pour qu'il se compose du script suivant : "begin " : " pm2 start index.js -- profitez de " Now

installez le package PM2 globalement avec sudo npm set up pm2. Une fois que c'est total, vous pouvez exécuter l'application avec sudo npm run

start et PM2 organisera la démonisation de l'application. Vous pouvez répertorier les applications en cours d'exécution avec sudo pm2 list et arrêter l'application avec sudo pm2 stop index. C'est une excellente maquette suffisante d'un environnement de production pour continuer avec le côté devps des choses. Installez Jenkins sur GCP Créez maintenant un serveur simplement comme vous l'avez fait avec le serveur d'applications.

Dans mon cas, je l'appellerai idg-ops. SSH dans les nouvelles circonstances comme vous l'avez fait auparavant. Les instructions complètes pour configurer Jenkins sur Debian Buster sont ici. La version rapide consiste à configurer Java, à configurer wget, à installer le secret du plan Jenkins, à inclure le dépôt Jenkins

dans Debian et à faire surface en mettant à jour APT à nouveau. Voici ces cinq actions : sudo apt set up default-jdk sudo apt set up wget wget-qO- https://pkg.jenkins.io/debian-stable/jenkins.io.key|sudo apt-key include -sudo sh -c'echo deb https://pkg.jenkins.io/debian-stable binary/>/etc/apt/sources. list.d/ jenkins.list'sudo apt update Installer Git sur le serveur Jenkins Vous devez également installer Git et Node/NPM sur l'instance Jenkins : sudo apt set up git sudo apt set up nodejs npm Par défaut, Jenkins s'exécute sur 8080 , ouvrons donc ce port dans les directives du programme de pare-feu GCP. Accédez à "
Réseau VPC-> Programme de pare-feu" dans le menu de gauche de la console GCP. Cliquez sur « Développer les directives du programme de pare-feu ». Appelez la directive « Jenkins » et laissez les valeurs par défaut, y compris
« Balises cibles spécifiées ». Incluez

"jenkins" (tout en minuscules) comme seule balise cible. Dans "Plage d'adresses IP source", mettez 0.0.0.0/0 pour activer tous les clients. Enfin, pour « Protocoles et ports spécifiés », sélectionnez « TCP » et définissez-le sur 0.0.0.0/8080. Ouvrez à nouveau la liste des instances de VM (menu de gauche : « Calculer le moteur-> Circonstances de la VM ») et choisissez les circonstances Jenkins vous avez développé plus tôt. Il vous suffit maintenant d'ajouter la balise Jenkins. Cliquez sur « Modifier » et dans le champ des balises, incluez « jenkins ». Maintenant, si vous naviguez jusqu'à l'adresse IP de votre situation Jenkins

, à 8080, vous serez accueilli avec la page de destination Jenkins comme indiqué dans l'image 3. Image 3. Page de destination Jenkins IDG Comme la page l'informe vous, vous devez trouver les journaux pour obtenir le mot de passe administrateur. (Cela garantit que vous êtes une personne ayant accès au système sur lequel le serveur s'exécute.) Sur le serveur Jenkins, ouvrez le fichier / var/ et récupérez le mot de passe que vous y voyez , comme dans la liste 1. Liste 1. Mot de passe Jenkins dans le journal ************************************* ******************************************************** ******************************************************** ******************************************** La configuration initiale de Jenkins est obligatoire. Un utilisateur administrateur

a été

créé et un mot de passe généré. Veuillez utiliser le mot de passe suivant pour continuer la configuration : VOTRE MOT DE PASSE ICI Il peut également être trouvé à l'adresse :/ var/lib/jenkins/secrets/initialAdminPassword ** ******************************************************** ******************************************************** ******************************************************** ******************************* Une fois que vous revenez au navigateur et que vous avez entré votre mot de passe, vous pouvez commencer à configurer Jenkins . Pour la fonction de cet article, vous pouvez simplement sélectionner "Installer les plugins recommandés". Dans un scénario du monde réel, vous mettriez le temps de choisir exactement ce dont vous avez besoin.
Lorsque Jenkins aura fini d'exécuter ses installations par défaut, cela vous déclenchera pour créer un utilisateur administrateur - allez-y et faites-le . Enfin, Jenkins vous demandera l'URL pure et simple de l'installation, et vous pouvez la laisser telle quelle, avec l'adresse IP et le port qu'il a détectés. Cliquez sur "Nouveau travail" et proposez-lui un nom

(j'ai utilisé "nodejs"). Cliquez ensuite sur « Tâche de style libre » et « OK ». Configurez le webhook GitHub pour
Jenkins Réservez Jenkins pendant une minute et plongez dans votre compte GitHub, dans le projet nodejs-hello-world, et cliquez sur l'onglet "Paramètres". Dans le menu de gauche, sélectionnez "webhooks". Dans l'écran de détail des webhooks, cliquez sur "Ajouter un webhook". Un webhook permet à GitHub de publier sur une URL lorsque des occasions ont lieu. Pour l'URL du webhook, utilisez l'URL de votre configuration Jenkins suivie de / github-webhook. Dans mon cas, cette URL est http://35.223.18.153:8080/github-webhook. Définissez le « Type de contenu » sur « application/json ». Il existe une grande variété de types d'événements que vous pouvez utiliser pour affiner exactement ce qui déclenche l'exécution du webhook, sous « Laissez-moi choisir », mais pour l'instant, nous utiliserons simplement « Pushs » et laisserons les choses telles qu'elles sont. Continuez et cliquez sur « Inclure le webhook ». Retournez maintenant à Jenkins. Reconnectez-vous si vous en avez besoin et choisissez le travail que vous avez créé

plus tôt. Cliquez sur « Configurer » sur le. Allez dans la section "Gestion du code source" et sélectionnez "Git

". Maintenant, placez l'URL de votre dépôt Git

dans le champ URL. (Dans mon cas https://github.com/MTyson/nodejs-hello-world.) Jenkins est délicat à propos des URL Git que Jenkins utilisera l'URL que vous prenez dans la configuration Git de la tâche à faire correspondre par rapport au push webhook provenant de GitHub. Faites attention à ce que les cas correspondent

. Si vous voyez aller sur le serveur Jenkins qui reconnaît le push mais ne voit pas le lancement de la construction, vérifiez l'URL. (L'entrée du journal Jenkins ressemblera à" 2021-05-22 19:34:26.515

0000 [id=18] Informations ojpgwsDefaultPushGHEventSubscriber #onEvent : PushEvent reçu pour https://github.com/MTyson/nodejs-hello-world à partir de 140.82.115.154 ⇒ http://35.223.18.153:8080/github-webhook / ".

)Vérifier l'intégration Vous pouvez maintenant accéder au travail sur votre système régional et tester l'intégration. Ouvrez index.js et remplacez le message " Salut tout le monde ! " par " Salutations ! " Incluez maintenant le changement avec git add index.js, validez-le avec git dedicate-m " hook test "

, et appuyez sur vers le référentiel avec git push origin master. Vous pouvez vérifier que le webhook est en cours d'exécution en accédant à l'aile gauche " GitHub Hook Log ", où vous devez voir une entrée comparable

à l'image 4. Image 4. Efficace Git hook build run IDG Vous verrez également que si vous revenez au panneau de configuration, le travail révèle maintenant une build réussie. système de production, vous exécuteriez des tests sur la tâche à chaque fois qu'un dévot arrive sur master/main. Vous pouvez le faire en accédant à la configuration du projet et en cliquant sur "Inclure une étape de génération" et en produisant une commande shell qui exécute npm install suivi de npm run test, ou

vous pouvez produire des scripts shell pour des exigences plus complexes . Si vous modifiez le script de test package.json pour donner un code de sortie 0 (changez la sortie 1 pour laisser 0) alors vous pouvez simuler la réussite des tests. Dès que les tests sont passés, vous souhaitez appuyer sur la construction vérifiée en production . Revenez au shell SSH sur le serveur Jenkins. Définissez maintenant un mot de passe sur l'utilisateur " jenkins" qui a été créé pour

vous lors de la configuration de Jenkins : sudo passwd jenkins. Basculez vers cet utilisateur : su jenkins. Créez maintenant un secret pour l'utilisateur qu'il utilisera pour s'authentifier

par rapport au serveur de production : ssh-keygen-t rsa. Vous pouvez accepter les valeurs par défaut, en gardant à l'esprit que dans un scénario réel, vous utiliseriez une phrase secrète. Toujours sur le serveur Jenkins, allez dans la commande : ssh-copy-id NODE_SERVER_USER@NODE_SERVER_IP (Dans mon cas, il s'agit de ssh-copy-id matthewcarltyson@34.134.201.13!.?.!.) L'énergie ssh-copy-id copiera la clé publique sur le serveur Node.js. Lorsque cela est total, vous devriez avoir la possibilité de vous connecter en SSH directement du périphérique Jenkins au fabricant de nœuds : ssh NODE_SERVER_USER@NODE_SERVER_IP!.?.!(Dans mon cas, ssh matthewcarltyson@34.134.201.13!.?.!.)Ceci indique que l'utilisateur jenkins sur le serveur Jenkins peut désormais SSH sans mot de passe sur le serveur de production Node.

Comme dernière action, nous allons produire une étape de développement de script shell qui se déclenche après le tester développer l'action. Si les tests réussissent, cette étape sera exécutée en SSH sur le serveur Node, en extrayant la dernière version de Git et en redémarrant le serveur, comme indiqué dans la liste

2. Liste 2. Action de construction : extraire le dernier, redémarrer le serveur ssh matthewcarltyson@34.134.201.13.

Toute l'actualité en temps réel, est sur L'Entrepreneur

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici