Accueil » Github actions déploiement automatique

Github actions déploiement automatique

Les Github Actions sont des actions automatiques qui sont déployées automatiquement dans un projet Github. Dans cette procédure je vous montrer le déploiement automatique des modifications de code à l’aide des Github Actions et d’un serveur SSH.

Logo Github

Prérequis :

  • Avoir un compte Github avec un repository pour votre projet
  • Avoir un serveur (avec une connexion SSH)

Github actions déploiement automatique :

Pour commencer, nous nous rendre dans notre Repository Github.

Ensuite il faudra se rendre dans la section « Settings  » puis « Secrets and variables » et enfin « Actions« 

Puis nous allons créer les 4 variables suivantes :

  • SSH_HOST: Correspond à l’adresse IP ou DNS de votre serveur
  • SSH_PORT: Correspond au port de connexion SSH (22 par défaut)
  • SSH_USER: Correspond à l’utilisateur utilisé pour la connexion SSH
  • SSH_PASSWORD: Correspond au mot de passe de l’utilisateur pour la connexion SSH
Github actions déploiement automatique - Liste secrets

Ensuite rendez-vous dans la section « Actions » de vôtre projet et cliquez sur « New workflow » si vous n’en n’avez pas encore, sinon éditer vôtre Workflow.

Vous trouverez ci-dessous une configuration de Workflow qui effectuera la commande « cd ~/VOTRE-PROJET && git pull » sur vôtre serveur distant à chaque push sur la branche « main » :

name: Deploy

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Deploy
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        password: ${{ secrets.SSH_PASSWORD }}
        port: ${{ secrets.SSH_PORT }}
        script: cd ~/VOTRE-PROJET && git pull 

Au niveau de script, mettez les commandes qui doivent être exécutées sur vôtre serveur afin d’effectuer les mises à jours.

Il est également possible d’effectuer le déploiement de code si les modifications passent les tests de vos applications, voici un exemple avec une application Symfony 6 :

name: Symfony

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  symfony-tests:
    runs-on: ubuntu-latest
    steps:
    - uses: shivammathur/setup-php@2cb9b829437ee246e9b3cac53555a39208ca6d28
      with:
        php-version: '8.1'
    - uses: actions/checkout@v3
    - name: Copy .env.test.local
      run: php -r "file_exists('.env.test.local') || copy('.env.test', '.env.test.local');"
    - name: Cache Composer packages
      id: composer-cache
      uses: actions/cache@v3
      with:
        path: vendor
        key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-php-
    - name: Start containers
      run: docker-compose -f "docker-compose.yml" up -d --build

    - name: Init project
      run: make init

    - name: Init Application in Test env
      run: make tests

    - name: Stop containers
      if: always()
      run: docker-compose -f "docker-compose.yml" down
      
  deploy:
    needs: [symfony-tests]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Deploy
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SSH_HOST }}
        username: ${{ secrets.SSH_USER }}
        password: ${{ secrets.SSH_PASSWORD }}
        port: ${{ secrets.SSH_PORT }}
        script: cd ~/VOTRE-PROJET && git pull && make init && make database

L’instruction « needs » permet d’attendre que d’autres instructions avant d’exécuter cette étape.

Source :

https://github.com/features/actions

Susceptible de vous intéresser :