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
相关产品推荐
相关产品推荐

