Files
Bridge-and-Join-s/docs/release-process.md
T

9.0 KiB
Raw Blame History

Процесс: сборка, релиз, авто-раскат и обновление образа bj

Рабочая памятка на каждый выпуск — чтобы не вспоминать заново. Меняется процесс или пути — правьте этот файл тем же коммитом.

Пометки: ✅ — проверено на практике (последний раз релиз 2026.10.16.1, 16.10.2026); 📜 — по скриптам/README, в этой памятке ещё не прогонялось, перед первым разом сверить.

0. Где что (топология)

Узел Адрес Роль
astramost 195.239.71.22:22451 (внутр. 10.10.10.28), Astra Linux, fontvielle (sudo без пароля), доступ по SSH ограничен по IP Исходники /opt/bj/src (ветка feature/keywizard-m2m-live), сборка, релизы, здесь же крутится рабочий bj (/opt/bj/bj-server) и база BJ (PostgreSQL). «28 сервер» в разговоре — это он.
lic ВМ 46.173.19.220, Ubuntu Сервер лицензий и обновлений lic.zetit.ru. Раздаёт обновления …/updates/v1/<канал>/manifest.json и установочный образ (канал iso). Публикуем на неё с astramost по ssh root@46.173.19.220 (по ключу).
git ssh://git@git.zetit.ru:32774/zuevav/Bridge-and-Join-s.git (origin) Исходники bj.
lic-репо zuevav/lic_Bridge-and-Join-s, клон ~/lic_Bridge-and-Join-s Код сервера лицензий + скрипты публикации (deploy/publish-release.sh). Клиентам не поставляется.

1. Окружение (один раз за сессию на astramost)

export PATH=$HOME/sdk/go1.26.8/bin:$HOME/go/bin:$PATH

Предпосылки релиза (проверить при сомнениях):

  • Go go1.26.8 и garble (~/go/bin/garble) — нужны для обфускации пакета fsql.
  • Ключ подписи релиза ~/keys/release-signing.priv (закрытый, на lic не попадает).
  • crypto-service.jar — /opt/bj/crypto-service.jar.
  • Одобренный ИШ — ~/ish-upgrade/igate-<версия через дефис>-amd64.zip, sha256 должна совпасть с deploy/release/igate-approved (сейчас 107.0.930).
  • Доступ ssh root@46.173.19.220 (для публикации).

2. Быстрый деплой на рабочий сервер astramost (без релиза) ✅

Когда надо просто обновить bj на стенде и проверить. До клиентов не доходит.

cd /opt/bj/src
go build -o /tmp/bj-server ./cmd/bj-server
sudo systemctl stop bj-server
sudo cp -a /opt/bj/bj-server /opt/bj/bj-server.bak-$(date +%Y%m%d-%H%M%S)   # бэкап
sudo cp /tmp/bj-server /opt/bj/bj-server
sudo chown root:root /opt/bj/bj-server && sudo chmod 755 /opt/bj/bj-server
sudo systemctl start bj-server
systemctl is-active bj-server

Откат — вернуть предыдущий bj-server.bak-* на место и перезапустить.

3. Релиз и авто-раскат на клиентов ✅

Клиентские установки с авто-обновлением тянут из канала на lic. Чтобы раскатать код (в т.ч. наработки Вадима) автоматом:

  1. Закоммитить и запушить изменения:
    git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com" commit -m "…"
    git push origin feature/keywizard-m2m-live
    
  2. Версия — ГГГГ.ММ.ДД.N (N — номер выпуска за день). Пример: 2026.10.16.1.
  3. Собрать и опубликовать:
    scripts/build-release.sh 2026.10.16.1 stable publish
    
    • собирает и подписывает манифест; bj-server — с garble-обфускацией fsql (SQL-рецепты DEPO/QUIK не читаются strings);
    • версию поднимает только изменившимся компонентам (по отпечатку исходников); остальные остаются на прежней версии;
    • неизменные файлы (ИШ ~160 МБ, crypto-service.jar) на lic не перезаливает, а копирует там;
    • публикует на lic и делает выпуск текущим для канала.
    • ⚠️ канал stable хранит только текущий выпуск — предыдущий удаляется (отката «назад на версию» на сервере нет; откат = собрать и опубликовать прежнюю версию заново).
  4. Закоммитить бамп версий (скрипт изменил файл состояния):
    git add deploy/release/component-versions.json
    git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com" commit -m "Релиз 2026.10.16.1 (stable): версии компонентов"
    git push origin feature/keywizard-m2m-live
    
  5. Проверка:
    ssh root@46.173.19.220 'cat /var/lib/bj-license/releases/stable/current'   # → новая версия
    

Опции:

  • Каналы: stable (все боевые установки), beta (обкатка — затрагивает только тех, кто на beta).
  • Собрать без публикации: тот же вызов без publish — бандл ляжет в dist/release-<версия>/.
  • Принудительная версия компонента: переменные BJ_SERVER_VERSION, INSTALLER_VERSION, COMPONENT_INSTALL_VERSION, NPR_VERSION, QUIKEXPORT_VERSION, LK_VERSION, CRYPTO_VERSION.

4. Обновление установочного образа (ISO) 📜

Образ — Ubuntu 22.04 Server с автоустановкой, собирается на astramost (deploy/iso/build-iso-ubuntu.sh), публикуется в канал iso на lic. Обновить = пересобрать с новым релиз-бандлом (п.3) и переопубликовать. Загрузку образа на самой astramost не проверить — нет вложенной виртуализации; проверка только на отдельной ВМ по docs/iso-proverka.md.

Входы (держим на astramost временно, после сборки build-iso-ubuntu.sh их рабочая копия в mktemp чистится — исходники надо иметь под рукой):

  • исходный ubuntu-22.04.x-live-server-amd64.iso;
  • каталог релиза dist/release-<версия> из п.3;
  • каталог Валидаты — zpki/zsdk (из ~/validata-kit/ClientL_Other.zip, zpki-*.deb) + libldap-2.4-2 из Ubuntu 20.04;
  • (опц.) слой офлайн-обновлений LAYER — deploy/iso/build-ubuntu-updates-layer.sh (система ставится уже с обновлениями, PostgreSQL/Java не тянутся из сети);
  • (опц.) IGATE zip — одобренный ИШ (ставится из мастера без интернета).

Сборка (порядок аргументов — см. шапку build-iso-ubuntu.sh):

deploy/iso/build-iso-ubuntu.sh \
  <ubuntu-22.04.x-live-server-amd64.iso> \
  dist/release-<версия>/bj-installer \
  <версия> \
  dist/release-<версия> \
  <каталог-Валидаты> \
  stable \
  bj-ubuntu22-<версия>.iso
# LAYER=<каталог> и IGATE=<zip> — переменными окружения, если нужны.

Публикация образа в канал iso на lic — уточнить по ~/lic_Bridge-and-Join-s и прошлой сборке (канал iso: /var/lib/bj-license/releases/iso/); в этой памятке ещё не прогонялось.

5. Атрибуция коммитов

Каждый коммит завершать:

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX

Коммитить от git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com".

6. Полезное

  • Логи рабочего bj: /var/log/bj/bj-server.err (grep -a).
  • Конфиг: /var/lib/bj/.bj/setup.json (root/bj, 0600).
  • Канал обновления установки задаётся в её настройках (update.channel, пусто = stable); авто-проверка — update.auto_check (на рабочем стенде держим выключенной, чтобы обновлялись осознанно).