5. 发布到架构注册表
5m

概览

现在是 GraphOS 不可或缺的一个组成部分的时候了:架构注册表!

在本课程中,我们将

  • 了解 架构注册表及其用途
  • 了解 流程
  • 使用 将架构发布到架构注册表
  • 在 Studio 中检查 的结果

什么是架构注册表?

从本质上讲,架构注册表是我们的架构的一个版本控制系统。它存储我们的架构更改历史记录,跟踪已添加、修改和删除的类型和 。注册表支持 的几乎所有功能。

类似于我们将变更提交并推送到 Git 仓库中代码库,我们应该将 的每个新版本推送到注册中心中。注册中心负责跟踪所有子图并将其组合为一个 。多亏了注册中心,我们才能运行 ,就像我们在上一节课中所做的那样。会根据存储在注册中心中的模式检查我们的模式变更。

在本课程中,我们从一个 在我们的 中开始。随着我们开始添加更多子图,我们将继续利用模式注册中心的力量!

当我们将 的新版本发布到注册中心时,我们触发在 中的

启动过程

一个 启动表示向 更新模式的完整过程。

当模式注册中心获取 的新版本或更新版本时,它开始 构建 。模式注册中心尝试将所有模式从其注册的 合并到一个超图模式中。这个过程也称为 组合

如果失败,我们将在 Studio 中看到一个错误,流程会到此停止。不要紧张:我们可以使用错误信息在中修复此问题,然后再次尝试用发布子图。

如果成功且没有验证错误,架构注册表会生成

架构注册表会自动将发送到中的内部服务中,名为 Apollo Uplink。Uplink是一个服务器,用于存储每个图的最新从 Uplink 提取最新架构,并使用此新架构来响应客户端请求。

由此,完成!

协调架构和代码变更

到目前为止,我们只讨论了架构变更以及如何将其发布到中。但我们不能忘记代码库变更!这些变更包括我们对函数的更改,以便使我们的架构和架构文件本身正常工作。我们需要将本地变更部署到生产环境中。

要协调架构和代码变更,计划如下

  1. 将代码库变更(我们对schema.graphqlresolvers.js所做的更改)合并到 GitHub 存储库的main分支中。

  2. 的运行时代码部署到 Railway(此操作会自动完成,Railway 正在监听我们 GitHub main分支的变更)。

  3. 发布 (这会触发 流程)。

理想情况下,这可以通过我们的 CI/CD 管道完成所有后续工作。首先,我们将手动演示此流程,以熟悉我们需要的命令及其结果位置。在下一节课程中,我们将使用 GitHub Actions 设置一个 CI/CD 管道来自动完成此操作。

注意:根据你选择的部署平台,你的计划可能有所不同!例如,Railway 会自动部署 main分支中的最新变更,但你可能希望对该流程有更多控制,或从其他分支部署。或许你有一个预生产环境用于在发布到生产环境之前测试变更。我们在 航程 III 课程中介绍了在发布流程中添加 staging环境时发布流程可能会是什么样子。你还可以在 这篇 Apollo 技师说明中详细了解部署变更的常规流程。

合并代码库变更

好的,让我们开始吧!首先,让我们合并我们的代码库变更。

让我们提交之前所做的变更并直接将它们推送到 main分支。(我们现在处于教程环境中,所以这样做是可以的!在下一节课中,你将看到更符合实际情况的流程,使用 CI/CD 工作流)。

  1. 打开一个新的终端。

  2. 添加我们更改的文件。

    git add schema.graphql src/resolvers
  3. 提交这些变更,并附加一条消息,清楚地解释我们已完成的操作。

    git commit -m "Deprecate Ingredient.text field. Use detailedDescription instead."
  4. 将变更推送到 GitHub 仓库。

    git push -u origin main

第一步完成!

  1. 将我们的代码库更改合并到我们 GitHub 存储库的 main分支中。

  2. ⏭️ 将子图服务器的运行时代码部署到 Railway。

  3. 发布到

第 2 步不需要我们做太多工作!一旦我们更改登陆 main分支,Railway 将自动开始其部署过程。

前往你的 Railway 应用程序并查看加载栏,直到它显示已成功无问题地部署!如果你导航到你的服务器 URL,不会有任何可见更改,但我们知道,在这背后,这个 准备好了一个新的 和一个弃用的字段!

  1. 将我们的代码库更改合并到我们 GitHub 存储库的 main分支中。

  2. 将子图服务器的运行时代码部署到 Railway。

  3. ⏭️ 将子图模式发布到 GraphOS。

让我们解决最后一步!

rover subgraph publish

我们需要将我们的新 发布到

要执行此操作,我们会使用 rover subgraph publish命令,使用以下参数:

rover subgraph publish <GRAPH_REF> \
--schema <SCHEMA_FILE_PATH> \
--name <SUBGRAPH_NAME>

它看起来非常类似于 rover subgraph check命令!

注意:请记住,你可以在 Studio 的图形的 README 页面的顶部找到你的

发布我们的子图更改

让我们开始吧!在终端窗口中,粘贴 rover subgraph publish命令。确保将参数替换为 你自己的值。

rover subgraph publish learning-cats-supergraph@current \
--schema schema.graphql \
--name space-courses

如果一切顺利,我们应该会看到终端输出和一条消息,确认 已发布,已更新!

在 Studio 中检查启动

将架构发布到注册表后会发生什么?开始了!让我们看看 Studio 中的这个流程。

导航至 启动页面。单击列表中的最新

https://studio.apollographql.com

The Studio Launches page showing the results of the latest launch

我们可以看到此特定 启动序列部分遵循我们之前讨论的步骤:

  • 构建完成是指构建 的过程(也称为 )。
  • 已发布架构指的是 已提供给 Apollo Uplink。
  • 启动完成不言自明!我们的启动已成功完成!🎉

在右侧,我们还可以查看 输出和架构更改的摘要。

https://studio.apollographql.com

The Studio Launches page showing the supergraph schema button and a summary of changes

如果一切看起来都很顺利,我们应该可以 detailedDescription 以获取成分。

让我们转到 Explorer 并运行 以检索随机食谱的成分及其详细说明。

query GetRandomRecipeIngredients {
randomRecipe {
ingredients {
detailedDescription
}
}
}

您应该会看到数据返回!让我们再试一次,这次在 中添加 text

query GetRandomRecipeIngredients {
randomRecipe {
ingredients {
detailedDescription
text
}
}
}

查询正常运行并成功返回,但我们在 Studio 中收到警告(这条黄色的波浪线警告!)称 text已弃用,不再使用。

我们发布成功了!🎉

练习

Apollo schema registry 在哪些方面与 Git 版本控制系统类似?

重点要点

  • schema registry 是我们 schema 的版本控制系统。它存储我们 schema 的更改历史记录,跟踪已添加、已修改和已删除的类型和 。注册表负责跟踪所有 并将其合成一个
  • 一个 发布表示对 执行 schema 更新的完整过程。在将 schema 发布到 时,会触发
  • 要发布 ,请使用 rover subgraph publish命令。
  • 我们可以通过 Studio 的 页面来检查 的结果。

接下来

干得漂亮!我们已经借助安全而自信地对超图谱做出了更改。我们通过手动完成所有这些步骤实现了更改,运行并从终端发布命令,但这些工作实际上应该存在于自动化 CI/CD 管道中。下节课我们将设置好一个管道!

上一步

分享你对本课程的问题和意见

此课程当前处于

测试版
.你的反馈有助于我们改进!如果你遇到了困难或困惑,请告诉我们,我们会帮助你。将公开发表所有意见,且发表的意见必须遵守 Apollo 行为准则。请注意,已解决或处理的意见可能会被移除。

你需要一个 GitHub 帐户才能在下面发帖。还没有吗? 转到我们的 Odyssey 论坛发帖。