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.

GitHub actions

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.

github actions secrets

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.

2 commentaires sur “Déployez votre site Web grâce aux Github Actions

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *