MigrationsManagerBundle : suivez facilement vos évolutions Akeneo

Après plusieurs projets sur le PIM Akeneo (la plupart sur la version 2.3), une même problèmatique revenait souvent lors d'évolutions et de correctifs divers & variés : comment lister, suivre et appliquer toutes les modifications réalisées par notre équipe sur chaque environnement & sans répétitions ? En effet, nous effectuons souvent les mêmes opérations pour chaque nouvelle version :

  • Import de nouveaux attributs via le job CSV dédié
  • Changement d'une colonne en base de données
  • Suppression d'options inutilisées
  • Recalcul d'une valeur d'attribut sur un groupe de produits donné
  • Etc.

Nous avons donc développé un bundle spécifique nous permettant d'afficher directement sur le dashboard la liste des migrations non appliquées et d'avoir le suivi étape par étape pour chaque migration.

Lien GitHub : https://github.com/ClickAndMortar/AkeneoMigrationsManagerBundle

Installation

L'installation du bundle se réalise simplement via Composer avec la commande suivante :

composer require clickandmortar/akeneo-migrations-manager-bundle

Il faut ensuite charger le bundle dans votre fichier AppKernel.php :

<?php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            // ...
            new ClickAndMortar\AkeneoMigrationsManagerBundle\ClickAndMortarAkeneoMigrationsManagerBundle(),
        ];
    }
}
 

Et créer une nouvelle instance d'un job spécifique qui permettre de réaliser le suivi par étape pour chaque migration :

php bin/console akeneo:batch:create-job internal execute_migration migration execute_migration_by_version '{"migrationVersion":null}' 'Execute migration by version'

Utilisation

Pour créer une migration, on utilise la commande classique :

php bin/console doctrine:migrations:generate

Cette dernière va générer une nouvelle migration dans le dossier upgrades/schema de votre projet. Il sera ensuite possible de modifier cette migration pour utiliser certaines fonctionalités du bundle :

  • Étendre la classe AbstractStepMigration pour bénéficier des méthodes createNewStep (création d'une nouvelle étape avec libellé lors de l'execution du job qui appelera la migration), getLabel (Libellé utilisé pour l'affichage de la migration dans le dashboard)
  • Utilisation du helper EntityHelper pour la création d'attributs, d'options d'attributs, la mise à jour des paramètres de certains jobs, etc.

Exemple :

<?php

namespace Pim\Upgrade\Schema;

use ClickAndMortar\AkeneoMigrationsManagerBundle\Migration\AbstractStepMigration;
use Doctrine\DBAL\Schema\Schema;

/**
 * Class Version20190121174114
 *
 * @author  Simon CARRE <simon.carre@clickandmortar.fr>
 * @package Pim\Upgrade\Schema
 */
class Version20190121174114 extends AbstractStepMigration
{
    /**
     * Migration label
     *
     * @var string
     */
    const MIGRATION_LABEL = 'Update to 1.0.1';

    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        $this->createNewStep('Start a new step');
        
        // Process here
        
        $this->addWarning('Error: Bad process');
        $this->createNewStep('Start the last step');
        
        // Process here
    }

    /**
     * Get migration label used in dashboard widget
     *
     * @return string
     */
    public static function getLabel()
    {
        return self::MIGRATION_LABEL;
    }
}

On passe ensuite par le job créé précédemment pour executer la migration et avoir le suivi en temps réel depuis le dashboard :

php bin/console akeneo:batch:job -c '{"migrationVersion":"<my_version>"}' execute_migration_by_version

 

Plus de soucis lors d'un déploiement, il suffit simplement de regarder le dashboard et d'appliquer les migrations nécesaires qui effectueront toutes les opérations en instance.