news 2026/9/11 19:14:44

Backstage Bitbucket Cloud 集成与 Catalog Location 配置完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Backstage Bitbucket Cloud 集成与 Catalog Location 配置完全指南

Backstage Bitbucket Cloud 集成与 Catalog Location 配置完全指南

【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage

本篇技术指南围绕 Backstage 中 Bitbucket Cloud(bitbucket.org)集成展开,讲解如何在 Backstage 的软件目录(Software Catalog)中加载存储在 Bitbucket Cloud 上的实体描述文件(如catalog-info.yaml)。你将掌握integrations.bitbucketCloud三种认证方式的完整配置(API token、App Password、OAuth 2.0 client credentials)、每个配置字段的含义与校验规则、认证背后的请求头生成原理,以及如何通过静态配置或catalog-import插件把 Bitbucket Cloud 仓库注册为 Catalog Location。

Bitbucket Cloud 集成在 Backstage 中的角色

Bitbucket Cloud 集成负责让 Backstage 与 bitbucket.org 交互,核心用途是从 Bitbucket Cloud 加载 Catalog 实体。实体可以通过两种方式加入:

  • 静态 Catalog 配置:在catalog.locations中声明指向 Bitbucket Cloud 上 YAML 文件的 URL,参见 静态 Location 配置;
  • catalog-import 插件:通过界面交互注册,详见仓库中的 catalog-import 插件。

从源码结构看,该集成被封装在@backstage/integration包的bitbucketCloud模块中(config.ts、BitbucketCloudIntegration.ts、core.ts),同时@backstage/plugin-bitbucket-cloud-common提供了一个面向 Bitbucket Cloud REST API 的通用客户端(BitbucketCloudClient.ts)。Catalog 后端的UrlReaderProcessor会借助这类集成理解如何根据给定 URL 拉取远程内容。

配置集成

集成配置位于app-config.yamlintegrations.bitbucketCloud键下,它是一个 provider 配置列表。对于 Bitbucket Cloud,最多只需要一个条目。共有三种认证方式。

方式一:API token(推荐)

integrations: bitbucketCloud: - username: user@domain.com # username -> user email token: my-token

这里username实际填写的是账号对应的用户邮箱。API token 的完整说明可参考 Atlassian 官方文档「Using API tokens」。

方式二:App Password(旧版,已弃用)

integrations: bitbucketCloud: - username: username appPassword: my-password

需要说明的是:从源码注释(config.ts)可以确认,appPassword被标记为 "Legacy" 并在代码中留有TODO,原因是 Bitbucket 计划在 2026 年 6 月 9 日彻底弃用 App Password。新配置请优先使用 API token 或 OAuth 2.0

方式三:OAuth 2.0 client credentials

integrations: bitbucketCloud: - clientId: client-id clientSecret: client-secret

该方式使用 OAuth 2.0 的 client credentials 流程获取访问令牌。

匿名访问与默认 provider

:::note

启动时 Backstage 会自动添加一个公开的 Bitbucket Cloud provider以便使用,因此只有在需要提供凭据时才需要显式列出它。

:::

这一行为在 config.ts 的readBitbucketCloudIntegrationConfigs中实现:如果显式配置的条目数为 0,会自动注入一个只有hostapiBaseUrl的匿名条目(host固定为bitbucket.orgapiBaseUrl固定为https://api.bitbucket.org/2.0)。也就是说,匿名读取公开仓库无需任何配置;配置了凭据则替换掉匿名条目。

凭据类型限制

:::note

该类型集成所需的凭据必须是以下三者之一:API tokenApp PasswordOAuth 2.0 client credentialsAtlassian 账号 API key(Atlassian Account API key)无法用于此集成。

:::

配置字段详解

bitbucketCloud下的单个条目包含以下元素(对应 BitbucketCloudIntegrationConfig 类型定义):

字段类型说明备注
usernamestring发起 API 请求所用的 Bitbucket Cloud 用户名(实际为邮箱)若未提供 username 与 token,则使用匿名访问
tokenstring用于认证请求的 API tokenusername搭配使用
appPasswordstringBitbucket Cloud 用户的 App Password旧版认证方式,Bitbucket 计划于 2026-06-09 弃用
clientIdstringOAuth 客户端 ID需与clientSecret成对出现,用于 OAuth 2.0 client credentials 流程
clientSecretstringOAuth 客户端密钥需与clientId成对出现
hoststring常量,恒为bitbucket.org无需在 YAML 中配置,由代码写入
apiBaseUrlstring常量,恒为https://api.bitbucket.org/2.0无需在 YAML 中配置,由代码写入
commitSigningKeystring用于提交签名的 PGP 私钥可选,供需要签名提交的场景使用

配置校验规则(源码级)

readBitbucketCloudIntegrationConfig(config.ts)在读取配置时会执行如下校验,违反即抛错:

  1. username 与凭据配对:若提供了username但既没有token也没有appPassword,抛出Bitbucket Cloud integration must be configured with as username and either a token or an appPassword.
  2. OAuth 完整性clientIdclientSecret必须成对出现,缺任一都会抛出Bitbucket Cloud integration has incomplete OAuth configuration. Both clientId and clientSecret are required.

这些规则均有对应测试覆盖,见 config.test.ts。此外,测试还验证了前端配置可见性tokenusernameappPasswordclientIdclientSecret等凭据在 frontend 可见性配置中会被隐藏,前端拿到的只是hostapiBaseUrl(见 config.test.ts),避免把机密泄露给浏览器端。

认证背后的实现原理

集成如何根据配置生成认证头?核心逻辑在 core.ts 的getBitbucketCloudRequestOptions与 BitbucketCloudClient.ts 的getAuthHeaders中,逻辑一致,按优先级分两种:

  1. OAuth 2.0(clientId + clientSecret):调用getBitbucketCloudOAuthTokenhttps://bitbucket.org/site/oauth2/access_token发送grant_type=client_credentials的 POST 请求,拿到的 token 以Authorization: Bearer <token>携带;
  2. Basic 认证(username + token/appPassword):将username:token(或username:appPassword)做 Base64 编码,以Authorization: Basic <base64>携带;
  3. 若两者都没有,则不附加任何认证头(匿名请求)。

OAuth token 的获取还实现了缓存与并发保护(core.ts):

  • 令牌缓存在内存中(单条缓存,因为 Bitbucket Cloud 集成最多一个);
  • expires_in(默认 3600 秒)计算过期时间,并预留 10 分钟宽限期以抵消时钟偏差;
  • refreshPromise跟踪正在进行的刷新请求,防止并发重复获取 token。

将 Bitbucket Cloud 仓库注册为 Catalog Location

配置好集成后,就可以把 Bitbucket Cloud 上的catalog-info.yaml加入 Catalog。

静态 Location 配置

app-config.yaml中声明url类型的 location 即可(参见 Catalog 配置):

catalog: locations: - type: url target: https://bitbucket.org/your-workspace/your-repo/src/main/catalog-info.yaml

url类型 location 由 Catalog 内置的标准处理器UrlReaderProcessor处理,无需额外配置 processor,但必须依赖对应的集成来解析如何拉取该 URL——这正是上文bitbucketCloud集成配置的意义所在。静态配置添加的 location 无法通过 Catalog location API 删除,只能从配置中移除。

catalog-info.yaml中存在语法错误,错误会被记录日志但不会中止处理;当发现多个同名(metadata.name相同)文件时,只处理其中一个,其余跳过并记录日志。

使用 catalog-import 插件注册

也可以使用 catalog-import 插件 在界面中粘贴 Bitbucket Cloud 仓库 URL 完成注册。该插件在解析 URL 时会用到集成能力,例如 LocationAnalyzer 中的相关解析逻辑。

URL 拉取与路径转换

集成在拉取文件时会做 URL 转换(core.ts 的getBitbucketCloudFileFetchUrl):

从: https://bitbucket.org/orgname/reponame/src/master/file.yaml 到: https://api.bitbucket.org/2.0/repositories/orgname/reponame/src/master/file.yaml

即把bitbucket.org的浏览 URL 转换为 Bitbucket Cloud REST API 的取值地址;仅接受srcraw两种文件路径类型。仓库的默认分支则通过查询仓库信息(mainbranch.name)获得(getBitbucketCloudDefaultBranch)。此外,集成的resolveUrl支持 Bitbucket Cloud 特有的行号语法#lines-42(区别于 GitHub 的#L42),resolveEditUrl会追加mode=edit&at=<ref>参数,见 BitbucketCloudIntegration.ts。

进阶:Bitbucket Cloud API 客户端

若需在自定义插件/处理器中直接查询 Bitbucket Cloud,可复用@backstage/plugin-bitbucket-cloud-commonBitbucketCloudClient(BitbucketCloudClient.ts)。它从集成配置构造实例(BitbucketCloudClient.fromConfig(config)),提供以下能力:

  • searchCode(workspace, query):在工作区中搜索代码;
  • listRepositoriesByWorkspace(workspace):列出工作区仓库;
  • listProjectsByWorkspace(workspace):列出工作区项目;
  • listWorkspaces():列出工作区;
  • listBranchesByRepository(repository, workspace):列出仓库分支。

所有列表类方法都返回WithPagination分页封装(pagination.ts),默认每页 100 条(pagelen: 100),既可通过getPage()取单页,也可通过iteratePages()异步迭代所有页。请求同样复用getAuthHeaders()的认证逻辑。

常见问题与注意事项

  • 匿名访问:公开仓库无需配置凭据,Backstage 会自动注入匿名 provider;
  • 凭据不生效:确认usernametoken/appPassword成对出现,否则启动时会抛出校验错误;
  • OAuth 配置不完整clientIdclientSecret必须同时配置,否则抛出 incomplete OAuth 错误;
  • Atlassian 账号 API key 不可用:必须使用 API token、App Password 或 OAuth 2.0 client credentials;
  • App Password 弃用时间线:Bitbucket 计划于 2026 年 6 月 9 日弃用 App Password,请尽早迁移到 API token 或 OAuth 2.0;
  • 前端配置可见性:凭据不会下发到浏览器端,前端仅能拿到hostapiBaseUrl

总结

integrations.bitbucketCloud是 Backstage 连接 bitbucket.org 的唯一入口,其三种认证方式(API token 推荐、App Password 旧版、OAuth 2.0 client credentials)分别对应不同的请求头生成策略,且配置校验、默认 provider 注入、OAuth 令牌缓存等行为均有源码与测试背书。配置好集成后,通过静态catalog.locations或 catalog-import 插件 即可把 Bitbucket Cloud 仓库中的catalog-info.yaml加载为 Catalog 实体,从而在 Backstage 中统一管理软件组件。相关实现可进一步阅读 config.ts、core.ts、config.test.ts 与 BitbucketCloudClient.ts。

【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 19:10:15

如何用 Packer 构建 DigitalOcean 快照并发布 Appsmith One-Click 新版本

如何用 Packer 构建 DigitalOcean 快照并发布 Appsmith One-Click 新版本 【免费下载链接】appsmith Platform to build admin panels, internal tools, and dashboards. Integrates with 25 databases and any API. 项目地址: https://gitcode.com/GitHub_Trending/ap/appsm…

作者头像 李华
网站建设 2026/9/11 19:08:24

【滚雪球学数学建模】第21节·复杂问题抽象与模型设计

🎓 本文收录于《滚雪球学数学建模》系列专栏 数学建模真正的难点,往往不在于掌握某一个公式或算法,而在于面对实际问题时,能否完成从 问题分析 → 模型构建 → 算法求解 → 结果验证 → 论文表达 的完整闭环。 本专栏正是围绕这一目标打造:从零基础出发,通过“滚雪球式”…

作者头像 李华
网站建设 2026/9/11 19:02:03

如何用单文件替代 Armoury Crate:G-Helper 完整使用指南

如何用单文件替代 Armoury Crate&#xff1a;G-Helper 完整使用指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, …

作者头像 李华
网站建设 2026/9/11 19:01:58

【JAVA毕设源码分享】基于 SpringBoot 框架的河南文化旅游网站的设计与实现 基于 SpringBoot 的河南文旅服务平台(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/11 19:01:39

2026 下半年 AI 产品的数据指标会往哪走

摘要&#xff1a;AI 行业正在集体告别"先爽后算账"的阶段——装机量、月活这些"爽指标"不再能说服投资人&#xff0c;留存、使用深度、单位经济成为新焦点。本文基于近期行业数据与报告&#xff0c;梳理 2026 下半年 AI 产品数据指标的三次迁移&#xff0c…

作者头像 李华