ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Backstage v1.35.0-next.1 变更深度解读:GitLab Catalog 提供者能力演进与升级实践

Backstage v1.35.0-next.1 变更深度解读:GitLab Catalog 提供者能力演进与升级实践 Backstage v1.35.0-next.1 变更深度解读GitLab Catalog 提供者能力演进与升级实践【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage本文以 Backstage 官方发布说明 docs/releases/v1.35.0-next.1-changelog.md 为骨架系统梳理该预发布版本中backstage/plugin-catalog-backend-module-gitlab等核心包的关键变更并对照当前仓库源码plugins/catalog-backend-module-gitlab逐一印证配置项、Provider 行为与事件驱动机制帮助你在升级 Backstage 时快速评估影响面、规避破坏性变更。版本定位与升级入口v1.35.0-next.1是 Backstage 1.35 稳定版发布之前的第二个预发布next迭代用于在正式版本落地前收集社区反馈。文档顶部提供的 Upgrade Helper 工具可按当前版本自动计算升级路径与改动清单是升级前必做的第一步。该版本变更可划分为三层GitLab 相关包本轮变更主角backstage/plugin-catalog-backend-module-gitlab0.6.2-next.0含0.6.1-next.0与0.6.0两段累积变更后端基础设施依赖backstage/backend-defaults0.7.0-next.0、backstage/backend-plugin-api1.1.1-next.0、backstage/plugin-catalog-node1.15.1-next.0、backstage/plugin-events-node0.4.7-next.0等前端生态联动backstage/plugin-catalog-react1.15.1-next.0、backstage/plugin-scaffolder1.27.4-next.1等多为依赖升级与 UI 修复。本轮核心变更GitLab Catalog Provider 演进顶级组Top-level Group发现能力0.6.0引入的99dce5c提交实现了顶级组发现当配置中未显式定义group时GitlabOrgDiscoveryEntityProvider会自动发现并导入 GitLab 中的全局顶级组Global top-level group。这改变了此前必须手动指定group才能导入组/用户实体的约束自托管 GitLab 场景下配置可以更精简。从源码看这一能力依赖 GitLab GraphQL API 的descendantGroups查询递归拉取子组见 client.ts每次批量 100 个节点并按endCursor分页返回的组对象再交由defaultGroupEntitiesTransformer转换为 BackstageGroupEntity见 defaultTransformers.ts。成员关系relations语义的引入0.4.2的0476be3提交为 Group/User 关系建模引入了relations数组配置用于镜像 GitLab 真实的成员关系语义包括descendant子孙组关系INHERITED继承自上级组的成员关系shared-from-group通过群组共享获得的关系。同时旧的allowInherited布尔配置被标记为即将废弃官方迁移建议是改用relations数组catalog: providers: gitlab: development: relations: - INHERITED在 config.ts 中allowInherited与relations两个配置项仍被同时解析二者并存以兼容历史配置但关系类型枚举GroupMemberRelation已通过 GraphQL 的groupMembers(relations:)参数下发到 GitLab见 client.ts。配置解析与默认值汇总结合 changelog 与 config.ts 源码catalog.providers.gitlab.providerId下可用的配置项及默认值如下配置项类型默认值说明hoststring必填必须匹配integrations.gitlab中已配置的主机否则启动报错groupstring空字符串限定发现范围的组路径gitlab.com且orgEnabled: true时必填branchstring未定义指定读取 catalog-info 文件的具体分支优先级高于项目默认分支fallbackBranchstringmaster项目未定义默认分支时使用的兜底分支entityFilenamestringcatalog-info.yaml在仓库中查找的实体文件名projectPatternRegExp[\s\S]*按项目全路径正则过滤项目userPatternRegExp[\s\S]*按用户名正则过滤用户groupPatternstring | string[][\s\S]*按组全路径正则或正则数组过滤组orgEnabledbooleanfalse是否启用 Org Data用户/组发现relationsstring[][]成员关系类型数组INHERITED等allowInheritedbooleanfalse旧配置将被relations取代skipForkedReposbooleanfalse是否跳过 Fork 仓库includeArchivedReposbooleanfalse是否包含已归档仓库excludeReposstring[][]按项目全路径精确排除仓库restrictUsersToGroupbooleanfalse是否仅导入group指定组内的用户includeUsersWithoutSeatbooleanfalse是否导入未付费席位用户GitLab Free 场景useSearchbooleanfalse使用 GitLab 搜索 API 而非遍历项目topicsstring[]未定义仅发现带指定主题topic的项目membershipboolean未定义仅返回当前 token 有成员资格的项目scheduleobject未定义定时刷新计划frequency/timeout其他值得关注的配置演进includeArchivedRepos0.5.0引入默认false即归档仓库默认被跳过。实现上GitlabDiscoveryEntityProvider.ts 在遍历项目时通过archived: false参数从 API 侧过滤设置为true后才会纳入归档项目。excludeRepos0.4.0引入按path_with_namespace精确排除可用于剔除误入库的仓库。projectPattern0.1.6引入按正则过滤项目例如projectPattern: john/只保留 namespace 为john的项目。includeUsersWithoutSeat0.4.2引入默认false。当置为true时GitLab SaaS 场景下会导入未购买付费席位无 seat的用户如 GitLab Free。对应实现见 client.ts通过show_seat_info拉取席位信息默认按is_using_seat过滤打开开关后则仅过滤 bot 用户。restrictUsersToGroup0.3.21引入默认false。置为true后只导入group键所指向组内的用户而非整个组织自托管或根组SaaS的全部用户。HTTP 客户端选型反复fetch 与 node-fetch 的取舍本版本中一个值得注意的细节是 HTTP 客户端在两轮迭代中的反复切换0.6.05c9cc05从node-fetch切换到原生 fetch0.6.1-next.0575613f回退到node-fetch。此类用哪个 fetch的反复在 Backstage 依赖升级中并不罕见——原生 fetch 在 Node 版本、代理设置、超时行为及 TLS 处理上与node-fetch存在细微差异可能影响对 GitLab API 的调用兼容性。升级到本版本后如发现 GitLab 相关请求异常可优先排查 fetch 实现差异。此外更早版本还要求node-fetch版本不低于 2.7.093095ee升级时也需留意依赖锁定情况。后端插件注册方式的破坏性变更0.3.0中71114ac50e02提交引入了对插件导入方式的破坏性变更新后端系统New Backend System下模块导出由函数返回 feature改为直接导出BackendFeature对象注册方式相应变化// 旧写法不再推荐 import { examplePlugin } from backstage/plugin-example-backend; backend.add(examplePlugin); // 新写法 backend.add(import(backstage/plugin-example-backend));在0.4.2的d425fc4中进一步明确Modules, plugins, and services are nowBackendFeature, not a function that returns a feature. 当前仓库中的 catalogModuleGitlabDiscoveryEntityProvider.ts 正是这一规范的落地createBackendModule返回的就是BackendFeature内部通过catalogProcessingExtensionPoint注册GitlabDiscoveryEntityProvider并挂接GitLabScmEventsBridge含启动/关闭钩子。此外0.1.14中模块命名已按官方命名规范从gitlabDiscoveryEntityProviderCatalogModule调整为catalogModuleGitlabDiscoveryEntityProvider。从 Processor 到 Provider 的迁移路径changelog 完整保留了一条从旧GitlabDiscoveryProcessor迁移到新GitlabDiscoveryEntityProvider的路径这也是理解该模块演进的关键。迁移前使用catalog.locations加gitlab-discovery类型与代码内注册 Processor# app-config.yaml catalog: locations: - type: gitlab-discovery target: https://company.gitlab.com/prefix/*/catalog-info.yaml/* packages/backend/src/plugins/catalog.ts */ import { GitlabDiscoveryProcessor } from backstage/plugin-catalog-backend-module-gitlab; const builder await CatalogBuilder.create(env); builder.addProcessor( GitLabDiscoveryProcessor.fromConfig(env.config, { logger: env.logger }), );迁移后改为catalog.providers.gitlab声明式配置与 Provider 注册# app-config.yaml catalog: providers: gitlab: yourProviderId: # identifies your dataset / provider independent of config changes host: gitlab-host # Identifies one of the hosts set up in the integrations branch: main # Optional. Uses master as default group: example-group # Group and subgroup (if needed) to look for repositories entityFilename: catalog-info.yaml # Optional. Defaults to catalog-info.yaml/* packages/backend/src/plugins/catalog.ts */ import { GitlabDiscoveryEntityProvider } from backstage/plugin-catalog-backend-module-gitlab; const builder await CatalogBuilder.create(env); builder.addEntityProvider( ...GitlabDiscoveryEntityProvider.fromConfig(env.config, { logger: env.logger, schedule: env.scheduler.createScheduledTaskRunner({ frequency: { minutes: 30 }, timeout: { minutes: 3 }, }), }), );配套的迁移要点还包括branch语义拆分0.2.0起branch专指读取 catalog-info 文件的分支原含义更名为fallbackBranch项目无默认分支时的兜底分支。0.3.18还修复了fallbackBranch优先级错误覆盖 GitLab 默认分支的问题f271164skipReposWithoutExactFileMatch开启后项目中不存在与entityFilename完全匹配的文件时不再创建 Location 对象可显著减少对 GitLab 的 404 请求注意此模式不支持仓库文件路径中的 globgitlab.com 用户导入收敛0.3.0起 GitLab.com 的 Org Data 集成必须配置group否则后端启动失败。更早的0.3.3则改为通过 REST API 获取根组成员并过滤 bot 用户同时新增gitlab.com/saml-external-uid注解便于对接 OneLogin 等 IdP 的SignInResolver。事件驱动增量更新Provider 除定时全量刷新外还支持通过backstage/plugin-events-node接收 GitLab Webhook 事件实现增量更新仓库发现 Provider订阅gitlab.push主题TOPIC_REPO_PUSH。收到 push 事件后按 commit 中 added/removed/modified 文件与catalogFile匹配分别执行applyMutation({ type: delta })或connection.refreshtree 与 blob 双路径见 GitlabDiscoveryEntityProvider.tsOrg Data Provider订阅gitlab.group_create、group_destroy、group_rename、user_create、user_destroy、user_add_to_group、user_remove_from_group七个主题对应组/用户的增删改与成员关系变化见 GitlabOrgDiscoveryEntityProvider.ts。事件接入的前提是安装并启用backstage/plugin-events-backend并在 catalogModuleGitlabDiscoveryEntityProvider.ts 中注入eventsServiceRefWebhook 与 GitLab 原始事件的转换由GitLabScmEventsBridge负责其生命周期通过lifecycle.addStartupHook/addShutdownHook管理。事件桥接的解析逻辑可参考 GitLabScmEventsBridge.ts 及配套测试 analyzeGitLabWebhookEvent.test.ts。其他包变更速览包版本关键变更backstage/plugin-signals-backend0.3.0-next.1移除旧后端系统支持createRouter导出废弃须迁移到新后端系统backstage/create-app0.5.24-next.1dev脚本增加-j 2缓解本地开发时后端启动失败问题backstage/plugin-catalog-react1.15.1-next.0修复EntityListProvider /在offset模式下过滤器未变化时重复拉取数据导致的闪烁backstage/plugin-scaffolder等1.27.4-next.1rjsf/*依赖统一升级到5.23.2backstage/plugin-catalog-backend-module-msgraph0.6.6-next.1修复配置 schema 缺失参数backstage/plugin-techdocs-backend1.11.5-next.1修复配置 schema 缺失参数backstage/plugin-scaffolder-backend-module-github0.5.5-next.1支持创建仓库后自动订阅模仿 GitHub UI 行为升级建议与自查清单优先确认plugin-signals-backend0.3.0-next.1已删除旧后端系统路径使用createRouter的代码必须迁移核对 GitLab Provider 配置检查branch是否已按新语义改为fallbackBranchgitlab.com 的 Org Data 是否补充了groupallowInherited是否替换为relations数组确认新后端系统注册方式插件导入统一为backend.add(import(backstage/plugin-xxx))形式验证 HTTP 客户端行为本轮 fetch 实现有回退若生产环境对 GitLab 请求有异常关注node-fetch版本≥2.7.0与代理配置利用测试验证行为仓库内置了 GitlabDiscoveryEntityProvider.test.ts、GitlabOrgDiscoveryEntityProvider.test.ts 与 config.test.ts可作为升级后行为回归的参考基线关注依赖联动backend-defaults、backend-plugin-api、plugin-catalog-node等基础设施升级会向所有使用新后端系统的插件传导建议用 Upgrade Helper 生成完整清单后分批升级。整体来看v1.35.0-next.1对 GitLab 集成模块而言是一次以成员关系语义精确化、顶级组自动发现、新后端系统规范收敛为主轴的演进对多数使用者来说最需要立即响应的动作集中在plugin-signals-backend的旧系统移除与 GitLab Provider 的配置项重命名上。【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表