docs: памятка по сборке, релизу и авто-раскату bj (process runbook)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
This commit is contained in:
fontvielle
2026-10-16 09:46:29 +03:00
parent b853fbfd39
commit 3ba8dcc931
+136
View File
@@ -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 \
<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` (на рабочем стенде держим выключенной, чтобы обновлялись осознанно).