Déploiement basé sur un scénario
Avec ece-tools
version 2002.1.0 et ultérieure, vous pouvez utiliser la fonctionnalité de déploiement basé sur un scénario pour personnaliser le comportement de déploiement par défaut.
Cette fonctionnalité utilise scénarios et étapes dans la configuration :
-
Configuration du scénario-Chaque hook de déploiement est un scenario, qui est un fichier de configuration XML qui décrit la séquence et les paramètres de configuration pour terminer les tâches de déploiement. Vous configurez les scénarios dans la section
hooks
du fichier.magento.app.yaml
. -
Configuration des étapes-Chaque scénario utilise une séquence d’étapes qui décrivent par programmation les opérations requises pour terminer les tâches de déploiement. Vous configurez les étapes dans un fichier de configuration de scénario XML.
Adobe Commerce sur l’infrastructure cloud fournit un ensemble de scénarios par défaut et étapes par défaut dans le package ece-tools
. Vous pouvez personnaliser le comportement de déploiement en créant des fichiers de configuration XML personnalisés pour remplacer ou personnaliser la configuration par défaut. Vous pouvez également utiliser des scénarios et des étapes pour exécuter du code à partir de modules personnalisés.
Ajout de scénarios à l’aide de hooks de build et de déploiement
Ajoutez les scénarios de création et de déploiement d’Adobe Commerce à la section hooks
du fichier .magento.app.yaml
. Chaque hook spécifie les scénarios à exécuter pendant chaque phase. L’exemple suivant illustre la configuration de scénario par défaut.
crochets
magento.app.yaml
hooks:
build: |
set -e
php ./vendor/bin/ece-tools run scenario/build/generate.xml
php ./vendor/bin/ece-tools run scenario/build/transfer.xml
deploy: |
php ./vendor/bin/ece-tools run scenario/deploy.xml
post_deploy: |
php ./vendor/bin/ece-tools run scenario/post-deploy.xml
ece-tools
, il existe un nouveau format configuration des hooks. Le format hérité des versions 2002.0.x de ece-tools
est toujours pris en charge. Cependant, vous devez effectuer une mise à jour vers le nouveau format pour utiliser la fonctionnalité de déploiement basé sur un scénario.Examiner les étapes du scénario
Dans la configuration de hook, chaque scénario est un fichier XML contenant les étapes d’exécution des tâches de build, de déploiement ou de post-déploiement. Par exemple, le fichier scenario/transfer
comprend trois étapes : compress-static-content
, clear-init-directory
et backup-data
scenario/transfer.xml
<?xml version="1.0"?>
<scenario xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:ece-tools:config/scenario.xsd">
<step name="compress-static-content" type="Magento\MagentoCloud\Step\Build\CompressStaticContent" priority="100"/>
<step name="clear-init-directory" type="Magento\MagentoCloud\Step\Build\ClearInitDirectory" priority="200"/>
<step name="backup-data" type="Magento\MagentoCloud\Step\Build\BackupData" priority="300">
<arguments>
<argument name="logger" xsi:type="object">Psr\Log\LoggerInterface</argument>
<argument name="steps" xsi:type="array">
<item name="static-content" xsi:type="object" priority="100">Magento\MagentoCloud\Step\Build\BackupData\StaticContent</item>
<item name="writable-dirs" xsi:type="object" priority="200">Magento\MagentoCloud\Step\Build\BackupData\WritableDirectories</item>
</argument>
</arguments>
</step>
</scenario>
Étendre un scénario par défaut
L’exemple suivant étend le scénario de déploiement par défaut en ajoutant des fichiers de configuration de déploiement supplémentaires à la configuration de hook.
hooks:
deploy: |
php ./vendor/bin/ece-tools run scenario/deploy.xml vendor/<vendor-name>/<module-name>/deploy.xml vendor/<vendor-name>/<module-name>/deploy2.xml
Lors du déploiement, les scénarios personnalisés fusionnent avec le scénario par défaut en fonction des règles suivantes :
-
Les scénarios sont classés par priorité en fonction de leur séquence dans la définition de hook, le dernier scénario répertorié ayant la priorité la plus élevée.
Dans l’exemple, les scénarios ont la priorité suivante :
vendor/vendor-name/module-name/deploy2.xml
vendor/vendor-name/module-name/deploy.xml
scenario/deploy.xml
(scénario par défaut ou scénario de référence)
-
Les étapes du scénario avec la priorité la plus élevée remplacent les étapes portant le même nom dans les autres scénarios. De nouvelles étapes sont ajoutées à la configuration. Les mêmes règles s’appliquent à plus de deux scénarios, chaque scénario étant prioritaire de droite à gauche, par exemple (C → B → A).
Supprimer les étapes par défaut
Pour supprimer des étapes des scénarios par défaut, utilisez le paramètre skip
.
Par exemple, pour ignorer les étapes enable-maintenance-mode
et set-production-mode
dans le scénario de déploiement par défaut, créez un fichier de configuration qui comprend la configuration suivante.
vendor/vendor-name/module-name/deploy-custom-mode-config.xml
<?xml version="1.0"?>
<scenario xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:ece-tools:config/scenario.xsd">
<step name="enable-maintenance-mode" skip="true" />
<step name="set-production-mode" skip="true" />
</scenario>
Pour utiliser le fichier de configuration personnalisé, mettez à jour le fichier .magento.app.yaml
par défaut.
.magento.app.yaml
avec le scénario de déploiement personnalisé
hooks:
build: |
set -e
php ./vendor/bin/ece-tools run scenario/build/generate.xml
php ./vendor/bin/ece-tools run scenario/build/transfer.xml
deploy: |
php ./vendor/bin/ece-tools run scenario/deploy.xml vendor/vendor-name/module-name/deploy-custom-mode-config.xml
post_deploy: |
php ./vendor/bin/ece-tools run scenario/post-deploy.xml
Remplacer les étapes par défaut
Les scénarios personnalisés peuvent remplacer les étapes par défaut pour fournir une implémentation personnalisée. Pour ce faire, utilisez le nom d’étape par défaut comme nom de l’étape personnalisée.
Par exemple, dans le scénario [déploiement par défaut] l’étape enable-maintenance-mode
exécute le script PHP [EnableMaintenanceMode] par défaut.
<step name="enable-maintenance-mode" type="Magento\MagentoCloud\Step\EnableMaintenanceMode" priority="300"/>
Pour remplacer cette étape, créez un fichier de configuration de scénario personnalisé pour exécuter un script différent lors de l’exécution de l’étape enable-maintenance-mode
.
<?xml version="1.0"?>
<scenario xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:ece-tools:config/scenario.xsd">
<scenario>
<step name="enable-maintenance-mode" type="VendorName\VendorModule\Step\CustomEnableMaintenanceMode" priority="300"/>
</scenario>
Modifier la priorité de l’étape
Les scénarios personnalisés peuvent modifier la priorité des étapes par défaut. L’étape suivante modifie la priorité de l’étape de enable-maintenance-mode
de 300
en 10
afin que l’étape s’exécute plus tôt dans le scénario de déploiement.
<?xml version="1.0"?>
<scenario xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:ece-tools:config/scenario.xsd">
<scenario>
<step name="enable-maintenance-mode" type="Magento\MagentoCloud\Step\EnableMaintenanceMode" priority="10"/>
</scenario>
Dans cet exemple, l’étape enable-maintenance-mode
est déplacée au début du scénario, car elle a une priorité inférieure à toutes les autres étapes du scénario de déploiement par défaut.
Exemple : extension du scénario de déploiement
L’exemple suivant personnalise le scénario de déploiement par défaut avec les modifications suivantes :
- Remplace l’étape
remove-deploy-failed-flag
par une étape personnalisée - Ignore la sous-étape
clean-redis-cache
dans l’étape de prédéploiement - Ignore l’étape
unlock-cron-jobs
- Ignore l’étape
validate-config
pour désactiver les validateurs critiques - Ajoute une nouvelle étape de pré-déploiement
vendor/vendor-name/module-name/deploy-extended.xml
<?xml version="1.0"?>
<scenario xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:ece-tools:config/scenario.xsd">
<!-- Replace "remove-deploy-failed-flag" step with custom step -->
<step name="remove-deploy-failed-flag" type="Vendor\ModuleName\Step\Deploy\RemoveDeployFailedFlag" priority="100"/>
<!-- Skip "clean-redis-cache" sub-step in pre-deploy step -->
<step name="pre-deploy" type="Magento\MagentoCloud\Step\Deploy\PreDeploy" priority="200">
<arguments>
<argument name="logger" xsi:type="object">Psr\Log\LoggerInterface</argument>
<argument name="steps" xsi:type="array">
<item name="clean-redis-cache" xsi:type="object" skip="true"/>
</argument>
</arguments>
</step>
<!-- Skip step "unlock-cron-jobs" -->
<step name="unlock-cron-jobs" skip="true"/>
<!-- Skip critical validators -->
<step name="validate-config" type="Magento\MagentoCloud\Step\ValidateConfiguration" priority="300">
<arguments>
<argument name="logger" xsi:type="object">Psr\Log\LoggerInterface</argument>
<argument name="validators" xsi:type="array">
<item name="critical" xsi:type="array">
<item name="database-configuration" xsi:type="object" skip="true"/>
<item name="search-configuration" xsi:type="object" skip="true"/>
</item>
</argument>
</arguments>
</step>
<!-- Add new step into the beginning of the deploy scenario -->
<step name="new-pre-deploy-step" type="Vendor\ModuleName\Step\Deploy\PreDeploy" priority="10"/>
</scenario>
Pour utiliser ce script dans votre projet, ajoutez la configuration suivante au fichier .magento.app.yaml
pour votre projet d’infrastructure cloud Adobe Commerce :
hooks:
build: |
set -e
php ./vendor/bin/ece-tools run scenario/build/generate.xml
php ./vendor/bin/ece-tools run scenario/build/transfer.xml
deploy: |
php ./vendor/bin/ece-tools run scenario/deploy.xml vendor/vendor-name/module-name/deploy-extended.xml
post_deploy: |
php ./vendor/bin/ece-tools run scenario/post-deploy.xml
ece-tools
afin de déterminer les scénarios et les étapes à personnaliser pour vos tâches de création, de déploiement et de post-déploiement de projet.Ajout d’un module personnalisé pour étendre les ece-tools
Le package ece-tools
fournit des interfaces API par défaut qui respectent les normes de version sémantique. Toutes les interfaces API sont marquées avec l’annotation @api. Vous pouvez remplacer l’implémentation par défaut de l’API par la vôtre en créant un module personnalisé et en modifiant le code par défaut selon vos besoins.
Pour utiliser le module personnalisé avec Adobe Commerce sur une infrastructure cloud, vous devez enregistrer votre module dans la liste des extensions du package ece-tools
. Le processus d’enregistrement est similaire à celui que vous utilisez pour enregistrer des modules dans Adobe Commerce.
Pour enregistrer un module avec le package ece-tools
, procédez comme suit
-
Créez ou étendez le fichier
registration.php
à la racine de votre module.code language-php?start_inline=1 \Magento\MagentoCloud\ExtensionRegistrar::register('module-name', __DIR__);
-
Mettez à jour la section
autoload
pour que le fichier de configuration de votre module inclue le fichierregistration.php
pour charger automatiquement les fichiers de module danscomposer.json
.code language-json { "name": "vendor/ece-tools-extend", "description": "Extension for ece-tools", "type": "magento2-component", "version": "1.0.0", "license": "OSL-3.0", "autoload": { "files": [ "registration.php" ], "psr-4": { "Vendor\\EceToolExtend\\": "src/" } } }
-
Ajoutez le fichier
config/services.xml
dans votre module. Cette configuration est fusionnée surconfig/services.xml
à partirece-tools
package .code language-xml <?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd"> <services> <defaults autowire="true" autoconfigure="true" public="true"/> <prototype namespace="Vendor\EceToolExtend\" resource="../src/*" exclude="../src/{Test}"/> <!-- Use your own implementation of EnvironmentDataInterface --> <service id="Magento\MagentoCloud\Config\EnvironmentDataInterface" alias="Vendor\EceToolExtend\Config\CustomEnvironmentData" /> </services> </container>
Pour en savoir plus sur l’injection de dépendance, voir Injection de dépendance de Symfony.