I want to setup Github Actions for a dbt project and I need to parse the content of a json key from GCP to the profile.yml at the root of my project. I have set-up a repository secret in Github and just pasted the content of the json file in it. My workflow.yml looks like this:
name: Build and Push Docker Image to Google Cloud Artifact Registry
on:
push:
branches:
- feature_branch1
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Check Out Repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Build Image
uses: docker/build-push-action@v2
with:
context: .
push: false
load: true
tags: bi-test-image:latest
build-args: |
SERVICE_KEY=${{ secrets.SERVICE_KEY }}
- name: Run dbt tests
run: |
docker run -e SERVICE_KEY=$SERVICE_KEY bi-test-image:latest /bin/bash -c "dbt deps && dbt source snapshot-freshness"
- name: Login to Google Cloud Registry
uses: docker/login-action@v1
with:
registry: europe-west1-docker.pkg.dev
username: _json_key
password: ${{ secrets.BI_ARTIFACTORY_SECRET }}
- name: Configure Docker to use the gcloud command-line tool as a credential helper
run: gcloud auth configure-docker europe-west1-docker.pkg.dev-docker.pkg.dev
- name: Push Image to Google's Artifact Registry
if: ${{ success() }}
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: europe-west1-docker.pkg.dev/project-id/bi-artifacts/bi-test-image:latest
and this is how my Dockerfile looks:
FROM python:3.11-slim-buster
WORKDIR /app
COPY dbt .
ARG SERVICE_KEY
# Write the service key to a file
RUN echo "${SERVICE_KEY}" > /service_account_key.json
# Install dbt
RUN pip install --no-cache-dir dbt-bigquery
# Run dbt when the container launches
RUN dbt deps && dbt source snapshot-freshness
My profiles.yml looks like this:
expresssteuer_data_platform:
target: dev
outputs:
dev:
type: bigquery
method: service-account-json
service_account_json: "{{ env_var('SERVICE_KEY') }}"
project: "project-id"
dataset: "dwhdev"
location: "europe-west1"
threads: 8
timeout_seconds: 600
priority: interactive
keyfile: '/service_account_key.json'
dbt source snapshot-freshness throws an error:
Database Error
'NoneType' object has no attribute 'keys'
Any idea what I am doing wrong?
Thanks a lot in advance