Обновление Test IT в Docker Compose
Обновляйте систему в соответствии с порядком версий
Мы рекомендуем обновлять систему последовательно — по порядку старших (мажорных) версий продукта. Например, чтобы обновить продукт с версии 5.1 до 5.3, рекомендуется:
- Обновить продукт до Test IT 5.2
- Обновить продукт до версии 5.3
Непоследовательное обновление и игнорирование промежуточных мажорных версий может привести к ошибкам.
Test IT Enterprise можно обновить в режиме онлайн или автономно. Если вы используйте версии до 4.6. включительно, следуйте соответствующим инструкциям на этой странице.
Миграция данных автотестов при обновлении до версии 5.4
Миграция данных автотестов может занимать до 8 часов в зависимости от их объема. Это связано с необходимостью группировки результатов тестов в прогонах с учетом конфигурации и параметров автотестов, их нумерации и последующего распределения данных по биатлонам. Во время миграции работа в системе недоступна. Основные рекомендации:
- Отслеживайте миграцию с помощью логов контейнера
webapi
. Минимальный уровень: Information.- Началом миграции служит запись вида:
Applying migration '20250313093240_TMS-31090_MigrateTestResultsToTestBiathlons'
. - При успешном окончании миграции отображается запись вида:
INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") VALUES ('20250313093240_TMS-31090_MigrateTestResultsToTestBiathlons', '9.0.5');
- После превышения тайм-аута подключения к базе данных отобразится запись вида:
Database migration timed out. Operation will be retried. Retry number: 1.
После превышения тайм-аута миграция будет перезапущена автоматически. Данные, перенесенные в предыдущих попытках, затронуты не будут.
- Началом миграции служит запись вида:
- Для сокращения перезапусков на время миграции перед запуском обновления установите переменную окружения
DATABASE_TIMEOUT_SEC=3600
для сервисаwebapi
в файлеdocker-compose.yml
.По окончании миграций в логах отобразится сообщение:Пример указания тайм-аута
Значение тайм-аута для работы в штатном режиме:
services: webapi: **** environment: *** DATABASE_TIMEOUT_SEC: "${DATABASE_TIMEOUT_SEC:-600}"
Значение тайм-аута для миграции:
services: webapi: **** environment: *** DATABASE_TIMEOUT_SEC: "3600"
Application started
. - По окончании миграции рекомендуется вернуть изначальное значение тайм-аута и перезапустить проект для снижения риска зависания соединений при штатной работе приложения.
- При ошибке и прекращения работы контейнеров обновите систему повторно.
- При возникновении проблем, связанных с миграцией, обратитесь в техническую поддержку: support@yoonion.ru.
Обновление онлайн
- Создайте новую директорию, скачайте и распакуйте в ней файл для установки онлайн. Актуальная версия установочного файла доступна на странице загрузок.
- Сравните содержимое файлов
.env
иdocker-compose.yml
и перенесите пользовательские значения переменных в соответствующие файлы новой версии. - В командной строке перейдите в директорию с новой версией и выполните следующую команду:
docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans
Автономное обновление
- Создайте новую директорию, скачайте и распакуйте в ней файл для автономной установки. Актуальная версия установочного файла доступна на странице загрузок.
- Сравните содержимое файлов
.env
иdocker-compose.yml
и перенесите пользовательские значения переменных в соответствующие файлы новой версии. - В командной строке перейдите в директорию с новой версией, распакуйте архив для автономной установки и выполните следующую команду:
Для обновления до версии 5.2 и более поздних версий:
mkdir images tar -zxvf images.tar.gz -C images for file in $(ls images/*.tar); do docker image load -i $file; done docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans
Для обновления до версии 5.1 и предыдущих версий:
docker load -i images.tar.gz docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans
Внимание!
Перед обновлением Test IT до версии 4.3 и выше убедитесь, что дата и время в установках сервера синхронизированы с датой и временем в установках внешней базы данных! Несовпадение даты и времени может привести к нарушениям работы лицензии.
Назовите свой проект
В качестве примера в этой инструкции используется проект с именем testit
. Вы можете использовать другое название.
Если в файлах .env
и .yml
используются пользовательские значения переменных, перенесите их в файлы .env
и .yml
новой версии Test IT. Все значения в файлах .env
и .yml
новых версий Test IT заменяются на значения по умолчанию при обновлении.
Несовместимость CPU V1 с версией MiniO в Test IT 5.1 и выше
В связи с обновлением версии MiniO до RELEASE.2024-07-16T23-46-41Z в Test IT 5.1 и более поздних версиях при использовании старой версии CPU (V1) могут возникать ошибки вида Fatal glibc error: CPU does not support x86-64-v2
.
Для решения проблемы:
- При обновлении онлайн добавьте к версии образа постфикс
-cpuv1
. В результате должно получиться:minio/minio:RELEASE.2024-07-16T23-46-41Z-cpuv1
. - При автономном обновлении перенесите образ в оффлайн-среду самостоятельно.
- В качестве альтернативного решения для онлайн- или автономного обновления можно использовать вариант внешнего сервиса MiniO или аналогичного сервиса S3.
Переход на Alpine в версии 4.6
Развернуть/свернуть инструкцию
Важно
Начиная с версии 4.6.0 в базовых образах сервисов Test IT, а также образах PostgreSQL, InfluxDB, Redis используется версия Alpine. Данное изменение уменьшает фактический размер образов и существенно снижает количество потенциальных уязвимостей контейнеров.
Пользователям PostgreSQL
Если вы используете сервер PostgreSQL из состава поставки Test IT, в процессе обновления для корректной работы сервисов необходимо переиндексировать базы данных в связи с переходом сервера на Alpine.
Действия, описанные ниже, необходимо выполнить непосредственно перед запуском новой версии Test IT, т.е. после сверки файлов .env
и docker-compose.yml
для онлайн-обновления или после команды docker image load
для автономного обновления.
- Перейдите в директорию с установочными файлами версии 4.6.0 и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop
- Запустите контейнер
db
(в новой версии образ меняется наalpine
):docker compose -f docker-compose.yml -p testit up -d db
- Передайте в контейнер команды для реиндексации:
docker exec -it testit-db-1 psql -U postgres -d licensedb -c "reindex database licensedb;" docker exec -it testit-db-1 psql -U postgres -d authdb -c "reindex database authdb;" docker exec -it testit-db-1 psql -U postgres -d avatarsdb -c "reindex database avatarsdb;" docker exec -it testit-db-1 psql -U postgres -d testitdb -c "reindex database testitdb;" docker exec -it testit-db-1 psql -U postgres -d globalsearchdb -c "reindex database globalsearchdb;" docker exec -it testit-db-1 psql -U postgres -d backgrounddb -c "reindex database backgrounddb;"
- После успешной реиндексации баз запустите остальные компоненты Test IT версии 4.6.0:
docker compose -f docker-compose.yml -p testit up -d --remove-orphans
Подготовка к обновлению до версии 4.5
Развернуть/свернуть инструкцию
Перед началом работы
- Создайте резервную копию установленной системы (рекомендуется). Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называется
testit
(вы можете использовать другое название). - Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД Postgres.
- Если вы используете внешнее объектное хранилище MiniO, не включайте в запуск миграции контейнер
mc-minio
. - Если вы используете внешние СУБД Postgres, пропустите соответствующие разделы настоящей инструкции.
Объединение контейнеров MiniO и Postgres
Мигрируйте бакеты MiniO
Начиная с версии 4.5 бакет avatars
перемещается в контейнер minio
. Поэтому перед обновлением необходимо выполнить миграцию бакетов MiniO и их метаданных.
- Из архива поставки Test IT версии 4.5 скопируйте следующие файлы из папки
scripts
в папку с установочными файлами, с помощью которых была развернута текущая версия Test IT. Файлы должны находиться в той же директории, что и файлdocker-compose.yml
:docker-compose.unite-postgres-minio.yml
db-unite.sh
minio-unite.sh
postgres-init.sql
(расположен в корневой папке поставки)
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop
- Добавьте разрешение на исполнение скриптов:
chmod +x db-unite.sh minio-unite.sh
- Запустите все необходимые для миграции контейнеры командой:В контейнере
docker compose -f docker-compose.yml -f docker-compose.unite-postgres-minio.yml -p testit up -d minio avatars.minio mc-minio new-db authdb avatars.db backgrounddb licensedb globalsearchdb
testit-mc-minio-1
будет запущен миграционный скрипт. - Задайте команду чтения логов контейнера:
docker logs -f testit-mc-minio-1
Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:Важно
В зависимости от объема данных в бакетах, процесс может занять некоторое время.
В случае ошибки миграции отобразится строка:Done!
В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru). Пример логов с успешным выполнением миграции:<bucket_name> bucket migration failed!
<...> 1/1 buckets were imported successfully. mc: IAM info successfully downloaded as SOURCE-iam-info.zip mc: IAM info imported to TARGET from SOURCE-iam-info.zip avatars/ bucket migrated successfully! Source files count: 4 Transferred files count: 4 Done!
- Завершите процесс вывода логов и запустите миграционный скрипт баз данных Postgres:Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:
docker exec testit-new-db-1 bash /db-unite.sh
В случае ошибки миграции отобразится строка:Script finished!
В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru).Import FAILED! Check database availability and postgres environment variables!
- После успешной миграции остановите контейнеры продукта и MiniO:По окончании миграции перейдите к обновлению онлайн или автономному обновлению.
docker compose -f docker-compose.yml -f docker-compose.unite-postgres-minio.yml -p testit down
Подготовка к обновлению до версии 4.2
Развернуть/свернуть инструкцию
Перед началом работы
Важно
Обновление до версии 4.2 осуществляется с версии 4.0.1 и выше.
Перед обновлением системы выполните следующие действия:
- Создайте резервную копию установленной системы (рекомендуется). Файлы
docker-compose.yml
иbackup.sh
находятся в одной директории. Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называетсяtestit
(вы можете использовать другое название). - Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД Postgres.
- Убедитесь, что у вас есть возможность исполнять команды от лица пользователя root.
- Если вы используете внешнее объектное хранилище MiniO и/или внешнюю СУБД Postgres, а не сервисы из поставляемого
docker-compose.yml
, пропустите соответствующие разделы настоящей инструкции.
Миграция бакетов MiniO
Начиная с версии 4.2 MiniO Gateway не поддерживается. Поэтому перед обновлением необходимо выполнить миграцию бакетов MiniO и их метаданных.
- Из архива поставки Test IT версии 4.2 скопируйте файлы
docker-compose.minio-migrate.yml
,minio-migrate.sh
,move-migrated-volumes.sh
из папкиscripts
в папку с установочными файлами, с помощью которых была развернута текущая версия Test IT. Файлы должны находиться в той же директории, что и файлdocker-compose.yml
.
Работа оффлайн
Если вы работаете в режиме оффлайн, в папке с файлами поставки 4.2 также выполните команду для загрузки образов MiniO, необходимых для миграции: docker load -i images.tar.gz
.
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop
- Добавьте разрешение на исполнение скриптов:
chmod +x ./move-migrated-volumes.sh ./minio-migrate.sh
- Запустите контейнеры MiniO текущей версии продукта и контейнеры MiniO для миграции:В контейнере
docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p testit up -d minio avatars.minio new-minio new-avatars-minio mc-minio
testit_minio-mc_1
будет запущен миграционный скрипт. - Задайте команду чтения логов контейнера:
docker logs -f testit-mc-minio-1
Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:Важно
- В зависимости от объема данных в бакетах, процесс может занять некоторое время.
В случае ошибки миграции отобразится строка:Done!
В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru). Пример логов с успешным выполнением миграции:<bucket_name> bucket migration failed!
<...> 1/1 buckets were imported successfully. mc: IAM info successfully downloaded as SOURCE-iam-info.zip mc: IAM info imported to TARGET from SOURCE-iam-info.zip avatars/ bucket migrated successfully! Source files count: 4 Transferred files count: 4 Done!
- После успешной миграции, завершите процесс вывода логов, остановите контейнеры продукта и MiniO:
docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p testit down
- Перенесите вольюмы с мигрированными бакетами в оригинальные вольюмы. Используйте команду (для успешного выполнения команды требуются права root):По окончании миграции вы можете перейти к процессу миграции баз СУБД Postgres.
sudo -s ./move-migrated-volumes.sh testit new-minio-data-volume new-avatars-minio-data-volume exit
Миграция СУБД Postgres
Начиная с версии 4.2 в качестве основной системы управления базами данных (СУБД) используется Postgres 14. В процессе обновления необходимо выполнить дамп ваших баз данных (БД) с предыдущей версии Test IT и их восстановление в новой версии. В течение дампа и восстановления баз данных продукт будет недоступен.
Важно
БД backgrounddb появляется в версии 4.1. Если вы обновляете систему с версии ниже, чем 4.1, действия с базой и сервисом backgrounddb, приведенные в настоящей инструкции, выполнять не нужно.
- Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT.
- Остановите контейнеры продукта, используя
.yml
-файл, из которого он был запущен. Используйте команду:docker compose -f docker-compose.yml -p testit down
- Запустите сервисы Postgres (db, authdb, avatars.db, backgrounddb):
docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb
- Если в
.env
-файле для баз установлены кастомные пользователи и пароли, укажите соответствующие значения в командах ниже, а также укажите директорию для сохранения файлов дампа . Выполните команды, чтобы осуществить дамп БД каждого сервиса:docker exec -i testit-db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres testitdb" > {{dump_path}}/dump_db docker exec -i testit-authdb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres authdb" > {{dump_path}}/dump_authdb docker exec -i testit-avatars.db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres avatarsdb" > {{dump_path}}/dump_avatars.db docker exec -i testit-backgrounddb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres backgrounddb" > {{dump_path}}/dump_backgrounddb
Как ускорить дамп и восстановление БД
В ряде случаев, процессы дампа и восстановления БД могут быть значительно ускорены. Для этого запустите команды дампа и восстановления в многопоточном режиме с помощью опции -j и указанием количества потоков. Корректное использование опции зависит от конфигурации ваших ЦПУ и диска. Дополнительную информацию по этой и другим опциям команд
pg_dump
иpg_restore
вы можете найти на странице официального руководства Postgres (англ.): - Остановите контейнеры:
docker compose -f docker-compose.yml -p testit down
- Удалите вольюмы сервисов Postgres:
docker volume rm testit_db-volume docker volume rm testit_authdb-volume docker volume rm testit_avatars.db-volume docker volume rm testit_backgrounddb-volume
- Если в файлах
.env
и.yml
старой версии используются пользовательские значения переменных, перенесите их в соответствующие файлы новой версии. - Перейдите в директорию с новой версией поставки Test IT и запустите сервисы Postgres:
docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb
- Выполните восстановление БД каждого сервиса, используя имя пользователя и пароли из
.env
-файла:docker exec -i testit-db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d testitdb" < {{dump_path}}/dump_db docker exec -i testit-authdb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d authdb" < {{dump_path}}/dump_authdb docker exec -i testit-avatars.db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d avatarsdb" < {{dump_path}}/dump_avatars.db docker exec -i testit-backgrounddb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d backgrounddb" < {{dump_path}}/dump_backgrounddb
- По окончании восстановления запустите остальные контейнеры продукта Test IT:
docker compose -f docker-compose.yml -p testit up -d
Подготовка к обновлению до версии 4.0.1
Развернуть/свернуть инструкцию
Начиная с версии 4.0.1 в конфигурации docker compose была изменена сеть по умолчанию с testit_network на yoonion_network. Чтобы применить данные изменения необходимо выполнить следующие команды:
Важно
Если вы обновляете продукт с версии ниже 4.0.0, перед обновлением выполните указания из раздела Подготовка к обновлению до версии 4.0.
Создайте сеть yoonion_network:
docker network create yoonion_network
При применении обновления укажите ключ
--remove-orphans
, чтобы контейнеры системы пересоздались в новой сети:docker compose -f docker-compose.yml --project-name testit up --detach --timeout 120 --remove-orphans
Переменная COMPOSE_NETWORK_NAME
В файле .env
начиная с версии 4.0.1 была добавлена переменная COMPOSE_NETWORK_NAME, определяющая название сети, в которой будут запущены контейнеры. Ее значение по умолчанию yoonion_network
.
Подготовка к обновлению до версии 4.0
В целях повышения безопасности в версии 4.0 процессы в контейнерах запускаются от имени пользователя uid=611(testit)
. Чтобы избежать некорректной работы контейнеров webapi
и rabbitmqconsumer
, при обновлении необходимо запустить скрипт, мигрирующий права в вольюмах контейнеров.
Осторожно
При обновлении с более ранних версий до версии 4.0.0 без выполнения скрипта сервисы webapi
и rabbitmqcosumer
будут рестартовать из-за ошибки в сервисе лицензий.
- Сделайте резервную копию системы.
- Остановите контейнеры системы:
docker compose -f docker-compose.yml --project-name testit stop --timeout 120
- Выполните следующие команды для миграции прав в вольюмах. Скрипт миграции прав в вольюмах
phoenix_migrate_volumes_rights.sh
находится в директорииscripts
.chmod +x scripts/phoenix_migrate_volumes_rights.sh sudo scripts/phoenix_migrate_volumes_rights.sh testit
testit
в примерах команд необходимо заменить на название проекта Docker Compose, в котором запущена система. Чтобы определить название проекта, выполните командуdocker ps
. Префикс к названиям контейнеров является названием проекта.Важно
Для выполнения скрипта могут потребоваться права пользователя
root
на хост-системе. В таком случае необходимо запускать скрипт с использованиемsudo
или от имени пользователяroot
. - Продолжите обновление системы, описанное в инструкциях ниже.
При чистой установке версии 4.0 выполнение скрипта не требуется.