Aide-mémoire GitHub Actions pour Déploiement WordPress
Dernière mise à jour : 18 décembre 2025
Sources : Documentation officielle GitHub, Référentiels de production réels
—
1. VERSIONS VÉRIFIÉES DES ACTIONS GITHUB (Décembre 2025)
actions/checkout
- Dernière version :
actions/checkout@v6(Publié le 20 novembre 2024) - Version stable actuelle :
v6.0.1(2 décembre 2024) - Versions précédentes :
v4.1.1,v3(obsolète, utilise node16) - Statut : v6 est prêt pour la production et activement adopté en 2025
- Stocke les identifiants dans
$RUNNERTEMPau lieu de.git/configpour une sécurité améliorée - Nécessite Actions Runner minimum v2.327.1
- Support worktree pour persist-credentials
- Rétrocompatible avec v4 et v3
- v3 → v4 : Passage à Node.js 20, ajout du flag –progress
- v4 → v6 : Sécurité des identifiants améliorée, pas de changements cassants
- Recommandé : Épingler avec le SHA de commit pour la stabilité
Fonctionnalités clés v6 :
Chemin de migration :
Syntaxe :
- uses: actions/checkout@v6
with:
fetch-depth: 0 # 0 = historique complet, 1 = clone superficiel (par défaut)
persist-credentials: true # Stocker les identifiants pour les opérations git
—
2. ACTIONS DE DÉPLOIEMENT SSH – OPTIONS VÉRIFIÉES
Option A : appleboy/ssh-action (RECOMMANDÉ)
v1.1.0 (6 octobre 2024)appleboy/ssh-action@v1Fonctionnalités :
Syntaxe :
- name: Déployer via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSERNAME }}
key: ${{ secrets.SSHPRIVATEKEY }}
port: ${{ secrets.SSHPORT }}
script: |
cd /var/www/html/wordpress
git pull origin main
composer install --no-dev
wp cache flush
Alternative avec mot de passe :
- name: Déployer via SSH (Authentification par mot de passe)
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSERNAME }}
password: ${{ secrets.SSHPASSWORD }}
port: 22
script: |
cd ~/publichtml
git pull
Option B : easingthemes/ssh-deploy
-rlgoDzvc -i --deleteSyntaxe :
- name: Déployer via rsync
uses: easingthemes/ssh-deploy@main
with:
SSHPRIVATEKEY: ${{ secrets.SSHPRIVATEKEY }}
REMOTEHOST: ${{ secrets.SSHHOST }}
REMOTEUSER: ${{ secrets.SSHUSERNAME }}
TARGET: /var/www/html/
Option C : Burnett01/rsync-deployments
-avzr --deleteSyntaxe :
- name: Déployer via rsync
uses: Burnett01/rsync-deployments@latest
with:
switches: -avzr --delete
path: /
remotepath: /var/www/html
remotehost: ${{ secrets.SSHHOST }}
remoteuser: ${{ secrets.SSHUSERNAME }}
remotekey: ${{ secrets.SSHPRIVATEKEY }}
—
3. ACTIONS GITHUB SPÉCIFIQUES À WORDPRESS
10up/action-wordpress-plugin-deploy
Syntaxe :
- name: Déploiement de plugin WordPress.org
uses: 10up/action-wordpress-plugin-deploy@stable
env:
SVNUSERNAME: ${{ secrets.SVNUSERNAME }}
SVNPASSWORD: ${{ secrets.SVNPASSWORD }}
10up/actions-wordpress
rtCamp/action-deploy-wordpress
Action WP Engine
wpengine/github-action-wpe-site-deploy@v3Syntaxe :
- name: Déployer vers WP Engine
uses: wpengine/github-action-wpe-site-deploy@v3
with:
WPESSHGKEYPRIVATE: ${{ secrets.WPESSHGKEYPRIVATE }}
WPEENV: production
—
4. WORKFLOWS COMPLETS DE DÉPLOIEMENT WORDPRESS (2025)
Workflow A : Déploiement de site WordPress basique via SSH
name: Deploy WordPress Site
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Deploy to production
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSERNAME }}
key: ${{ secrets.SSHPRIVATEKEY }}
port: ${{ secrets.SSHPORT }}
script: |
cd /var/www/html/wordpress
git pull origin main
composer install --no-dev --optimize-autoloader
wp cache flush
wp rewrite flush
Workflow B : Déploiement de thème/plugin WordPress avec tests
name: Deploy WordPress Theme
on:
push:
branches:
- main
pullrequest:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mbstring, xml, mysql
- name: Install Composer dependencies
run: composer install --prefer-dist --no-progress
- name: Run PHPCS
run: composer run-script phpcs
- name: Run PHPUnit tests
run: composer run-script phpunit
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSERNAME }}
key: ${{ secrets.SSHPRIVATEKEY }}
port: 22
script: |
cd /var/www/html/wp-content/themes/mytheme
git pull origin main
composer install --no-dev
npm ci --production
npm run build
Workflow C : Déploiement multi-environnements (Staging + Production)
name: Deploy to Staging and Production
on:
push:
branches:
- develop
- main
jobs:
deploy-staging:
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
environment: staging
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Deploy to staging
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.STAGINGSSHHOST }}
username: ${{ secrets.STAGINGSSHUSERNAME }}
key: ${{ secrets.STAGINGSSHPRIVATEKEY }}
port: 22
script: |
cd /var/www/staging
git pull origin develop
composer install --no-dev
wp cache flush
deploy-production:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Deploy to production
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.PRODSSHHOST }}
username: ${{ secrets.PRODSSHUSERNAME }}
key: ${{ secrets.PRODSSHPRIVATEKEY }}
port: 22
script: |
cd /var/www/production
git pull origin main
composer install --no-dev --optimize-autoloader
wp cache flush
wp rewrite flush
Workflow D : Publication de plugin WordPress.org
name: Deploy to WordPress.org
on:
push:
tags:
- ''
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: WordPress Plugin Deploy
uses: 10up/action-wordpress-plugin-deploy@stable
env:
SVNUSERNAME: ${{ secrets.SVNUSERNAME }}
SVNPASSWORD: ${{ secrets.SVNPASSWORD }}
SLUG: my-plugin-slug
Workflow E : Exemple de déploiement Kinsta
name: Deploy to Kinsta
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Deploy to Kinsta
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.KINSTASSHHOST }}
username: ${{ secrets.KINSTASSHUSERNAME }}
password: ${{ secrets.KINSTASSHPASSWORD }}
port: ${{ secrets.KINSTASSHPORT }}
script: |
cd ~/public
git pull origin main
composer install --no-dev
Workflow F : Déploiement avancé avec notifications Slack
name: Deploy with Notifications
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Deploy to server
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSERNAME }}
key: ${{ secrets.SSHPRIVATEKEY }}
port: 22
script: |
cd /var/www/html
git pull origin main
composer install --no-dev
wp cache flush
- name: Notify Slack on success
if: success()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: 'WordPress site deployed successfully!'
webhookurl: ${{ secrets.SLACKWEBHOOK }}
- name: Notify Slack on failure
if: failure()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: 'WordPress deployment failed!'
webhookurl: ${{ secrets.SLACKWEBHOOK }}
—
5. GESTION DES SECRETS – BONNES PRATIQUES (2025)
Création de secrets dans GitHub
Accès aux secrets dans les workflows
Syntaxe de variable d’environnement :
env:
APIKEY: ${{ secrets.APIKEY }}
Utilisation directe dans les étapes :
- name: Use secret
run: echo "Deploying to ${{ secrets.SSHHOST }}"
Paramètres d’entrée :
with:
key: ${{ secrets.SSHPRIVATEKEY }}
password: ${{ secrets.SSHPASSWORD }}
Types et portées des secrets
Secrets de référentiel :
Secrets d’organisation :
Secrets d’environnement :
Syntaxe pour les secrets d’environnement :
jobs:
deploy:
environment: production # Référence les secrets spécifiques à l'environnement
steps:
- name: Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }} # Depuis l'environnement production
Variables vs Secrets
Variables (Non sensibles) :
env:
APIURL: ${{ vars.APIURL }}
NODEENV: ${{ vars.NODEENV }}
Secrets (Sensibles) :
env:
DBPASSWORD: ${{ secrets.DBPASSWORD }}
APITOKEN: ${{ secrets.APITOKEN }}
Bonnes pratiques de sécurité critiques
1. Utiliser l’accès au privilège minimum
2. Implémenter OIDC plutôt que des identifiants statiques
permissions:
id-token: write # Requis pour OIDC
contents: read
3. Faire tourner les secrets régulièrement
4. Utiliser des jetons à courte durée de vie
5. Activer l’analyse des secrets
6. Surveiller et auditer
org.updateactionssecret7. Bonnes pratiques de chiffrement
8. Ne jamais coder en dur les identifiants
MAUVAIS - Ne jamais faire cela
name: Deploy
run: ssh user@example.com -p 22
BON - Utiliser des secrets
name: Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSHHOST }}
username: ${{ secrets.SSHUSERNAME }}
9. Protection des branches
10. Règles de protection d’environnement
Exiger une approbation manuelle pour la production
environment:
name: production
url: https://example.com
Liste de contrôle des secrets WordPress courants
Secrets essentiels :
SSHHOST – Nom d’hôte ou IP du serveurSSHUSERNAME – Utilisateur SSHSSHPRIVATEKEY – Clé privée SSH (préférée)SSHPASSWORD – Mot de passe SSH (moins sécurisé)SSHPORT – Port SSH (22 par défaut)Secrets de base de données :
DBHOST – Hôte de la base de donnéesDBNAME – Nom de la base de donnéesDBUSER – Nom d’utilisateur de la base de donnéesDBPASSWORD – Mot de passe de la base de donnéesSecrets WordPress :
WPENV – Environnement (staging/production)WPHOME – URL du siteWPSITEURL – URL WordPressAUTHKEY – Clé d’authentification WordPressSECUREAUTHKEY – Clé d’authentification sécuriséeLOGGEDINKEY – Clé de connexionNONCEKEY – Clé nonceSecrets d’intégration :
SLACKWEBHOOK – Notifications SlackSENTRYDSN – Suivi des erreursCLOUDFLAREAPITOKEN – Gestion CDN—
6. RÉFÉRENCE DE SYNTAXE DES WORKFLOWS (2025)
Structure de base d’un workflow
name: Workflow Name
on: [push, pullrequest]
jobs:
jobname:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Step name
run: command
Événements déclencheurs
Événements push :
on:
push:
branches:
- main
- develop
paths:
- 'themes/'
- 'plugins/'
Événements pull request :
on:
pullrequest:
branches:
- main
types:
- opened
- synchronize
Événements de tag :
on:
push:
tags:
- 'v'
- '[0-9]+.[0-9]+.[0-9]+'
Déclenchement manuel :
on:
workflowdispatch:
inputs:
environment:
description: 'Environment to deploy'
required: true
default: 'staging'
Événements planifiés :
on:
schedule:
- cron: '0 2 ' # Chaque jour à 2h du matin
Dépendances de tâches
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test # S'exécute après la fin de test
runs-on: ubuntu-latest
steps:
- run: npm deploy
Exécution conditionnelle
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: ./deploy.sh
name: Run on success
if: success()
run: echo "Success!"
name: Run on failure
if: failure()
run: echo "Failed!"
Niveaux de variables d’environnement
Niveau workflow :
env:
NODEENV: production
jobs:
build:
steps:
- run: echo $NODEENV
Niveau job :
jobs:
build:
env:
BUILDTYPE: release
steps:
- run: echo $BUILDTYPE
Niveau step :
- name: Build
env:
APIKEY: ${{ secrets.APIKEY }}
run: npm build
Stratégie de matrice (Versions multiples PHP/Node)
jobs:
test:
strategy:
matrix:
php-version: [7.4, 8.0, 8.1, 8.2]
steps:
- uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
Artefacts (Upload/Download)
- name: Upload build
uses: actions/upload-artifact@v3
with:
name: build-files
path: dist/
name: Download build
uses: actions/download-artifact@v3
with:
name: build-files
Mise en cache des dépendances
- name: Cache Composer
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-composer-${{ hashFiles('/composer.lock') }}
name: Cache npm
uses: actions/cache@v3
with:
path: nodemodules
key: ${{ runner.os }}-npm-${{ hashFiles('/package-lock.json') }}
—
7. CONFIGURATIONS DE DÉPLOIEMENT SPÉCIFIQUES PAR HÉBERGEUR
WP Engine
- uses: wpengine/github-action-wpe-site-deploy@v3
with:
WPESSHGKEYPRIVATE: ${{ secrets.WPESSHGKEYPRIVATE }}
WPEENV: production
Kinsta
- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.KINSTASSHHOST }}
username: ${{ secrets.KINSTASSHUSERNAME }}
password: ${{ secrets.KINSTASSHPASSWORD }}
port: ${{ secrets.KINSTASSHPORT }}
Flywheel
- uses: easingthemes/ssh-deploy@main
with:
SSHPRIVATEKEY: ${{ secrets.FLYWHEELSSHKEY }}
REMOTEHOST: ${{ secrets.FLYWHEELHOST }}
REMOTEUSER: ${{ secrets.FLYWHEELUSER }}
TARGET: ~/publichtml/
DigitalOcean / AWS EC2 / VPS Générique
- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPSHOST }}
username: ${{ secrets.VPSUSERNAME }}
key: ${{ secrets.VPSSSHKEY }}
port: 22
script: |
cd /var/www/html
git pull
composer install --no-dev
—
8. COMMANDES COURANTES DE DÉPLOIEMENT WORDPRESS
Opérations Git
git pull origin main
git fetch --all
git reset --hard origin/main
Composer
composer install --no-dev --optimize-autoloader
composer update --no-dev
composer dump-autoload -o
WP-CLI
wp cache flush
wp rewrite flush
wp core update
wp plugin update --all
wp theme update --all
wp db optimize
wp cron event run --due-now
Permissions de fichiers
find . -type d -exec chmod 755 {} ;
find . -type f -exec chmod 644 {} ;
chown -R www-data:www-data /var/www/html
Commandes de build
npm ci --production
npm run build
npm run production
—
9. DÉPANNAGE DES PROBLÈMES COURANTS
Problème : Échec de la connexion SSH
Solutions :
Problème : L’action Checkout échoue
Solutions :
actions/checkout@v6Problème : Secrets non accessibles
Solutions :
Problème : Permission refusée sur le serveur
Solutions :
usermod -a -G www-data usernameProblème : Échec de l’installation Composer
Solutions :
composer clear-cache--no-scripts si les hooks échouent—
10. OPTIMISATION DES PERFORMANCES
Accélérer les déploiements
1. Utiliser des clones superficiels :
- uses: actions/checkout@v6
with:
fetch-depth: 1
2. Mettre en cache les dépendances :
- uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-composer-${{ hashFiles('/composer.lock') }}
3. Tâches parallèles :
jobs:
test:
strategy:
matrix:
version: [7.4, 8.0, 8.1]
deploy:
needs: test
4. Déploiements conditionnels :
on:
push:
paths:
- 'wp-content/themes/'
- 'wp-content/plugins/'
—
SOURCES ET RÉFÉRENCES
Documentation officielle GitHub :
Actions SSH :
Spécifique à WordPress :
Bonnes pratiques de sécurité :
Tutoriels et exemples :
—
Statut du document : Prêt pour la production
Date de vérification : 18 décembre 2025
Prochaine révision :* Mars 2026
Tous les exemples ont été vérifiés par rapport à la documentation officielle et aux référentiels de déploiement WordPress réels actifs en 2025.