Github Actions部署dbt项目Docker构建报错:找不到dbt_project.yml
问题描述
我在为dbt项目配置Github Actions时遇到了问题,以下是我的配置文件和报错信息:
Workflow YAML 文件
name: Build and Push Docker Image to Google Cloud Artifact Registry on: push: branches: - feature_branch_1 jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Check Out Repository uses: actions/checkout@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to Google Cloud Registry uses: docker/login-action@v1 with: registry: europe-west3-docker.pkg.dev username: _json_key password: ${{ secrets.ARTIFACTORY_SECRET }} - name: Build and push Docker image run: | docker build -t gcr.io/project_name/image_name:$GITHUB_SHA . echo ${{ secrets.ARTIFACTORY_SECRET }} | docker login -u _json_key --password-stdin https://gcr.io docker push gcr.io/project_name/image_name:$GITHUB_SHA
Dockerfile 文件
FROM python:3.11-slim-buster WORKDIR /home COPY . /home # Install dbt RUN pip install --no-cache-dir dbt-bigquery # Run dbt when the container launches RUN dbt deps && dbt source snapshot-freshness
报错信息
流水线在“Build and push Docker Image”步骤的第5/5步(RUN dbt deps && dbt source snapshot-freshness)失败,报错:
Runtime Error
No dbt_project.yml found at expected path /home/dbt_project.yml
我对CI/CD不太熟悉,本地启动容器时会进入容器查看代码目录,但不知道在Github Actions里怎么操作。想问下哪里操作错了?YAML和Dockerfile有没有冲突?
问题原因与解决办法
核心问题
你的dbt项目代码实际存放在仓库的dbt子目录中,但Dockerfile里用了COPY . /home,把整个仓库根目录的内容复制到容器的/home目录下,导致dbt_project.yml并没有在容器的/home路径下,而是在/home/dbt目录里,所以dbt命令找不到配置文件。
解决步骤
修改Dockerfile中的复制命令,只把dbt子目录的内容复制到容器的工作目录/home下:
FROM python:3.11-slim-buster WORKDIR /home # 替换原来的 COPY . /home,只复制dbt子目录的内容到当前工作目录 COPY dbt . # Install dbt RUN pip install --no-cache-dir dbt-bigquery # Run dbt when the container launches RUN dbt deps && dbt source snapshot-freshness
额外说明
- 若要在Github Actions中查看容器内容,可以在构建步骤后添加临时调试步骤,启动容器并查看目录结构,示例如下:
- name: Debug container directory run: | docker build -t temp-image . docker run --rm temp-image ls -la /home
执行后可在Actions日志中看到容器内/home目录的内容,确认文件路径是否正确。
- Workflow YAML和Dockerfile本身没有冲突,问题仅出在Dockerfile的复制路径与你的项目目录结构不匹配。
内容的提问来源于stack exchange,提问作者Moritz
相关产品推荐
相关产品推荐

