EXTRA ! EXTRA ! EXTRA ! Un nouveau site web, sans redmine, traduit entièrement en français et en anglais, avec des nouvelles versions des modules pour Magento, le dimanche 23 juillet 2017.

Luigifab/Versioning 3.4.4

N'oubliez pas que cette documentation ne concerne que la dernière version du module.
N'oubliez pas de lire cette page entièrement.

Présentation

Description

Ce module permet :

Un doute avant de faire une mise à jour ? Vérifiez le diff !

Accès et configuration

Configuration disponible dans Système » Configuration » Luigifab » Gestionnaire de version.
Disponible dans Outils » Gestionnaire de version.

Installation et désinstallation

Afin de réaliser l'installation complète du module, vous devez suivre le tutoriel, où tout du moins, le comprendre.

Pour la désinstallation, il faut :
- désinstaller le module avec Magento connect ;
- nettoyer le fichier ignore en ce qui concerne le dossier errors ;
- restaurer le bout de code concernant dans le fichier index.php ;
- supprimer ce qu'il reste du dossier errors pour restaurer le dossier de Magento ;
- effacer la configuration.

DELETE FROM core_config_data WHERE path LIKE "versioning/%";

En vidéo

Avant d'aller plus loin, voici une vidéo de présentation montrant le module en action (le Terminal est en local, Firefox est sur internet), depuis un commit en local jusqu'à la livraison en production.

Tutoriel d'installation

Prérequis :
- connaître le fonctionnement de son gestionnaire de version,
- avoir accès aux commandes suivantes : grep rm export iconv cut
- avoir accès à la fonction PHP suivante : exec

Veuillez noter que :
- vous pouvez déplacer Magento dans un sous dossier du dépôt ;
- vous pouvez utiliser un serveur pour le dépôt et un autre pour le serveur web ;
- sur votre ordinateur et sur votre serveur web, vous devez installer votre gestionnaire de version ;
- il est important que l'utilisateur qui exécute le serveur web ait la possibilité de modifier les fichiers du site ;
- tous les changements effectués seront annulés lors du processus de mise à jour (sauf pour les fichiers ignorés) ;
- il ne faut pas changer de branche via le module.

voir

Avec GIT

L'essentiel à retenir.
Ni plus ni moins.

X) Configurez le dépôt GIT.

git remote add origin ssh://utilisateur@serveur/var/git/depot.git
git config core.fileMode false
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.st status
git config --global color.ui auto

X) Ignorez les fichiers et dossiers.

echo "/app/etc/local.xml" >> .gitignore
echo "/downloader/.cache" >> .gitignore
echo "/downloader/pearlib/cache" >> .gitignore
echo "/downloader/pearlib/pear.ini" >> .gitignore
echo "/errors/config/*.ip" >> .gitignore
echo "/errors/config/*.dat" >> .gitignore
echo "/errors/config/*.csv" >> .gitignore
echo "/media" >> .gitignore
echo "/var" >> .gitignore
echo "/robots.txt" >> .gitignore
echo "/sitemap.xml" >> .gitignore
echo "/maintenance.flag" >> .gitignore
echo "/upgrade.flag" >> .gitignore

X) Créez obligatoirement le hook .git/hooks/prepare-commit-msg de manière à enregistrer le nom de la branche dans chaque message de commit. Il faut également que chaque personne qui utilisera le dépôt crée le hook (sans, dans le back-office la représentation des branches ne fonctionnera pas - le fichier hook doit être exécutable).

#!/bin/bash
# https://redmine.luigifab.info/projects/magento/wiki/versioning
NAME=$(git branch | grep "*" | cut -c3-)
echo "{$NAME}" >> "$1"

X) Afin de pouvoir installer le module, vous devez obligatoirement supprimer le dossier errors. En effet, le module remplace entièrement ce dossier pour la gestion des pages d'erreurs et de maintenance.

git rm -rf errors/

X) Pour que les pages de maintenance fonctionnent correctement, vous devez obligatoirement mettre à jour le fichier index.php.

// REMPLACEZ...
if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__).'/errors/503.php';
    exit;
}
// PAR...
// https://redmine.luigifab.info/projects/magento/wiki/versioning
if (file_exists('maintenance.flag') && (strpos(getenv('REQUEST_URI'), '/admin/') === false)) {
    $ips = './errors/config/error503.ip';
    if (!is_file($ips) || (is_file($ips) && (strpos(file_get_contents($ips), '-'.getenv('REMOTE_ADDR').'-') === false))) {
        include_once('./errors/503.php');
        exit(0);
    }
}
if (file_exists('upgrade.flag') && (strpos(getenv('REQUEST_URI'), '/admin/') === false)) {
    $ips = './errors/config/upgrade.ip';
    if (!is_file($ips) || (is_file($ips) && (strpos(file_get_contents($ips), '-'.getenv('REMOTE_ADDR').'-') === false))) {
        include_once('./errors/upgrade.php');
        exit(0);
    }
}

X) Installez le module.

Installation du module dans le back-office Magento via : Système » Magento Connect » Magento Connect Manager
La clef d'extension est : https://www.luigifab.info/magento/connect/luigifab/Luigifab_Versioning

X) Ajoutez tous les fichiers, committez et pushez.

X) Lors du déploiement sur le serveur, si le dépôt est sur un autre serveur, il faut préalablement créer le fichier .git/ssh/config.sh avec les 3 lignes suivantes.

#!/bin/sh
# https://redmine.luigifab.info/projects/magento/wiki/versioning
ssh -o UserKnownHostsFile=/var/sites/magento/web/.git/ssh/known_hosts -i /var/sites/magento/web/.git/ssh/id_rsa $@
ssh-keyscan serveur2 > /var/sites/magento/web/.git/ssh/known_hosts
chmod 400 /var/sites/magento/web/.git/ssh/*
chmod 500 /var/sites/magento/web/.git/ssh/config.sh

export GIT_SSH=/var/sites/magento/web/.git/ssh/config.sh
git clone ssh://utilisateur@serveur2/var/git/depot.git web

voir

Avec BZR

Désolé, mais ce système n'est plus disponible.

voir

Avec SVN

Désolé, mais ce système n'est pas disponible.

voir

Avec Darcs

Désolé, mais ce système n'est pas disponible.

voir

Avec Mercurial

Désolé, mais ce système n'est pas disponible.

Configuration

Rendez-vous dans Système » Configuration » Luigifab » Gestionnaire de version.

Gestionnaire de projet

Si vous utilisez Redmine (ou autre), vous pouvez spécifier les numéros des demandes dans les messages des commits. Si vous complétez le champ gestionnaire de projet, alors les numéros des demandes (par exemple #229) seront transformés en liens HTML.

Par exemple, avec Redmine, vous pouvez utiliser quelque chose comme cela : https://www.redmine.org/issues/

Page de connexion

Essayer la nouvelle page de connexion au back-office, c'est l'adopter !

Pages de maintenance

Chaque page est configurable avec ses propres options (principalement le titre et le contenu), la configuration sera sauvegardée automatiquement dans le dossier errors/config.

Lorsque le site est verrouillé, l'accès au back-office est toujours possible :
- les adresses suivantes ne fonctionneront pas : magento.luigifab.info/admin - magento.luigifab.info/index.php/admin
- les adresses suivantes fonctionneront : magento.luigifab.info/admin/ - magento.luigifab.info/index.php/admin/

Intégrateur, développeur, il est possible de modifier l'apparence des pages de maintenance avec des surcharges.
Pour en savoir plus, lisez le fichier lisezmoi disponible dans le dossier errors/config.

Erreur 503 (maintenance.flag)

Cette page de maintenance s'active et se désactive dans le back-office dans Outils » Gestionnaire de version ou manuellement en créant le fichier maintenance.flag. Elle est prioritaire sur la page de mise à jour.

Les options de configuration :

Ci-contre la page par défaut.
Exemple en ligne.

Mise à jour (upgrade.flag)

Cette page de maintenance s'active et se désactive dans le back-office dans Outils » Gestionnaire de version ou manuellement en créant le fichier upgrade.flag.

Les options de configuration :

Ci-contre la page par défaut.
Exemple en ligne.

Rapport d'erreur

Les options de configuration :

Ci-contre la page par défaut.
Exemple en ligne.

Erreur 404 système

Attention, cette page ne correspond pas à la page d'erreur 404 lorsque l'adresse d'une catégorie ou d'un produit n'existe pas.

Les options de configuration :

Ci-contre la page par défaut.
Exemple en ligne.

Événements

À documenter... (cependant, un exemple est disponible dans le model Demo.php).

Dépannage

→ Si vous avez activé PHP zlib.output_compression, vous devez le désactiver lors du processus de mise à jour afin d'éviter la temporisation de sortie. Avec Apache, vous pouvez ajouter la directive suivante dans le fichier de configuration de l'hôte virtuel.


<Location ~ "/admin/versioning_upgrade/run/revision/">
    php_flag zlib.output_compression off
</Location>

Si vous ne pouvez pas ajouter cette directive, vous aurez probablement une erreur (sans incidence) dans votre fichier var/log/system.log.

→ Si vous ne voyez pas les modifications apparaitre dans l'historique des commits (dans le back-office), vérifiez le contenu de votre fichier .git/config. Ci-dessous un exemple correct (notez la ligne remote et le nom de la branche master).


[branch "master"]
        remote = origin
        merge = refs/heads/master

→ Si par malheur vous utilisez Internet Explorer, certaines choses ne fonctionneront pas (voir la liste ci-dessous), mais cela n'empêchera pas le module de fonctionner parfaitement bien. Pensez à mettre à jour votre navigateur, et à défaut, à changer de navigateur... :)

- (IE 9) l'affichage de l'historique d'une mise à jour lors d'un clic sur le lien voir ne fonctionne pas (window.atob - js:history) ;
- (IE 9) la demande de confirmation de l'activation des pages de maintenance ne fonctionne pas (window.atob - js:confirmFlag) ;
- (IE 9) la demande de confirmation d'une mise à jour se fait sur une deuxième page (window.atob - js:confirmUpgrade) ;
- (IE 9 / FF 4) la sélection automatique de la première ligne du tableau de l'historique de mise à jour ne fonctionne pas ;
- (Edge 14) un dégradé de couleur ne fonctionne pas.

Téléchargement et démo

Démonstration : configuration / historique des commits / historique des mises à jour / état du dépôt

Clef d'extension : https://www.luigifab.info/magento/connect/luigifab/Luigifab_Versioning
Téléchargement de la dernière version : luigifab-versioning-3.4.4.tgz (md5sum c0d5c0d7cd2404acf801f14622541f1a)

Testé avec Firefox 22/45, IE 11, Chrome 54, Opera 41 sur Magento 1.4.1.0 avec PHP 7.0 et MySQL 5.6 / MariaDB 10.0.
Testé avec Firefox 45 sur Magento 1.5.0.1 / 1.6.0.0 / 1.7.0.0 / 1.8.0.0 / 1.9.0.0 / 1.9.3.1 avec PHP 7.0 et MySQL 5.6 / MariaDB 10.0.