# Redmine ↔ Gitea (MR → задача #N) ## Модель | Компонент | Назначение | |-----------|------------| | **Redmine** | Проект **«Новый сайт»** (`novyj-sajt`), задача **#27** | | **Gitea** | `backend`, `adminpanel`, `cabinet`, `docs` | | **redmine-gitea-bridge** | Webhook `pull_request` → комментарий в Redmine со ссылкой на MR | Несколько MR (например backend + adminpanel) с `#27` в заголовке/описании → **несколько комментариев** в одной задаче #27. ## Подготовка ```bash cd k8s ./scripts/bootstrap-redmine.sh ./scripts/setup-gitea-redmine-integration.sh ``` Скрипт сам находит кластер с `namespace redmine` и Multipass VM по `kubectl get nodes` (например `sova-test` → `192.168.252.2`, не обязательно `vm-k8s-app-test`). В `/etc/hosts` — IP из вывода скрипта (`mp_print_kubectl_target`): ```text 192.168.252.2 redmine.sova.local # пример: кластер sova-test ``` ## Правило для MR В **заголовке или описании** pull request: ```text Refs #27 ``` или `#27` — иначе bridge не привяжет MR к задаче. Пример заголовка: ```text feat(adminpanel): content CRUD generic pages (Refs #27) ``` ## Что настроит скрипт 1. Deployment `redmine-gitea-bridge` (NodePort **30388** на VM с Redmine). 2. В каждом repo Gitea: - **External tracker** → `http://redmine.sova.local/issues/{index}` - **Webhook** `pull_request` → bridge. ## Проверка ```bash curl -s http://:30388/healthz ``` Создайте MR в Gitea с **`#27`**, **`Refs #27`** или веткой/заголовком **`issues/27`** → в Redmine на [#27](http://redmine.sova.local/issues/27) появится комментарий со ссылкой (Textile, URL с портом `:30300`). Если webhook не сработал: `./scripts/sync-redmine-mr-notes.sh 27 backend adminpanel` ## Связанные документы - [Git-flow](./git-flow) - [Redmine (test-contour)](../test-contour/guides/redmine.md)