Publié le 18/02/2019 par Simon CARRE
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 :
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
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'
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 :
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.