Déployer son site depuis Github

Goal

Le but de ce cours est d'automatiser la mise en production de notre site à chaque fois que l'on pousse des modifications sur Github.

Solution

Qu'est ce qu'un webhook ?

Prérequis

Ce cours fonctionne sur Debian 9

- installer git sur la machine

sudo apt install git -y

- installer nodejs

sudo apt-get update

sudo apt install curl -y

 cd ~

curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh

sudo bash nodesource_setup.sh

sudo apt install nodejs

 

nodejs -v

Step 1

sudo apt-get install webhook

Installation de webhook

Step 2

mkdir ~/webhooks

Créer un dossier webhooks

Créer un fichier hooks.json

touch ~/webhooks/hooks.json

Step 3

touch ~/webhooks/deploy.sh

Créer un script .sh

Appliquer les bons droits au script

chmod +x ~/webhooks/deploy.sh

Step 4

sudo nano ~/webhooks/hooks.json

Editer le fichier hooks.json

[
  {
    "id": "deploy",
    "execute-command": "/home/debian/webhooks/deploy.sh",
    "command-working-directory": "/home/debian/webhooks",
    "response-message": "Executing deploy script..."
  }
]

Note : ne pas utiliser ~/ pour le chemin des fichiers

Step 4

ctrl + x pour sauvegarder le fichier

Step 5

commande linux pour connaitre le chemin du bash

which bash

Editer le fichier deploy.sh

#!/bin/bash

---> Script in next slide <---

sudo nano ~/webhooks/deploy.sh

Step 5

#!/bin/sh

sudo rm -rf /home/debian/walkingfeet

sudo rm -rf /var/www/html/*

cd /home/debian

git clone https://github.com/nicolashedoire/walkingfeet.git

cd /home/debian/walkingfeet

npm install

npm run build

sudo cp -r /home/debian/walkingfeet/build/* /var/www/html

sudo rm -rf /home/debian/walkingfeet

Step 5

Step 6

Lancer notre webhook

webhook -hooks /home/debian/webhooks/hooks.json -verbose -hotreload -port 9001

On lance la commande webhook en ciblant notre fichier hooks.json avec le flag -verbose afin d'avoir des logs, on active aussi le hotreload en cas de changement dans notre fichier hooks.json et on lance le processus sur le port 9001

Note : le port 9000 peut être déjà occupé alors un switch sur le 9001 est nécessaire

Step 6

On peut voir que notre hook deploy est prêt

Step 7

On va tester notre hook dans le navigateur

Nous avons bien une réponse dans les logs

Step 8

Cabler notre hook sur github

Step 8

Création du hook avec url du serveur

Step 8

Le hook a bien été créé !

Automatiser webhook

A chaque fois que l'on se déconnecte du serveur, webhook cesse de fonctionner... C'est un peu embêtant étant donné que l'on souhaite automatiser au maximum les choses. 

Solution

Créer un service

Automatiser webhook

Rendons nous dans systemd

et créons notre service

Automatiser webhook

Nous allons éditer le fichier webhook.service

Et écrire ces lignes

Automatiser webhook

On sauvegarde nos modifications

ctrl x  puis y et entrée

Automatiser webhook

Activer notre nouveau service

Maintenant on souhaite démarrer le service

Notons que cela ne fonctionne pas

Automatiser webhook

Nous allons aller voir les logs pour voir ce qui ne va pas

tail -f /var/log/syslog

Automatiser webhook

Comment corriger cela ?

Nous devons localiser le path de webhook

Automatiser webhook

Et maintenant ?

il ne reste plus qu'à modifier le script dans notre service en ajoutant le bon chemin

Automatiser webhook

On démarre le service

On regarde le status de notre service

Automatiser webhook

si cela ne fonctionne pas

sudo systemctl stop webhook.service

sudo systemctl enable webhook.service

sudo systemctl start webhook.service

Vérifiez à nouveau le status et essayer d'accéder à l'url de déploiement.

Annexes

Les options de webhook

Made with Slides.com