Aller au contenu principal

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​

  1. 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 sur origin/<branche>, même réécrite, en écrasant les modifications locales des fichiers suivis.
  2. composer install --no-dev --optimize-autoloader --no-interaction, avec le PHP SYMFONY_PHP_BIN. Les auto-scripts de Composer (cache:clear, assets:install…) tournent donc avec ce PHP.
  3. doctrine:migrations:migrate --no-interaction --allow-no-migration, désactivable par SYMFONY_MIGRATIONS: "0".
  4. 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 par SYMFONY_SCHEMA_VALIDATE: "0".
  5. cache:clear puis cache: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 variableContenuExempleRemarque
PROJECT_ROOTChemin relatif ou absolu vers la racine du projet (dépôt git)~/http
SSH_CHAINChaine de connexion SSHssh user@serveur
SYMFONY_PHP_BINBinaire PHP utilisé pour Composer et la console/usr/bin/php8.5par défaut php
SYMFONY_COMPOSER_BINComposer : commande du PATH ou fichier relatif à la racine du projetcomposer.pharpar défaut composer (binaire global)
SYMFONY_CONSOLEConsole Symfony, relative à la racine du projetbin/consolepar défaut bin/console
SYMFONY_APP_ENVAPP_ENV des commandesprodpar défaut prod, en prod comme en preprod
SYMFONY_MIGRATIONSLancer les migrations Doctrine0par défaut 1
SYMFONY_SCHEMA_VALIDATEValider le schéma Doctrine (bloquant)0par 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.