Je vous ai déjà parlé des Github Actions dans un article précédent afin de publier facilement votre extension WordPress sur le dépôt officiel des extensions.
Aujourd’hui, l’idée, c’est de déployer automatiquement vos développements quand vous poussez vos modifications sur GitHub
État des lieux
Actuellement, je publie mes modifications sur les sites WordPress de mes clients grâce au DeployHQ.com. C’est un service très simple à mettre en place:
- On lie DeployHQ à notre profil Github
- On sélectionne le dépôt GH à déployer
- On paramètre la connexion SFTP sur notre hébergement
A ce moment la, DeployHQ ajoute un webhook qui sera déclenché à chaque push sur une branche définie de notre repo Github qui lancera le déploiement.
Quelques secondes plus tard (ou ça se compte en seconde), vos modifications sont en ligne.
DeployHQ fonctionne bien… alors pourquoi changer ?
Ben oui pourquoi ?
Au-delà de cette raison tout à fait louable, il se trouve j’avais envie de tester une alternative !
Principe des Github Actions
En simple, Github Actions permets d’automatiser des taches selon des évènements se produisant sur le dépôt sur lequel il est actif.
Des taches, il peut y en avoir des centaines, voir des milliers et afin d’aider les développeurs, Github a mis en place une place de marché ou chacun peu publier son Action afin de la partager.
Le principe:
- On crée un fichier de configuration au format yml.
- Ce fichier est stocké dans votre dépôt GitHub
- Lorsque l’action définie dans le fichier de configuration est exécutée, GitHub Actions entre en jeu et exécute alors les tâches qu’on lui a demandées.
Passons à la pratique
Dans le paragraphe précédent, je vous ai parlé d’une place de marché. Sur cette place de marché, je suis tombé sur https://github.com/marketplace/actions/ssh-deploy qui selon la description, fait exactement ce dont j’ai envie.
En pratique, il faut créer dans votre projet un dossier .github
qui contiendra lui-même un dossier workflows
. À l’intérieur de ce dossier vous ajouterez un fichier qui portera le nom que vous voudrez, mais qui sera au format yml. Par exemple deploy.yml
.
Dans ce fichier deploy.yml on ajoutera ce code:
name: Deploy
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install Node.js
uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: Install npm dependencies
run: npm install
- name: npm init
run: npm init -y
- name: Run build task
run: npm run build --if-present
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.1.7
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-avz --delete"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
EXCLUDE: "/.git, /.github, /dist/, /node_modules/"
Et qu’est ce ca veut dire ?
name: Deploy
Est simplement le nom de cette action, car bien sur, vous pouvez avoir autant d’action que vous le désirez.
on:
push:
branches:
- master
Quand est ce qu’on jour cette action ? facile ! « sur » le « push » de la « branche » « master ».
Ainsi on peut imaginer avoir une autre action avec :
on:
push:
branches:
- staging
Le bloc qui nous intéressera ensuite est:
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-avz --delete"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
EXCLUDE: "/.git, /.github, /dist/, /node_modules/"
Car il définit les informations liées à Rsync
SSH_PRIVATE_KEY
La clé SSH privée servant au déploiement. Selon la doc de l’Action, vous pouvez en créer une avec la commande:
ssh-keygen -m PEM -t rsa -b 4096
Cette commande va créer une clée privée, a garder secrete et une clé publique.
La clé publique est à ajouter dans le fichier /home/user/.ssh/authorized_key de votre serveur / Hébergement. Le chemin sera à adapter selon que vous êtes sur un hébergement mutualisé autorisant SSH ou sur un serveur dédié ou autre cas.
La clé privée doit quant à elle être stockée sur votre compte Github dans les réglages du dépôt que vous voulez déployer. Le principe sera le même pour chacune des instructions qui suivront.
En cliquant sur « New repository secret » vous aurez 2 champs.
- Le champ « Name » prendra la partie en majuscule de vos réglages soit par exemple SERVER_SSH_KEY
- Le champ « Value » prendra quant à lui la valeur à envoyer lors du transfert (ici la valeur de la clé privée)
ARGS: "-avz --delete"
Les arguments de RSYNC à retrouver dans sa doc
Je vous invite à regarder la doc très simple et claire de l’Action pour les autres paramètres.
Tadam!
Normalement… si tout s’est bien passé, vos modifications sont téléversées automatiquement lorsque vous les poussez sur votre branche principale (ou sur la branche que vous avez choisie)
Conclusion
Vous savez maintenant utiliser les Github Actions pour déployer vos sites, il ne reste plus qu’à faire de jolis site web 😉
Si comme moi vous êtes développeur WordPress mais que vous hébergez vos sites chez WPEngine, sachez qu’il existe une action qui permet de déployer directement chez WPEngine !
Je débute avec cet outil… si vous avez des questions… c’est pas gagné, mais tentez quand même en laissant un commentaire.
I really enjoyed this article. Really, may I share this article with my friends?
Thank you for your feedback!
Yes of course you can.