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

GitHub Actions运行dbt build(含state选择器)提示找不到对比manifest.json

问题:dbt Core GitHub Actions自动化部署中state选择器报错

背景

我们有一个dbt Core项目仓库,正尝试通过GitHub Actions实现部署自动化。主分支的manifest.json存储在另一个仓库中,我们在当前项目目录创建了prod-run-artifacts文件夹,并通过GitHub Actions将该JSON文件复制过来,同时执行dbt compile --target "dev" --profiles-dir '.github/profiles/'命令生成当前版本的manifest。

执行命令

执行以下build命令时出现错误:

dbt build --select "state:modified+" --target "dev" --defer --target-path prod-run-artifacts --profiles-dir '.github/profiles/'

错误信息

Unable to do partial parsing because saved manifest not found. Starting full parse.
Runtime Error
Got a state selector method, but no comparison manifest

已尝试操作

  • 前置步骤执行chmod 777 -R ./赋予文件夹全部权限
  • 本地环境运行一切正常
  • ls命令验证文件存在:
ls ./prod-run-artifacts
shell: /usr/bin/bash -e {0}
manifest.json
ls ./target
shell: /usr/bin/bash -e {0}
manifest.json
partial_parse.msgpack
perf_info.json
semantic_manifest.json

解决方案

报错的核心原因是使用state:modified+选择器时,没有通过--state参数指定对比用的manifest所在目录。

你需要在build命令中添加--state ./prod-run-artifacts参数,告诉dbt去哪里找用于对比的历史manifest文件。修改后的命令如下:

dbt build --select "state:modified+" --target "dev" --defer --target-path prod-run-artifacts --state ./prod-run-artifacts --profiles-dir '.github/profiles/'

解释:

  • --target-path是指定当前构建输出的目录,而--state是指定用于状态对比的历史artifact目录,两者作用不同,不能混淆。
  • 你已经把主分支的manifest.json放到了prod-run-artifacts目录,所以通过--state指向这个目录,dbt就能找到对比用的manifest,从而正常使用state选择器。

内容的提问来源于stack exchange,提问作者Paniz Asghari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:02:43