Skip to content
✍🏼  Publié par Mathieu BESSON

Mise en place d'une CD simple avec Github et Github Actions

Prérequis

  • Un compte github
  • Un serveur sous linux

Configuration de l'utilisateur sur le serveur

Création de l'utilisateur github-action

sudo adduser github-action

Générer une paire de clé SSH

# Connection en tant qu'user github-action
sudo su github-action
# Création de la paire de clé
ssh-keygen -t rsa

Créer le dossier de base du projet

sudo mkdir -p /var/www/projet && sudo chown -R github-action:github-action /var/www/projet

Configuration du repository git

Création d'un repository git avec un fichier yaml précisant les jobs à lancer à chaque push sur la branch main.

# Workflow actions
name: Workflow CD

on:
  # Trigger push on branch
  push:
    branches: [ main ]

jobs:
  build:
    # Type of runner
    runs-on: ubuntu-latest

    steps:
    - name: Deploy using ssh
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.PRIVATE_KEY }}
        port: ${{ secrets.PORT }}
        script: cd /var/www/projet && git pull

Copier la clé privé de l'utilisateur github-action dans les clés de déploiement du projet :

cat /home/github-action/.ssh/id_rsa

Dans le repository Github > Settings > Secrets and variables > Actions > Actions secrets > [New repository secret]

Ajouter 4 variables :

HOST : ip du serveur
PORT : port SSH du serveur
PRIVATE_KEY : clé privée de l'utilisateur github-action sur le serveur
USERNAME : github-action

Ajouter la clé public de l'utilisateur github-action lui permettant de pull depuis le serveur sur le repository Github

cat /home/github-action/.ssh/id_rsa.pub

Dans le compte Settings > SSH and GPG keys > [New SSH key]

Mise en place de l'automatisation sur le serveur

Faire un premier git clone sur le serveur

cd /var/www/projet/
git clone git@github.com:user/projet.git .

À partir de maintenant chaque push entrainera le déploiement du code sur le serveur

Il est possible de retrouver les logs de chaque déploiement sur le repository dans l'onglet "Actions"