Рабочий процесс GitHub Actions не очищает базу данных Docker перед запуском тестовJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Рабочий процесс GitHub Actions не очищает базу данных Docker перед запуском тестов

Сообщение Anonymous »

Я столкнулся с проблемой в рабочем процессе GitHub Actions, который запускает мои тесты всякий раз, когда я отправляю код в репозиторий.
Внутри этого рабочего процесса я разворачиваю базу данных с помощью Docker и использую ее для интеграционного тестирования.
Однако при запуске команды тестирования ./gradlew она может подключиться к базе данных, но миграция не выполняется — она ведет себя так, как будто схема уже обновлена.
/>Это странно, поскольку перед инициализацией базы данных я удаляю все существующие контейнеры и тома Docker.
Мой рабочий процесс:
`имя: Java CI с Docker Compose Postgres
on: push
jobs:
build-run:
runs-on: последняя версия Ubuntu

Код: Выделить всё

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Copy .env-test to .env
run: cp .env-test .env

- name: Stop and remove all containers and volumes
run: |
docker compose down -v --remove-orphans
docker system prune -f --volumes

- name: Start services via Docker Compose
run: docker compose --env-file .env-test up -d --build

- name: Wait for Postgres to be ready
env:
POSTGRES_USER: test
POSTGRES_DB: test
run: |
echo "Waiting for database..."
POSTGRES_CONTAINER=$(docker ps -qf "name=postgres")
until docker exec db pg_isready -U $POSTGRES_USER -d $POSTGRES_DB; do
echo "Waiting for Postgres..."
sleep 2
done
- name: Print environment variables from Postgres container
run: docker exec db env

- name: Clean Database Schema
env:
DATABASE_NAME: $DATABASE_NAME
DATABASE_PASSWORD: $DATABASE_PASSWORD
DATABASE_USER: $DATABASE_USER
run: |
echo "Cleaning database schema before tests..."
docker exec -e PGPASSWORD=$DATABASE_PASSWORD db \
psql -h localhost -U $DATABASE_USER -d $DATABASE_NAME \
-c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
echo "Schema cleaned successfully."

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 17

- name: Grant execute permission for Gradle wrapper
run: chmod +x gradlew

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle
- name: Run tests
env:
DATABASE_NAME: $DATABASE_NAME
DATABASE_PASSWORD: $DATABASE_PASSWORD
DATABASE_USER: $DATABASE_USER
DATABASE_HOST: $DATABASE_HOST
DATABASE_PORT: $DATABASE_PORT
JWT_SECRET_KEY: $JWT_SECRET_KEY
JWT_ISSUER: $JWT_ISSUER
FRONT_URL: $FRONT_URL
run: ./gradlew test`
Я пробую:
  • После инициализации контейнера базы данных я создаю шаг для входа в этот контейнер и запускаю
    DROP SCHEMA public CASCADE;
    CREATE SCHEMA public;
  • Проверяю переменные среды


Подробнее здесь: https://stackoverflow.com/questions/797 ... ning-tests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»