Я пытаюсь запустить задание CI в gitlab, где интеграционные тесты зависят от postgresql.
В gitlab я использовал бегун postgresql. Проблема в том, что интеграционные тесты требуют расширения uuid-ossp. Я мог бы запускать команды SQL перед каждым тестом, чтобы убедиться, что расширение применено, но я бы предпочел применить его один раз перед запуском всех тестов.
Так что я использовал тег image в скрипте CI добавить файл. sh в образ postgresql в /docker-entrypoint-initdb.d/
, а затем попытаться запустить интеграционные тесты с тем же образом. Проблема в том, что оно, кажется, не применяет расширение, поскольку интеграционные тесты не выполняются там, где используются функции uuid - function uuid_generate_v4() does not exist
prep-postgres:
stage: setup-db
image: postgres:12.2-alpine
script:
- echo "#!/bin/bash
set -e
psql \"$POSTGRES_DB\" -v --username \"$POSTGRES_USER\" <<-EOSQL
create extension if not exists \"uuid-ossp\";
EOSQL" > /docker-entrypoint-initdb.d/create-uuid-ossp-ext.sh
artifacts:
untracked: true
test-integration:
stage: test
services:
- postgres:12.2-alpine
variables:
POSTGRES_DB: db_name
POSTGRES_USER: postgres
script:
- go test ./... -v -race -tags integration
Альтернатива, на которую я надеялся, будет работать
prep-postgres:
stage: setup-db
image: postgres:12.2-alpine
script:
- psql -d postgresql://postgres@localhost:5432/db_name -c "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";"
artifacts:
untracked: true
Но в этом случае клиент не может подключиться к postgres (я думаю, это потому, что я редактирую изображение, а не запускаю его?)
Я, должно быть, упускаю что-то очевидное, или это вообще возможно?