2017-12-25 29 views
1

runnerDjangoの依存関係をインストールするためにgit cloneを正常にできるようになりました。今私は次の問題を解決しています。それはPostgresGitlabランナーDockerエグゼキュータがpostgresサービスに接続していません

私の最終目標はpytestですが、今のところ私はpython manager.py testgitlab-ciスクリプトをテストします。

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:私はドッキングウィンドウとpostgresのgitlab-CI上で検索しました
。しかし、無関係のトピックが見つかりました。彼らはDjangoとPostgresの間のドッキングネットワークであり、設定を単一のdocker-composeにする。私はdocker-composeを知っています。私は1年間それを使用しています。

しかし、私の場合ではありません。私はrunnerの中に尋ねています。

参考文献:

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

ソリューション:
次の時間に私自分自身を思い出させるために@dvnguyen。

test: 
    tags: 
    - poink 
    - Elcolie 
    variables: 
    DATABASE_URL : "postgres://postgres:[email protected]:5432/poinkdb" 
    script: 
    - python manage.py test 

答えて

1

サーバーのホスト "localhost" を(127.0.0.1)上で実行され、ポート5432上の TCP/IPの接続を受け入れますか?

Postgresはgitlab-ciランナーの "localhost"にありません。 gitlab-ciはコンテナ上で動作し、postgresqlは別のもので動作します。

あなた.gitlab-ci.ymlで指定されているように、Postgresのコンテナは名前だけ「のpostgres」を使用することによって発見することができます。 services: - postgres:latest

だからあなたのコード内の「postgresの」では「localhost」を交換して解決するだろうあなたの問題。

+0

ありがとうございました。 2分ほどお待ちください。私はあなたの答えを正しいものとしてチェックします。 – Sarit

関連する問題