Skip to content

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.

./github/workflows/main.yml
# 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"

Liens utiles