Déploiement
Job qui déploie un projet Symfony en place, dans le dépôt git du serveur (PROJECT_ROOT), sans dossier de releases.
Fonctionnement
- git :
- prod (tag
x.y.z) : récupère les tags (un tag recréé remplace l'ancien), puis bascule sur le tag. Le déploiement est refusé si des fichiers suivis sont modifiés sur le serveur : le job les liste, il faut les reporter dans le dépôt ou les annuler, puis relancer ; - preprod (branche
PREPROD_BRANCH) : aligne le serveur surorigin/<branche>, même réécrite, en écrasant les modifications locales des fichiers suivis.
- prod (tag
composer install --no-dev --optimize-autoloader --no-interaction, avec le PHPSYMFONY_PHP_BIN. Les auto-scripts de Composer (cache:clear,assets:install…) tournent donc avec ce PHP.doctrine:migrations:migrate --no-interaction --allow-no-migration, désactivable parSYMFONY_MIGRATIONS: "0".doctrine:schema:validate: bloquant. Si le mapping ne correspond pas à la base, le job échoue, alors que le code et les migrations sont déjà en place. Désactivable parSYMFONY_SCHEMA_VALIDATE: "0".cache:clearpuiscache:warmup.
Toutes ces commandes tournent avec APP_ENV=SYMFONY_APP_ENV (prod par défaut), quel que soit l'environnement GitLab : une préprod tourne souvent en prod.
Les secrets applicatifs (.env.local, APP_SECRET, DATABASE_URL…) restent sur le serveur, gérés hors CI. Aucun doctrine:schema:update n'est lancé.
Retour arrière : il se fait à la main, en rebasculant le serveur sur le tag précédent et, si besoin, en restaurant le dump fait avant le déploiement (mysql-backup).
Les paramètres sont transmis au script par l'environnement, voir les principes.
Utilisation
variables:
CI_TEMPLATE_VERSION: &CI_TEMPLATE_VERSION 0.4.32
SYMFONY_PHP_BIN: '/usr/bin/php8.5'
DB_PATH: 'files/dumps'
include:
- project: kgaut/gitlab-ci-templates
ref: *CI_TEMPLATE_VERSION
file:
- '/templates/generic/stages-variables-extends.yml'
- '/templates/generic/mysql-backup.yml'
- '/templates/symfony/deploy.yml'
- '/templates/generic/deploy-check.yml'
- '/templates/generic/deploy-tracking.yml'
Variables
| Nom de la variable | Contenu | Exemple | Remarque |
|---|---|---|---|
| PROJECT_ROOT | Chemin relatif ou absolu vers la racine du projet (dépôt git) | ~/http | |
| SSH_CHAIN | Chaine de connexion SSH | ssh user@serveur | |
| SYMFONY_PHP_BIN | Binaire PHP utilisé pour Composer et la console | /usr/bin/php8.5 | par défaut php |
| SYMFONY_COMPOSER_BIN | Composer : commande du PATH ou fichier relatif à la racine du projet | composer.phar | par défaut composer (binaire global) |
| SYMFONY_CONSOLE | Console Symfony, relative à la racine du projet | bin/console | par défaut bin/console |
| SYMFONY_APP_ENV | APP_ENV des commandes | prod | par défaut prod, en prod comme en preprod |
| SYMFONY_MIGRATIONS | Lancer les migrations Doctrine | 0 | par défaut 1 |
| SYMFONY_SCHEMA_VALIDATE | Valider le schéma Doctrine (bloquant) | 0 | par défaut 1 |
Les tags x.y.z et la branche preprod doivent être protégés si SSH_PRIVATE_KEY est une variable protégée.
Liste des jobs
prod:deploy
Déploie le tag en production
preprod:deploy
Déploie la branche PREPROD_BRANCH en préproduction
Les deux jobs étendent le job caché .symfony-deploy. Ils portent les mêmes noms que les jobs Drupal, auxquels les autres templates (assets…) se réfèrent.