Отладка прикладного решения#
Предупреждение
Работает только на Java 21.
Иногда программную ошибку не получается воспроизвести на тестовых стендах. В таких случаях, gs-ctk позволяет создать среду для отладки прикладного решения в условиях, максимально приближенных к тем, в которых работает основной кластер.
Для этого создается под, в котором стартует тот же сервер приложений, что и обычно, но с включенной подсистемой отладки Java. В поде также есть дополнительный сопровождающий контейнер со средой OpenVSCode Server, подключенной к данной подсистеме. Обычные пользователи не могут подключиться к данному поду без особой ссылки.
Требования#
gs-ctk версии
>=5.1.4(проверить командой:cat ~/nscli/version.txt)Минимальные ресурсы: 12 ГБ ОЗУ, 4 ядра CPU
Настроенная работающая группа ресурсов с включенными книгами ресурсов
global_server_shareиhaproxyНаличие в комплекте приложений архива
appsrc.zip, содержащего исходные файлы проекта
Подготовка исходного кода для отладки#
Архив appsrc.zip должен быть собран из той же версии проекта, что и applib.zip в комплекте приложений.
Флаг --build-appsrc позволяет за один запуск gsf-cli собрать каталоги applib и appsrc. Флаг
поддерживается только для SBT-проектов. В project.yaml параметр isPublishSrcFolder должен быть равен true
или отсутствовать. По умолчанию публикация исходных артефактов включена.
Локальная сборка#
Из каталога gsf-cli выполните:
./manage.sh -p <имя_проекта> build --build-appsrc --skip-publication
В Windows используйте manage.cmd с теми же параметрами.
Команда выполняет чистую SBT-сборку, затем последовательно запускает publishLibFolder и publishSrcFolder.
Флаг --skip-publication отключает загрузку в удалённый репозиторий, но не мешает созданию локальных артефактов.
Без --publish-path результат будет сохранён в каталогах:
workspace/sources/<имя_проекта>/application/build/publish/applib;workspace/sources/<имя_проекта>/application/build/publish/appsrc.
gsf-cli проверяет, что оба набора JAR-файлов созданы. Если release уже отмечен как собранный, но локальные
applib или appsrc отсутствуют или неполны, они будут пересобраны без повторной удалённой публикации.
Сборка в CI/CD#
Для сборки в заданный каталог укажите общий корень для applib и appsrc:
./manage.sh -p "$GSF_PROJECT_NAME" build \
--build-appsrc \
--skip-publication \
--publish-path "$CI_PROJECT_DIR/publish"
В этом примере будут созданы $CI_PROJECT_DIR/publish/applib и $CI_PROJECT_DIR/publish/appsrc. Их можно сохранить как
артефакты GitLab CI:
artifacts:
paths:
- publish/applib/
- publish/appsrc/
Не используйте один --publish-path вместе с --all: gsf-cli отклонит такой запуск, поскольку проекты могут
перезаписать артефакты друг друга. Запускайте сборку отдельно с -p и уникальным корневым каталогом для каждого проекта.
Локальная и удалённая публикация#
--publish-path задаёт только локальный корневой каталог. Если не указывать --skip-publication, команда build также выполнит
sbt publish. При включённом isPublishSrcFolder в Maven-репозиторий будут отправлены отдельные *-sources.jar, но не весь
каталог appsrc или архив appsrc.zip.
gsf-cli создаёт каталоги с JAR-файлами, но не создаёт applib.zip и appsrc.zip. Архив appsrc.zip формируется при упаковке
комплекта приложений средствами nscli.
Если первая release-сборка выполнялась с --skip-publication, а затем артефакты нужно отправить в Maven-репозиторий,
выполните:
./manage.sh -p <имя_проекта> publish
Ручной запуск SBT-задачи#
Для старых версий gsf-cli или для диагностики можно по-прежнему запустить SBT-консоль активного проекта:
./links/active_project_sbt.sh
В Windows используйте links\active_project_sbt.cmd. В SBT-консоли выполните:
publishSrcFolder
Исходные файлы будут опубликованы в каталоге build/publish/appsrc внутри исходного проекта (в рабочем каталоге gsf-cli это workspace/sources/<имя_проекта>/application/build/publish/appsrc). Добавьте этот каталог в корень комплекта приложений под именем appsrc. При упаковке комплекта средствами nscli будет сформирован архив appsrc.zip и рассчитаны его хеш-суммы.
Инструкция по отладке#
Запуск отладчика#
Администратор включает отладку при помощи команды nscli:
~/nscli $ ./cloud_debugger.sh --namespace gs-ctk start
Укажите группу ресурсов:gs-cluster-1
Выберите книгу ресурсов, которую необходимо взять за основу облачного отладчика:global-server-share
Укажите название для отладчика:debugger-5edafd63
Точка во времени в формате эпохи Unix, до которой будет доступен отладчик (или укажите от текущего момента указав в качестве значения
"+N", где N - время в секундах):+3600
Облачный отладчик будет доступен до 03:14:08 19.01.2038
Ожидаем готовности облачного отладчика...
Ожидаем готовности облачного отладчика...
Ожидаем готовности облачного отладчика...
Облачный отладчик готов к использованию!
Для доступа к отладчику перейдите по ссылке:
(http://example.ru)/debugger/open/gs-cluster-1-debugger-1b0e4084?debugger%2Fvscode%2F%3Ftkn%3Dba0211cf-cd8a-4ba5-b2a2-a5d1791e587b%26folder%3D%2Fuser%2Fapplication
Чтобы подключиться к серверу приложений, связанному с отладчиком, перейдите по ссылке:
(http://example.ru)/debugger/open/gs-cluster-1-debugger-1b0e4084?login%2Flogin.html
Подстроку (https://example.ru) надо подменить на имя хоста, к которому обращается пользователь для подключения к HAProxy. Например:
https://globalerp.mycompany.ru/debugger/open/gs-cluster-1-debugger-1b0e4084?debugger%2Fvscode%2F%3Ftkn%3Dba0211cf-cd8a-4ba5-b2a2-a5d1791e587b%26folder%3D%2Fuser%2Fapplication
Управление отладчиками#
Для просмотра списка активных отладчиков:
./cloud_debugger.sh --namespace gs-ctk list
Для удаления отладчика:
./cloud_debugger.sh delete --namespace gs-ctk --group my-group --book debugger-mydebugger
Подключение к отладчику#
Администратор передает ссылки разработчикам (или другим лицам, проводящим отладку).
Разработчик переходит в отладчик и на сервер приложений по ссылкам. Важно: Используйте HTTPS для подключения. При проблемах с аутентификацией (циклическая переадресация) очистите cookies браузера.

Настройка Visual Studio Code#
В поде облачного отладчика уже установлены OpenVSCode Server и необходимые расширения Java, Scala и Metals. Дополнительно устанавливать расширения не требуется.
Подтвердите, что каталог
/user/applicationявляется доверенным, и откройте вкладку Metals на боковой панели.В течение 30 секунд должна начаться индексация проекта. Дождитесь её завершения. После этого в верхней части вкладки Metals появится список используемых модулей и библиотек.

Если индексация не началась, или после ее завершения модули не появились, нажмите «Import build» в секции «Build Commands» вкладки Metals.

На вкладке Metals выполните команду «Run doctor». В отчёте должен присутствовать build target
applicationс отметкой в столбце «Debugging».В разделе «Packages» → «Libraries» проверьте, что доступны модули проекта и внешние зависимости.
Откройте нужные модули или библиотеки и установите точки останова, щёлкнув слева от номера нужной строки.
Перейдите на вкладку «Run and Debug» боковой панели, выберите конфигурацию
Global Debugи нажмите «Start Debugging».
Отладчик включен и подключен к серверу приложений, интерфейс которого доступен через вторую ссылку. Лог сервера приложений доступен по адресу /user/application/globalserver.log.
Примечание
При запуске облачного отладчика gs-ctk автоматически создаёт отдельный под, запускает Global Server с включённой удалённой отладкой и добавляет в Visual Studio Code готовую конфигурацию Global Debug. Изменять start.sh сервера приложений или создавать конфигурацию подключения вручную не требуется.
Устранение проблем#
Проблема с аутентификацией#
Если после успешной авторизации происходит переадресация на страницу входа:
Очистите cookies браузера для домена отладчика
Используйте для подключения только протокол HTTPS
Безопасность#
В ссылку для отладчика вписан токен для подключения, который используется для авторизации в OpenVSCode Server. Следовательно, без этой ссылки подключиться к отладчику невозможно.
В будущих версиях, способ авторизации может измениться.
OpenVSCode Server работает в отдельном контейнере от имени непривилегированного пользователя, не имеет прямого доступа к секретам и файловым системам других контейнеров.
Доступ к логам и подсистеме отладки предоставляет пользователю OpenVSCode Server широкие возможности по взаимодействию с системой. В будущем они будут ограничены специальным прокси-сервером протокола отладки.