全局参考架构示例

本主题介绍组织全局参考体系结构(GRA)代码库的常用方法。 虽然首选使用单独的包选项,但在某些情况下,需要下面描述的其他选项之一。

定义

  • 全局参考体系结构(GRA):也称为白色标签体系结构或通用代码库。 这是用于多实例设置的模块分发体系结构。
  • 多实例设置:同一客户端对不同的地区或品牌使用不同的Adobe Commerce安装。 每个安装都具有共享模块以及独特的模块。
  • 单实例设置:只有一个Adobe Commerce安装。 对于不同的测试环境,可以存在源代码的多个副本,但生产代码只有一个版本。

选项1:单独的包

请参阅Composer项目结构设置此方法的最佳实践。

全局参考体系结构的单独包选项示意图

管理GRA Composer包的最灵活方式是通过中继。 元包仅包含composer.json文件,该文件定义了其他包依赖关系。 使用专用包存储库创建中包。

主项目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"
    }
}

每个模块、语言包、主题和库都有自己的Git存储库。 每个Git存储库都会自动同步到专用包存储库,并在该处生成包,前提是Git存储库的根中存在composer.json文件。

选项2:批量包

以下是单个Composer包中多个模块的示例。

批量包只能包含相同类型的包。 例如,如果您有Adobe Commerce模块、主题、语言包和库的多个包,则必须为每个类型创建单独的批量包。

供应商目录中的文件结构应类似于以下示例。 但是,请检查您的项目以查看Git存储库中应包含的内容):

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

composer.json文件应如下所示:

{
    "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"
        }
    }
}

选项3:拆分Git

此架构使用四个Git存储库来存储代码:

  • core:包含Adobe Commerce核心安装。 用于升级Adobe Commerce版本。
  • GRA:包含GRA代码。 所有GRA模块、语言包、白色标签主题和库。
  • brand/region:每个品牌或地区都有自己的存储库,其中仅包含特定于品牌或地区的代码。
  • release:以上所有内容都已合并到此Git存储库中。 此处仅允许合并提交。

示意图说明了全局参考体系结构的拆分Git选项

要设置此选项,请执行以下操作:

  1. 在Git中创建四种存储库类型。 仅创建coreGRA存储库一次。 为每个品牌创建一个brand/region和一个release存储库。

    建议的存储库名称:

    • m2-core
    • m2-gra
    • m2-region-x/m2-brand-x (例如,m2-emea/m2-adobe
    • m2-release-region-x/m2-release-brand-x (例如,m2-release-emea/m2-release-adobe
  2. 创建release/目录并运行以下命令,为所有存储库创建共享Git历史记录。

    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. 将每个存储库(core除外)克隆到计算机上的其他目录中。

    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. 安装Adobe Commerce和编辑器。 删除.gitignore文件,添加core远程文件,添加并提交代码以及推送。

    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. GRA存储库中,创建以下目录:

    • app/code/
    • app/design/
    • app/i18n/
    • lib/
  6. 添加代码。 删除.gitignore文件,添加并提交代码,添加远程数据库,然后推送。

  7. brand/region存储库中。 执行与GRA存储库中相同的操作,并牢记文件必须是唯一的。 您不能同时在此存储库和GRA存储库中包含同一文件。

  8. 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. 删除.gitkeep文件。

  10. release存储库部署到生产、测试、QA和开发服务器。 升级coreGRAbrand代码同样可以轻松运行以下命令:

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

选项4:莫诺雷波(推荐)

此策略非常模拟Magento Open SourceGit存储库的工作方式。

所有代码都在单个存储库中进行开发和测试。 自动化从此单一存储库中提取包,可使用编辑器将其安装在UAT和生产环境中。

示意图说明了全局参考体系结构的monorepo选项

使用monorepo选项,您可以轻松地在单个存储库中工作,同时还可以灵活地使用包组合实例。

版本控制和包蒸馏通过使用GitHub操作或GitLab操作通过自动化来完成。

示意图说明了全局参考体系结构的monorepo选项

有关此自动化的更多信息,请参阅以下资源:

TIP
设置monorepo是先进的,但以最低的间接成本提供了最大的灵活性。

不要混合策略

不建议对GRA包使用组合方法,对品牌或区域包使用组合方法。app/

您不仅获得了两种方法的​ 所有优点,还获得了它们的​ 缺点。 您应该选择其中一个(Git或编辑器)以优化工作。

要避免的解决方案

  • 表示GRA或品牌的模块命名约定

    命名模块以表示GRA或品牌会导致缺乏灵活性。 相反,请使用编辑器中继信息来确定模块属于哪个组。 例如,对于客户VF,包vf/meta-gra包含对所有GRA包的引用,可以使用composer require vf/meta-gra命令进行安装。 包vf/meta-kipling包含对所有吉卜林特定包和vf/meta-gra包的引用。 例如,模块名为vf/module-salesvf/module-sap。 此命名约定允许您在品牌状态与GRA状态之间移动包,但具有较低的影响。

  • 每个实例的Adobe Commerce核心升级

    为不同品牌或地区安排Adobe Commerce核心升级(包括修补程序升级),以尽可能紧密地共同执行。 由于兼容性限制,为共享模块支持多个Adobe Commerce版本会导致模块分叉,并将维护工作增加一倍。 在继续常规开发之前,请确保所有实例都在同一Adobe Commerce版本上运行,以防止这种工作量的增加。

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