Pourquoi ce projet ?
Factorisation de jobs Gitlab CI afin de mettre facilement et rapidement une pipeline en place pour un projet existant : sauvegarde, contrôles, déploiement par SSH, qualité du code.
Les jobs s'incluent depuis le projet kgaut/gitlab-ci-templates, à une version précise. Ce projet doit donc exister, en public, sur l'instance GitLab qui exécute vos pipelines (pourquoi).
Kickstart
Pour un Drupal, voici un exemple à mettre en place en deux minutes.
.gitlab-ci.yml
variables:
CI_TEMPLATE_VERSION: &CI_TEMPLATE_VERSION 0.4.32 # Dernière version : onglet « Tags » du projet kgaut/gitlab-ci-templates
PATH_TO_THEME: "./web/themes/custom/mon_theme"
ASSETS_IMAGE: "registry.gitlab.com/kgaut/docker-node-images:19"
ASSETS_ARTEFACTS: "./web/themes/custom/mon_theme/css"
ASSETS_ARTEFACTS_TARGET: "./web/themes/custom/mon_theme"
SENTRY_PROJECT : 'mon-projet'
SENTRY_ORG : 'mon-organisation'
DB_PATH: 'files/dumps'
DIFFS_PATH: 'files/diffs'
include:
- project: kgaut/gitlab-ci-templates
ref: *CI_TEMPLATE_VERSION
file:
- '/templates/generic/stages-variables-extends.yml'
- '/templates/drupal/backup.yml'
- '/templates/drupal/diff-config.yml'
- '/templates/generic/diff-repository.yml'
- '/templates/generic/assets.yml'
- '/templates/drupal/deploy.yml'
- '/templates/generic/sentry.yml'
- '/templates/drupal/post-deploy-clear-cache.yml'
- '/templates/generic/scheduled-clean-dump.yml'
- '/templates/drupal/scheduled-backup.yml'
Le premier fichier, stages-variables-extends.yml, est obligatoire : tous les autres en dépendent. Chaque fichier suivant apporte un ou plusieurs jobs, décrits dans cette documentation : ne gardez que ceux qui vous servent.
Variables Gitlab CI
Il est préférable de mettre quelques variables en dehors de ce fichier (Settings / CI/CD / Variables), soit parce qu'elles varient selon l'environnement, soit parce qu'elles doivent rester confidentielles.
Par exemple :
| Nom de la variable | Contenu | Exemple | Remarque |
|---|---|---|---|
| PROJECT_URL | Url du site, utilisée dans le nom des dumps | monsite.com | par environnement |
| PROJECT_ROOT | Chemin relatif ou absolu vers la racine du projet sur le serveur | ~/public_html | par environnement |
| SSH_CHAIN | Chaine de connexion SSH | ssh user@127.0.0.1 | par environnement |
| SSH_HOST | IP ou hostname du serveur | 127.0.0.1 | par environnement |
| SSH_USER | Utilisateur ssh | user | par environnement |
| SSH_PRIVATE_KEY | Clé ssh privée pour se connecter au serveur | Comment générer une clé ssh | |
| SSH_KNOWN_HOSTS | Clés d'hôte du serveur | recommandé : Clés d'hôte SSH | |
| SENTRY_AUTH_TOKEN | Jeton d'authentification à Sentry | masquée |
« Par environnement » : la variable se définit deux fois dans GitLab, avec le périmètre prod puis preprod.
Pour un projet Symfony, voir le déploiement Symfony, qui donne un exemple complet.
Et hop...
Un push sur la branche preprod lancera un déploiement en preprod et un tag de la forme x.y.z lancera un déploiement en prod.
Pour vérifier la mise en place avant le premier déploiement : le job SSH Connexion teste l'accès au serveur sans rien modifier.
Changer de version
Les nouveautés de chaque version sont listées dans le fichier CHANGELOG.md du projet. Une montée de version se fait en changeant CI_TEMPLATE_VERSION : les templates et les scripts exécutés sur le serveur suivent cette même version.