将模式发布到 GraphOS
使用 Rover CLI 将模式作为 CI/CD 管道的一部分发布
每次您对一个图谱's schema, you should publish those changes to Apollo GraphOS using the Rover CLI or the Platform API. Doing so ensures that Apollo always has an up-to-date understanding of your graph.
This page covers how to publish different kinds of schemas using the Rover CLI. Consult the Platform API reference to learn how to use the API for publication.
💡 提示
将 schema proposals集成到 schema checks 中,以确保您的组织只发布经过批准的更改。 了解更多。
先决条件
- 安装 Rover CLI.
- 验证Rover 使用 GraphOS.
发布子图模式
GraphOS中的每个超级图都包含一个或多个子图。 这些是您的组织中由GraphQL驱动的独立微服务。
您需要分别将每个子图的架构发布到Apollo,使用rover subgraph publish
:
rover subgraph publish --schema ./products.graphql --name products docs-example-graph@current --routing-url https://products.example.com
要将子图架构发布到Apollo:
确定要发布的变体中的子图名称。您可以从GraphOS Studio的“子图”页面查看现有子图的名称。
如果您是首次发布子图,还需要获取该路由URL。这是您的路由器与子图通信时使用的URL。
- 如果GraphOS已经知道您的子图的路由URL,您无需提供此值,除非您要更改它。
运行
rover subgraph publish
命令,并以以下方式之一提供您的'子图'模式的架构:# Provide a local .graphql file pathrover subgraph publish my-graph@my-variant --name locations --routing-url https://flyby-locations-sub.herokuapp.com/ --schema ./schema.graphql# Provide an introspection result via stdinrover subgraph introspect https://127.0.0.1:4000 | rover subgraph publish my-graph@my-variant --name locations --routing-url https://flyby-locations-sub.herokuapp.com/ --schema -
无论何时您发布子图模式,GraphOS都会尝试将您的子图模式架构的所有最新版本组合成单个超级图模式,供路由器使用:
如果这个组合成功,则路由器会更新结果。这使客户端能够查询任何新添加的字段,并防止它们查询任何已删除的字段。
您可以使用rover supergraph fetch
命令手动获取您路由器的最新超级图模式,或者从GraphOS Studio中的超级图'架构' > SDL'页面获取。
发布单行图架构
ⓘ 注意:
这些说明仅适用于单行图,不建议使用。
决定您如何向Rover提供您的服务器架构。您可以选择:
- 在本地机器上保存的
.gql
或.graphql
文件,或 - 在运行的服务器上执行 introspection查询以获取模式
- 在本地机器上保存的
运行
rover graph publish
命令,以以下方式之一提供您的架构:# Provide a local .graphql file pathrover graph publish my-graph@my-variant --schema ./schema.graphql# Provide an introspection result via stdinrover graph introspect https://127.0.0.1:4000 | rover graph publish my-graph@my-variant --schema -如上图所示,您提供给
rover graph publish
的-first位置参数是一个图形引用,这是一个字符串,用于指定GraphOS中某个特定图形的特定变体。
使用持续交付发布
要充分利用GraphOS,您应立即在生产架构中发布每个更新。因此,架构发布应成为您持续交付流程的一部分。
以下是在CircleCI中进行架构发布的示例持续交付配置
version: 2jobs:build:docker:- image: circleci/node:8steps:- checkout- run: npm install- run:name: Install Rovercommand: |# Download and install Rover# This is pinned to a specific version for predictability in CIcurl -sSL https://rover.apollo.dev/nix/v0.8.1 | sh# This allows the PATH changes to persist to the next `run` stepecho 'export PATH=$HOME/.rover/bin:$PATH' >> $BASH_ENV# Start the GraphQL server. If a different command is used to# start the server, use it in place of `npm start` here.- run:name: Starting servercommand: npm startbackground: true# make sure the server has enough time to start up before running# commands against it- run: sleep 5# When running on the 'main' branch, push the latest version# of the schema to GraphOS.- run: |if [ "${CIRCLE_BRANCH}" == "main" ]; thenrover subgraph publish my-graph@my-variant \--schema ./schema.graphql \--name locations \--routing-url https://products.example.comfi