From 3ba8dcc931744dc1e99996f591afdca0fddd5a48 Mon Sep 17 00:00:00 2001 From: fontvielle Date: Fri, 16 Oct 2026 09:46:29 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B5,?= =?UTF-8?q?=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D1=83=20=D0=B8=20=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE-=D1=80=D0=B0=D1=81=D0=BA=D0=B0=D1=82=D1=83=20bj=20?= =?UTF-8?q?(process=20runbook)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX --- docs/release-process.md | 136 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 docs/release-process.md diff --git a/docs/release-process.md b/docs/release-process.md new file mode 100644 index 0000000..f6ea13f --- /dev/null +++ b/docs/release-process.md @@ -0,0 +1,136 @@ +# Процесс: сборка, релиз, авто-раскат и обновление образа 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) + +```sh +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 на стенде и проверить. **До клиентов не доходит.** + +```sh +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. **Закоммитить и запушить** изменения: + ```sh + 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. **Собрать и опубликовать**: + ```sh + 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. **Закоммитить бамп версий** (скрипт изменил файл состояния): + ```sh + 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. **Проверка**: + ```sh + 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`): +```sh +deploy/iso/build-iso-ubuntu.sh \ + \ + dist/release-<версия>/bj-installer \ + <версия> \ + dist/release-<версия> \ + <каталог-Валидаты> \ + stable \ + bj-ubuntu22-<версия>.iso +# LAYER=<каталог> и IGATE= — переменными окружения, если нужны. +``` + +Публикация образа в канал `iso` на lic — **уточнить по `~/lic_Bridge-and-Join-s` и прошлой сборке** +(канал `iso`: `/var/lib/bj-license/releases/iso/`); в этой памятке ещё не прогонялось. + +## 5. Атрибуция коммитов + +Каждый коммит завершать: +``` +Co-Authored-By: Claude Opus 4.8 +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` (на рабочем стенде держим выключенной, чтобы обновлялись осознанно).