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

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

Сообщение Anonymous »

Я столкнулся с проблемой в рабочем процессе GitHub Actions, который запускает мои тесты всякий раз, когда я отправляю код в репозиторий.
Внутри этого рабочего процесса я разворачиваю базу данных с помощью Docker и использую ее для интеграционного тестирования.
Однако при запуске тестовой команды ./gradlew она может подключиться к базе данных, но миграция не выполняется — она ведет себя так, как будто схема уже обновлена.
Это странно, поскольку перед инициализацией базы данных я удаляю все существующие контейнеры и тома Docker.
Мой рабочий процесс:

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

name: Java CI with Docker Compose Postgres

on: push

jobs:
build-run:
runs-on: ubuntu-latest

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
Что я пробовал:
  • Я создаю шаг, который — после инициализации контейнера базы данных — запускает этот SQL-скрипт:

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

DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
  • Проверены переменные среды


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

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

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

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

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

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