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.
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.
Så här konfigurerar du det här alternativet:
-
Skapa de fyra databastyperna i Git. Skapa
core
- ochGRA
-databaserna endast en gång. Skapa enbrand/region
- och enrelease
-databas för varje varumärke.Föreslagna databasnamn:
m2-core
m2-gra
m2-region-x
/m2-brand-x
(till exempelm2-emea
/m2-adobe
)m2-release-region-x
/m2-release-brand-x
(till exempelm2-release-emea
/m2-release-adobe
)
-
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
-
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
-
Installera Adobe Commerce med Composer. Ta bort filen
.gitignore
, lägg till fjärrkontrollencore
, 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
-
Skapa följande kataloger i databasen
GRA
:app/code/
app/design/
app/i18n/
lib/
-
Lägg till kod. Ta bort filen
.gitignore
, lägg till och implementera koden, lägg till fjärrfilen och tryck på. -
I databasen
brand/region
. Gör samma sak som iGRA
-databasen och tänk på att filerna måste vara unika. Du kan inte inkludera samma fil i både den här databasen ochGRA
-databasen. -
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
-
Ta bort filen
.gitkeep
. -
Distribuera
release
-databasen till produktions-, test-, QA- och utvecklingsservrarna. Det är lika enkelt att uppgraderacore
-,GRA
- ochbrand
-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.
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.
Mer information om den här automatiseringen finns i följande resurser:
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 kommandotcomposer require vf/meta-gra
. Paketetvf/meta-kipling
innehåller referenser till alla Kipling-specifika paket och till paketetvf/meta-gra
. Modulerna har till exempel namnenvf/module-sales
ochvf/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.