扩展 Backstage: 定义自定义注解并防止保留字冲突

大家好!今天,我们将深入探讨最大限度提升 Backstage 灵活性的注解 (Annotations),特别是其中对于管理至关重要的命名空间 (Namespacing) 规则。🚀

在运营 Backstage 时,您可能经常希望在基本功能之外添加组织特有的数据。这时就需要使用注解。但是,随意使用任何名称都可能导致系统内部冲突。今天,我们将完美地整理出“绝对不能使用的保留前缀”以及正确的命名空间策略!💡


🏗️ 什么是 Backstage 注解?

在 Backstage 的 catalog-info.yaml 文件中,metadata.annotations 部分是存储有关实体非结构化元数据的地方。

插件读取这些注解以启用特定功能或获取数据。例如,它们可能包含“此组件的 GitHub 仓库在哪里?”或“此服务的 ArgoCD 应用程序名称是什么?”之类的信息。🏷️


🚫 核心问题:为核心组件保留的前缀是什么?

开门见山地说,为 Backstage 核心功能和官方插件保留的前缀就是 backstage.io/。

为什么要避免使用此前缀?

  • 防止系统冲突: 这是为了防止 Backstage 引擎内部使用的逻辑与您的自定义配置发生冲突。
  • 未来兼容性: 即使现在未使用,将来 Backstage 更新时可能会添加名为 backstage.io/new-feature 的官方注解。如果您届时使用了相同的名称,系统可能会变得混乱。解开缠绕的线团真的很难!🧶

🌟 正确的命名空间策略 (自定义注解)

在组织内部定义自定义注解时,建议遵循以下规则:

1. 使用组织专属前缀 🏢

最好的方法是使用公司域名作为前缀。

  • 反例: my-custom-plugin: value (无命名空间)
  • 正例: acme.com/project-id: “PRJ-123”

2. 利用子域名 📂

如果它用于特定团队或工具,请进一步细分。

  • engineering.acme.com/cost-center: “DEPT-404”
  • security.acme.com/scan-id: “SCAN-99”

🛠️ 实践示例:配置 catalog-info.yaml

让我们通过代码来看看它是如何实际应用的。

YAML

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: billing-service
  annotations:
    # ✅ 官方/核心注解 (使用 backstage.io 前缀)
    backstage.io/managed-by-location: url:https://github.com/...
    backstage.io/techdocs-ref: dir:.

    # ✅ 外部官方插件注解 (使用各服务域名)
    github.com/project-slug: backstage/backstage
    argocd.io/app-name: billing-app

    # ✅ 我们组织自己的自定义注解 (使用我们的域名)
    company.com/team-slack-channel: "#team-billing"
    company.com/on-call-rotation: "https://pagerduty.com/..."
spec:
  type: service
  owner: billing-team
  lifecycle: production

如上例所示,将 backstage.io/ 留给系统管理区域,并构建我们自己的区域是可维护性的核心。🛠️


🧐 常见问题 (FAQ)

Q: 如果不带前缀使用注解会怎样?

A: 暂时可能可以运行,但随着规模的扩大,将难以追踪哪个插件使用了哪个值。之后,如果出现同名的其他数据,可能会发生覆盖错误。😱

Q: 除了 backstage.io/ 之外,还有其他需要注意的前缀吗?

A: 即使不使用这些特定工具,也习惯性地避免使用广泛使用的开源插件的前缀(例如:github.com/, jenkins.io/, sentry.io/)。


🏁 结论:整洁的命名空间构建健康的目录!

Backstage 的软件目录就像一个宝库,承载着组织的所有遗产。通过尊重 backstage.io/ 这一神圣区域并构建我们自己的系统化命名空间,即使管理数千个服务,您也能运营一个完美、无混乱的平台。🚀



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注