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.
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
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