Исполнитель Docker в Gitlab Runner преобразует базу данных в локальный хост вместо псевдонима через доктрину Symfony - PullRequest
0 голосов
/ 22 января 2019

У меня есть проект Symfony со следующим .gitlab-ci.yml файлом:

test:
    image: registry.gitlab.com/MYIMAGEURL:latest

    variables:
        # POSTGRES - Use the values from the .env.test file.
        POSTGRES_DB: db
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: asdfasdf

        # MISC
        APP_ENV: test

    services:
        -   name: postgres:10
            # "postgresql" is what we use in the .env.test file
            alias: postgresql

    before_script:
        - cd my-project

    script:
        - cp .env.test .env
        - composer install

Сбой Symfony cache:clear --env=test, когда доктрина пытается установить соединение:

SQLSTATE[08006] [7] 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: Address not available                    
    Is the server running on host "localhost" (::1) and accepting        
    TCP/IP connections on port 5432? 

My .envФайл .test имеет следующий URL:

DATABASE_URL=pgsql://postgres:asdfasdf@postgresql:5432/db

Итак, я знаю, что он должен искать хост postgresql.

Я также подтвердил конфигурацию доктрины, используя php bin/console debug:config doctrine, иопределенный URL-адрес подключения по умолчанию: url: '%env(resolve:DATABASE_URL)%'.Я также установил и подтвердил, что команда cache:clear выполняется в среде test.Почему resolve:DATABASE_URL разрешается на localhost?

Я не знаю, что еще попробовать.Он всегда подключается к localhost, а не postgresql.Что еще мне следует попробовать?

РЕДАКТИРОВАТЬ: Кроме того, я следовал руководству по локальному тестированию задания , используя ручные сервисные ссылки, и все работает нормально.

1 Ответ

0 голосов
/ 22 января 2019

Проблема была в переменной конфигурации APP_ENV: test. Файл bin/console содержал код, который проверял, установлена ​​ли эта переменная env, и только если он не установлен, он будет загружать файлы .env. После удаления этой переменной dotenv загружал файлы .env по желанию.

...