Описание
Я создаю приложение, которое использует Keycloak для управления пользователями. Я хочу настроить тестовое задание в Gitlab CI для запуска моих регрессионных тестов при каждом коммите. Для выполнения моих тестовых сценариев требуются две службы: postgres и keycloak. Я могу успешно подключиться к базе данных postrgres, и все тесты, которые не требуют keycloak, успешно выполняются; но те, которые требуют keycloak, терпят неудачу.
Настройка
Вот часть тестового задания моего .gitlab-ci
файла:
test:
image: node:12-alpine
stage: test
services:
- name: postgres
- name: postgres
alias: keycloak-postgres
- name: jboss/keycloak:9.0.2
alias: keycloak
variables:
NODE_ENV: test-ci
POSTGRES_DB: admin-db
POSTGRES_USER: db-admin
POSTGRES_PASSWORD: db-admin-password
KEYCLOAK_USER: kc-admin
KEYCLOAK_PASSWORD: kc-admin-password
DB_VENDOR: POSTGRES
DB_ADDR: keycloak-postgres
DB_DATABASE: admin-db
DB_USER: db-admin
DB_SCHEMA: public
DB_PASSWORD: db-admin-password
except:
refs:
- tags
variables:
- $CI_COMMIT_MESSAGE =~ /\[ci-release\]/
script:
- yarn test
Я знаю, что может также проблема с тем, как я использую два postgres экземпляра здесь. У меня были проблемы с получением одного postgres экземпляра для запуска с двумя базами данных, поэтому я просто добавил новую службу (две службы postgres используют одни и те же переменные среды).
Сообщение об ошибке
Ошибка при сбое задания CI:
![enter image description here](https://i.stack.imgur.com/CvMbV.png)
Эта ошибка заставляет меня думать, что служба keycloak запускается, но по умолчанию Пользователь admin неправильно инициализируется. Это может быть потому, что запуск службы с простым dokcer run
не сделает этого пользователя по умолчанию. Есть некоторые аргументы, которые необходимо передать. Однако при запуске этой службы через docker-compose
не нужно передавать никаких аргументов, достаточно лишь установки переменных KEYCLOAK_USER
и KEYCLOAK_PASSWORD
для инициализации пользователя. Я не уверен, насколько это отличается в Gitlab CI.
Ранее, прежде чем я добавил вторую службу базы данных, я только что получил Error: connect ECONNREFUSED 127.0.0.1:8080
(мой код API указывает на https://keycloak:8080
, так как хост службы gitlab ci я полагаю, это должно быть имя службы; я не уверен, что это правильный способ доступа к экземпляру keycloak). И это опять-таки заставляет меня думать, что теперь, с двумя экземплярами базы данных, сервис действительно запускается правильно.
Буду признателен за любую информацию или помощь, которую вы можете предоставить, и я обязательно отвечу своевременно на любые вопросы или комментарии. Спасибо!