4

I am successfully let runner be able to do git clone in order to install Django dependencies. Now I am solving next problem. It is Postgres

My ultimate goal is pytest, but for now I will test gitlab-ci script with python manager.py test.

Successfully installed appnope-0.1.0 boto3-1.4.7 botocore-1.7.47 certifi-2017.11.5 chardet-3.0.4 collectfast-0.5.2 decorator-4.1.2 django-1.11.7 django-choices-1.6.0 django-cors-headers-2.1.0 django-countries-5.0 django-debug-toolbar-1.9.1 django-dirtyfields-1.3 django-environ-0.4.4 django-extensions-1.9.7 django-filter-1.1.0 django-geoposition django-guardian-1.4.9 django-money django-reversion-2.0.10 django-s3-folder-storage-0.5 django-storages-1.6.5 djangorestframework-3.7.3 djangorestframework-jwt-1.11.0 docutils-0.14 freezegun-0.3.9 gevent-1.2.2 greenlet-0.4.12 gunicorn-19.7.1 idna-2.6 ipython-6.2.1 ipython-genutils-0.2.0 jedi-0.11.0 jmespath-0.9.3 model-mommy-1.4.0 olefile-0.44 parso-0.1.0 pexpect-4.3.0 pickleshare-0.7.4 pillow-4.3.0 prompt-toolkit-1.0.15 psycopg2-2.7.3.2 ptyprocess-0.5.2 py-1.5.2 py-moneyed-0.7.0 pygments-2.2.0 pyjwt-1.5.3 pytest-3.2.5 pytest-django-3.1.2 python-dateutil-2.6.1 pytz-2017.3 requests-2.18.4 rest-framework-generic-relations-1.1.0 s3transfer-0.1.11 simplegeneric-0.8.1 six-1.11.0 sqlparse-0.2.4 traitlets-4.3.2 typing-3.6.2 urllib3-1.22 wcwidth-0.1.7 werkzeug-0.12.2
$ python manage.py test
/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py:267: RuntimeWarning: Normally Django will use a connection to the 'postgres' database to avoid running initialization queries against the production database when it's not needed (for example, when running tests). Django was unable to create a connection to the 'postgres' database and will use the default database instead.
  RuntimeWarning
Creating test database for alias 'default'...
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
    self.connect()
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 189, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?

.gitlab-ci.yml

image: python:3.6
services:
  - postgres:latest

variables:
  POSTGRES_DB: poinkdb
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres

before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - ssh-keyscan github.com >> ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  - git config --global user.email "[email protected]"
  - git config --global user.name "sarit"
  - python -V
  - pip install -r requirements.txt

test:
  tags:
    - poink
    - Elcolie
  script:
  - sleep 10
  - python manage.py test

FYI:
I have searched on docker and postgres gitlab-ci. But found irrelevant topic. They are docker networking between Django and Postgres and put the config to single docker-compose. I know docker-compose. I have been using it for a year.

But they are not my case. I am asking inside the runner.

References:

https://medium.com/pyslackers/setting-up-tests-in-gitlab-ci-for-django-project-with-docker-engine-44f01940424d
https://github.com/gitlabhq/gitlabhq/blob/master/vendor/gitlab-ci-yml/Django.gitlab-ci.yml

Solution:
@dvnguyen To remind I myself in the next time.

test:
  tags:
    - poink
    - Elcolie
  variables:
    DATABASE_URL : "postgres://postgres:postgres@postgres:5432/poinkdb"
  script:
  - python manage.py test

1 Answer 1

7

Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?

Postgres is not in the "localhost" for the gitlab-ci runner. The gitlab-ci runs on a container, and the postgresql runs on a different one.

As specified in your .gitlab-ci.yml, the Postgres container can be discovered by just using the name "postgres": services: - postgres:latest

So replacing "localhost" by "postgres" in your code would solve your problem.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much. Please wait 2 minutes. I will check your answer as a correct one.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.