Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

How to configure postgresql to run FastAPI tests in BitBucket Pipelines

Immanuel Kolapo August 17, 2020

Hello everyone, I'm trying to set up pipelines for a FastAPI boilerplate that I am working on. What I have so far failed and I can't figure out why.  Here's what I have:

`bitbucket-pipelines.yml`

imagepython:3.7.4-slim-buster
options:
max-time5

definitions
:
steps:        
step&test            
nametest            
script:
>-
                 docker build - f {{cookiecutter.app_name}}/
{{cookiecutter.service_name}}/tests.dockerfile
                    -t boilerplate ./{{cookiecutter.app_name}}/
{{cookiecutter.service_name}}
                - >- 
docker run --env POSTGRES_HOST=host.docker.internal
 
                   --add host
host.docker.internal:$BITBUCKET_DOCKER_HOST_INTERNAL 
boilerplate
/bin/bash -c /run-tests.sh            
services:
docker
         - postgres 
caches:
         - docker
services        
postgres:
imagepostgres
environment:
POSTGRES_HOST_AUTH_METHODtrust
pipelines:
pull-requests:
'**':
step*test

I'm connecting to my database with:

DATABASE_URL = os.getenv('DATABASE_URL''postgresql://postgres@localhost/postgres')

Here's the error I got when I ran the pipeline:

E   sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
E Is the server running on host "localhost" (127.0.0.1) and acceptingE TCP/IP connections on port 5432?
E
E (Background on this error at: http://sqlalche.me/e/13/e3q8)

I added `postgresql://postgres@localhost/postgres` because that's how BitBucket sets up postgresql for a default user. What am I doing wrong?

1 answer

1 accepted

0 votes
Answer accepted
Immanuel Kolapo August 18, 2020

Based on what I found in this article, here's a snippet:

If you need to communicate from a service running in docker to a service running in your build container, when starting the service provide it the following host entry using --add-host host.docker.internal:$BITBUCKET_DOCKER_HOST_INTERNAL you can then access the service using host.docker.internal:port

I was supposed to specify host.docker.internal as my host:

DATABASE_URL = os.getenv('DATABASE_URL', 'postgresql://postgres@host.docker.internal/postgres')

instead of using localhost

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events