GitLab CI с ошибкой Postgres: подключение ECONNREFUSED 127.0.0.1:5432 - PullRequest
0 голосов
/ 28 июня 2019

У меня есть Gitlab CI pipeline, который тестирует, создает и развертывает код. Код в основном является API-интерфейсом nodejs, а база данных управляется с помощью Sequelize ORM. Недавно я попробовал конвейер с Postgres Database.

Вот файл gitlab-ci.yml:

image: trion/ng-cli-karma

variables:
  POSTGRES_DB: test
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: password
  NODE_ENV: test

cache:
  paths:
  - wiki-quotes-client/node_modules/
  - wiki-quotes-server/node_modules/

stages:
    - test
    - build
    - deploy

test_server:
  services:
   - postgres:latest
  script:
   - cd wiki-quotes-server
   - npm install
   - npm install -g sequelize-cli
   - sequelize db:migrate
   - sequelize db:seed:all
   - npm run test

test_client:
    script:
        -  cd wiki-quotes-client
        -  npm install
        -  ng test --watch=false

build_angular:
  only:
    - master
  stage: build
  script:
    - npm install
    - cd wiki-quotes-client
    - ng build --prod
  artifacts:
    paths:
      - wiki-quotes-client/dist/wiki-quotes-client/.

deploy:
  only:
    - master
  stage: deploy
  dependencies:
    - build_angular
  script:
    - ls -all
    - apt-get update -qq
    - apt-get install -qq git
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - ls ~/.ssh/
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\t StrictHostKeyChecking no \n\n" > ~/.ssh/config'
    - ssh-keyscan 159.65.156.240 >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - ssh goutambseervi@159.65.156.240 'cd ~/wikiquotesapp; git checkout master; git pull;  cd wiki-quotes-server; npm install; npm start:prod'

Теперь он показывает мне эту ошибку:

ОШИБКА: подключить ECONNREFUSED 127.0.0.1:5432

Кроме того, у меня был еще один вопрос ...

Каким будет идеальный путь для развертывания API с базой данных, используя Sequelize?

Я хочу убедиться, что мои миграции будут запущены, и в то же время моя база данных должна быть заполнена при каждом развертывании, и я не хочу, чтобы в базе данных были избыточные данные.

1 Ответ

1 голос
/ 02 июля 2019

Использование сервисов в Gitlab CI работает в основном так же, как и запуск различных контейнеров докеров (именованных сервисов в docker-compose), которые доступны вашему контейнеру, выполняющему конкретное задание.

Итак, согласно вашему сообщению об ошибке, я предполагаю, что ваш код пытается достичь базы данных postgres на localhost, которая работает, когда вы запускаете обе программы на компьютере разработчика. В Gitlab CI это два контейнера, которые «имеют оба собственных localhost» и должны использовать имена DNS, такие как postgres, для подключения к другому контейнеру. Так как вы используете изображение под названием postgres, Gitlab также называет сервис таким образом.

Пожалуйста, попробуйте использовать имя хоста postgres вместо localhost для подключения к базе данных в процессе узла, и доступ должен работать. В соответствии с вашими другими определенными переменными, это может уже работать, просто добавив еще один variable из POSTGRES_HOST: postgres (или аналогичный - я не знаком с конфигурацией sequelize)

Для получения подробной информации об услугах в Gitlab CI, пожалуйста, проверьте документы , которые даже предоставляют образец для вашего конкретного случая использования доступа к услуге postgres и некоторые разъяснения по этому конкретному вопросу .

...