Exempel på global referensarkitektur

I det här avsnittet beskrivs vanliga sätt att organisera en global referensarkitektur (GRA)-kodbas. Även om alternativet separata paket är att föredra, krävs ett av de andra alternativen som beskrivs nedan för vissa situationer.

Definitioner

  • Global Reference Architecture (GRA): Kallas även White Label Architecture eller Common Code Base. Detta är moduldistributionsarkitekturen för en konfiguration med flera instanser.
  • Installationsprogram för flera instanser: Samma klient använder separata Adobe Commerce-installationer för separata regioner eller varumärken. Varje installation har gemensamma och unika moduler.
  • Eninstansinstallation: Det finns bara en Adobe Commerce-installation. Det kan finnas flera kopior av källkoden för olika testmiljöer, men det finns bara en version av produktionskoden.

Alternativ 1: Separata paket

Mer information om hur du konfigurerar den här metoden finns i Projektstruktur för disposition.

Diagram som illustrerar det separata paketalternativet för global referensarkitektur

Det mest flexibla sättet att hantera GRA Composer-paket är genom metapaket. Metapaket innehåller endast en composer.json-fil, som definierar andra paketberoenden. Skapa metapaket med privata Packagist-databaser.

Huvudprojekt composer.json

{
    "name": "example-client/region-1",
    "description": "Example Client Region 1",
    "type": "project",
    "require": {
        "magento/product-enterprise-edition": "2.3.5",
        "example-client/meta-region-1": "~1.0"
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "repositories": [
        {"type": "composer", "url": "https://repo.packagist.com/example-client/"},
        {"packagist.org": false}
    ]
}

example-client/meta-region-1 composer.json

{
    "name": "example-client/meta-region-1",
    "description": "Region 1 meta package",
    "type": "metapackage",
    "require": {
        "example-client/meta-gra": "~1.0",
        "example-client/theme-frontend-region1",
        "example-client/language-es-es",
        "ingenico/ogone-client"
    }
}

example-client/meta-gra composer.json

{
    "name": "example-client/meta-gra",
    "description": "GRA meta package",
    "type": "metapackage",
    "require": {
        "geoip2/geoip2": "~2.0",
        "magento-services/module-stackify-logger": "~1.1",
        "example-client/sap-connector",
        "example-client/service-chat",
        "example-client/store-locator"
    }
}

Varje modul, språkpaket, tema och bibliotek har en egen Git-databas. Varje Git-databas synkroniseras automatiskt med den privata paketeringsdatabasen och genererar ett paket där så länge det finns en composer.json-fil i Git-databasens rot.

Alternativ 2: Paket i grupp

Nedan visas ett exempel på flera moduler i ett enda Composer-paket.

Ett grupppaket kan bara innehålla paket av samma typ. Om du till exempel har flera paket för Adobe Commerce-moduler, teman, språkpaket och bibliotek måste du skapa separata grupppaket för varje typ.

Filstrukturen i leverantörskatalogen ska se ut som i följande exempel. Titta dock i ditt projekt för att se vad som ska ingå i din Git-databas):

.
└── example-client/
    └── gra/
        └── src/
            ├── SapConnector/
            │   ├── etc/
            │   └── registration.php
            ├── ServiceChat/
            │   ├── etc/
            │   └── registration.php
            ├── StoreLocator/
            │   ├── etc/
            │   └── registration.php
            └── composer.json

Filen composer.json ska se ut så här:

{
    "name": "example-client/gra",
    "description": "GRA Modules",
    "require": {
        "magento/magento-composer-installer": "*"
    },
    "type": "magento2-module",
    "autoload": {
        "files": [
            "src/SapConnector/registration.php",
            "src/ServiceChat/registration.php",
            "src/StoreLocator/registration.php"
        ],
        "psr-4": {
            "ExampleClient\\SapConnector\\": "src/SapConnector",
            "ExampleClient\\ServiceChat\\": "src/ServiceChat",
            "ExampleClient\\StoreLocator\\": "src/StoreLocator"
        }
    }
}

Alternativ 3: Delad Git

Den här arkitekturen använder fyra Git-databaser för att lagra kod:

  • core: Innehåller kärninstallationen för Adobe Commerce. Används för att uppgradera Adobe Commerce-versioner.
  • GRA: Innehåller GRA-kod. Alla GRA-moduler, språkpaket, vita etikettteman och bibliotek.
  • brand/region: Varje varumärke eller region har en egen databas med endast varumärkes- eller regionspecifik kod.
  • release: Alla ovanstående sammanfogas i den här Git-databasen. Endast sammanslagningsimplementeringar tillåts här.

Diagram som illustrerar det delade Git-alternativet för global referensarkitektur

Så här konfigurerar du det här alternativet:

  1. Skapa de fyra databastyperna i Git. Skapa core- och GRA-databaserna endast en gång. Skapa en brand/region- och en release-databas för varje varumärke.

    Föreslagna databasnamn:

    • m2-core
    • m2-gra
    • m2-region-x/m2-brand-x (till exempel m2-emea/m2-adobe)
    • m2-release-region-x/m2-release-brand-x (till exempel m2-release-emea/m2-release-adobe)
  2. Skapa en release/-katalog och kör följande för att skapa en delad Git-historik för alla rapporter.

    code language-bash
    git init
    git remote add origin git@github.com:example-client/m2-release-brand-x.git
    git remote add core git@github.com:example-client/m2-core.git
    git remote add gra git@github.com:example-client/m2-gra.git
    git remote add region-x git@github.com:example-client/m2-region-x.git
    touch .gitkeep
    git add .gitkeep
    git commit -m 'initialize repository'
    git push -u origin master
    git push core master
    git push gra master
    git push region-x master
    
  3. Klona varje databas, förutom core, i en annan katalog på datorn.

    code language-bash
    git clone git@github.com:example-client/m2-release-brand-x.git
    git clone git@github.com:example-client/m2-region-x.git
    git clone git@github.com:example-client/m2-gra.git
    
  4. Installera Adobe Commerce med Composer. Ta bort filen .gitignore, lägg till fjärrkontrollen core, lägg till och implementera koden och tryck på.

    code language-bash
    composer create-project --repository-url=https://repo.magento.com/ magento/project-enterprise-edition m2-core
    cd m2-core
    git init
    rm .gitignore
    git remote add origin git@github.com:example-client/m2-core.git
    git fetch
    git checkout .gitkeep
    git add --all
    git commit -m 'install Adobe Commerce'
    git push
    
  5. Skapa följande kataloger i databasen GRA:

    • app/code/
    • app/design/
    • app/i18n/
    • lib/
  6. Lägg till kod. Ta bort filen .gitignore, lägg till och implementera koden, lägg till fjärrfilen och tryck på.

  7. I databasen brand/region. Gör samma sak som i GRA-databasen och tänk på att filerna måste vara unika. Du kan inte inkludera samma fil i både den här databasen och GRA-databasen.

  8. Använd sammanfogningen i databasen release.

    code language-bash
    git clone git@github.com:example-client/m2-release-brand-x.git
    cd m2-release-brand-x
    git remote add core git@github.com:example-client/m2-core.git
    git remote add gra git@github.com:example-client/m2-gra.git
    git remote add region-x git@github.com:example-client/m2-region-x.git
    git fetch --all
    git merge core/master gra/master brand-a/master
    git push
    
  9. Ta bort filen .gitkeep.

  10. Distribuera release-databasen till produktions-, test-, QA- och utvecklingsservrarna. Det är lika enkelt att uppgradera core-, GRA- och brand-kod som att köra följande kommandon:

    code language-bash
    git fetch --all
    git merge core/master gra/master brand-a/master
    git push
    

Alternativ 4: Monorepo (rekommenderas)

Denna strategi liknar i hög grad hur Magento Open Source Git-databasen fungerar.

All kod utvecklas och testas i en enda databas. Automatisering destillerar paket från denna enda databas, som kan installeras på UAT- och produktionsmiljöer med Composer.

Diagram som illustrerar monorepo-alternativet för global referensarkitektur

Med monorepo-alternativet kan du enkelt arbeta i en enda databas, samtidigt som du får flexibiliteten att komponera instanser med paket.

Versionshantering och paketering sker genom automatisering med GitHub-åtgärder eller GitLab-åtgärder.

Diagram som illustrerar monorepo-alternativet för global referensarkitektur

Mer information om den här automatiseringen finns i följande resurser:

TIP
Installation av ett monorepo är avancerat, men ger den flexibilitet som ger lägst overheadkostnad.

Blanda inte strategier

Det är inte tillrådligt att använda en kombinerad metod med Composer för GRA-paket och katalogen app/ för varumärkes- eller regionpaket.

Du får inte bara alla fördelar utan även alla nackdelar för båda metoderna. Du bör välja det ena eller det andra (Git eller Composer) för att arbeta optimalt.

Lösningar att undvika

  • Konventioner för modulnamngivning för att beteckna GRA eller varumärke

    Namngivningsmoduler för att beteckna GRA eller varumärke leder till bristande flexibilitet. Använd i stället Composer-metapaket för att avgöra vilken grupp en modul tillhör. Paketet vf/meta-gra innehåller till exempel referenser till alla GRA-paket för kund-VF och kan installeras med kommandot composer require vf/meta-gra. Paketet vf/meta-kipling innehåller referenser till alla Kipling-specifika paket och till paketet vf/meta-gra. Modulerna har till exempel namnen vf/module-sales och vf/module-sap. Den här namnkonventionen gör att du kan flytta paket mellan varumärket och GRA-status, med låg påverkan.

  • Adobe Commerce Core Upgrades per instance

    Schemalägg Adobe Commerce-uppgraderingar, inklusive korrigeringsuppgraderingar, för olika varumärken eller regioner som ska exekveras så nära ihop som möjligt. Stöd för flera Adobe Commerce-versioner för delade moduler leder till att moduler måste kopplas ihop på grund av kompatibilitetsbegränsningar och mer än fördubblar underhållsarbetet. Förhindra detta genom att se till att alla instanser körs på samma Adobe Commerce-version innan du fortsätter med den regelbundna utvecklingen.

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60