3ba8dcc931
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
137 lines
9.0 KiB
Markdown
137 lines
9.0 KiB
Markdown
# Процесс: сборка, релиз, авто-раскат и обновление образа 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` (на рабочем стенде держим выключенной, чтобы обновлялись осознанно).
|