You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有通过GitLab CI迁移Hasura迁移文件与元数据的模板?

GitLab CI 迁移Hasura数据库Schema与元数据配置参考

首先你需要先在本地用Hasura CLI初始化项目,生成对应的Schema迁移文件与元数据文件,并提交到GitLab仓库。之后在GitLab项目的「设置- CI/CD -变量」中添加以下加密变量:

  • HASURA_GRAPHQL_ENDPOINT:你的Hasura实例访问地址
  • HASURA_GRAPHQL_ADMIN_SECRET:Hasura实例的管理员密钥
  • HASURA_PROJECT_DIR:仓库中Hasura项目文件所在的目录,若存放在根目录可留空

.gitlab-ci.yml 模板

# 使用官方Hasura CLI镜像,版本需和你的Hasura服务版本保持一致
image: hasura/graphql-cli:v2.37.0

stages:
  - validate
  - deploy

# 配置校验任务,仅在合并请求、非主分支提交时运行
validate-hasura-config:
  stage: validate
  script:
    - cd ${HASURA_PROJECT_DIR:-.}
    # 校验迁移文件合法性
    - hasura migrate status --endpoint "$HASURA_GRAPHQL_ENDPOINT" --admin-secret "$HASURA_GRAPHQL_ADMIN_SECRET"
    # 校验元数据合法性
    - hasura metadata validate --endpoint "$HASURA_GRAPHQL_ENDPOINT" --admin-secret "$HASURA_GRAPHQL_ADMIN_SECRET"
  rules:
    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

# 部署任务,仅在主分支提交时运行,可添加when: manual改为手动触发
deploy-hasura:
  stage: deploy
  script:
    - cd ${HASURA_PROJECT_DIR:-.}
    # 应用Schema迁移
    - hasura migrate apply --endpoint "$HASURA_GRAPHQL_ENDPOINT" --admin-secret "$HASURA_GRAPHQL_ADMIN_SECRET"
    # 应用元数据
    - hasura metadata apply --endpoint "$HASURA_GRAPHQL_ENDPOINT" --admin-secret "$HASURA_GRAPHQL_ADMIN_SECRET"
    # 重载元数据确保配置生效
    - hasura metadata reload --endpoint "$HASURA_GRAPHQL_ENDPOINT" --admin-secret "$HASURA_GRAPHQL_ADMIN_SECRET"
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      # 去掉下面的注释即可改为手动触发部署
      # when: manual
      allow_failure: false

注意事项

  • 必须保证Hasura CLI镜像版本和你线上运行的Hasura服务版本一致,否则会出现兼容性问题导致迁移失败
  • 迁移执行顺序固定为「Schema迁移→元数据应用→元数据重载」,避免元数据引用未创建的数据库资源导致报错
  • 生产环境建议开启部署任务的手动触发规则,避免提交代码后自动执行变更引发线上故障
  • 若需要回滚,可在CI任务中额外添加hasura migrate rollback相关命令,按需指定回滚版本即可

内容的提问来源于stack exchange,提问作者Jason M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:09:03