Files
docs/infrastructure/test-contour/guides/redmine.md
T
2026-06-03 18:37:53 +03:00

199 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Redmine в test-контуре
> Внедрено в test-контуре **2930.05.2026**. Sentry из контура **удалён** (≈10 GiB RAM) — для ошибок приложений используйте [Grafana → Loki](./monitoring.md).
**Redmine** — issue tracker для задач разработки. В test-контуре он связан с Git-flow: коммиты с `Refs #N` / `Fixes #N` можно привязать к задачам; интеграция с Gitea настраивается вручную (см. ниже).
## URL и доступы
| Сервис | URL | Логин | Пароль |
|--------|-----|-------|--------|
| **Redmine** | http://redmine.sova.local | `admin` | `SovaRedmineTest2026!` |
| Gitea | http://git.sova.local | `gitea_admin` | `.generated/platform-credentials.env` |
Добавить в `/etc/hosts` (IP из `multipass info sova-test` или `./scripts/print-urls.sh`):
```
192.168.252.2 redmine.sova.local
```
Пароль test-контура также в `sova-deploy/apps/redmine/values-test.yaml`.
---
## Интерфейс
![Redmine: страница входа](../screenshots/21-redmine-login.png)
*Страница входа Redmine.*
![Redmine: главная](../screenshots/22-redmine-home.png)
*Главная Redmine: проекты и задачи.*
### Проект и задача по умолчанию
После bootstrap (`./scripts/bootstrap-redmine.sh`):
| Объект | Значение |
|--------|----------|
| Проект | **Sova Platform** (`sova-platform`) |
| Пример задачи | [#27 CRUD для новых сущностей в API](http://redmine.sova.local/issues/27) |
Задача #27 описывает CRUD для сущностей (новости, акции, заболевания, центры, статьи, услуги) — эталон для работы по Git-flow в test-контуре.
---
## Архитектура
```mermaid
flowchart LR
subgraph gitops [GitOps]
SD[sova-deploy main]
RT[ArgoCD redmine-test]
SP[ArgoCD sova-projects]
end
subgraph cluster [k3s]
RM[Redmine pod]
PG[(PostgreSQL redmine_test)]
MP[Mailpit SMTP]
ING[Ingress redmine.sova.local]
end
SD --> RT --> RM
SD --> SP
RM --> PG
RM --> MP
ING --> RM
```
| Компонент | Решение |
|-----------|---------|
| Chart | `sova-deploy/apps/redmine/` → Bitnami wrapper |
| Образ | `bitnamilegacy/redmine:6.0.5-debian-12-r0` |
| Namespace | `redmine` |
| PostgreSQL | БД `redmine_test` в `sova-data-test` (общий `postgresql-test`) |
| SMTP | Mailpit `mailpit.sova-mocks.svc.cluster.local:1025` (письма в UI Mailpit) |
| Ingress | `redmine.sova.local` (`deploy-platform-ingress.sh`) |
| ArgoCD | Application `redmine-test` в `argocd/apps/platform-tools.yaml` |
| AppProject | namespace `redmine` в `argocd/projects/sova-project.yaml`, GitOps через `sova-projects` |
---
## Деплой
### Через ArgoCD (основной путь)
После push `sova-deploy` в Gitea приложение `redmine-test` синхронизируется автоматически (`sova-root``platform-tools.yaml`).
Проверка:
```bash
kubectl get application redmine-test -n argocd
kubectl get pods -n redmine
curl -s -o /dev/null -w "%{http_code}\n" http://redmine.sova.local/
```
### Вручную (bootstrap кластера)
```bash
cd k3s-test
source ./scripts/use-kubeconfig.sh
# Helm + ingress + ArgoCD Application
./scripts/deploy-redmine.sh
# Проект sova-platform + задача #27 через REST API
./scripts/deploy-redmine.sh --bootstrap
# или отдельно:
./scripts/bootstrap-redmine.sh
```
`bootstrap-redmine.sh`:
1. Включает REST API в PostgreSQL (`rest_api_enabled`).
2. Создаёт проект `sova-platform`, если его нет.
3. Создаёт задачу **#27** с описанием CRUD (если ещё не существует).
---
## Git-flow и коммиты
Регламент сообщений коммитов (связь с Redmine):
```
feat(adminpanel): content CRUD (Refs #27)
fix(cabinet): registration on test contour (Fixes #45)
```
| Маркер | Эффект |
|--------|--------|
| `Refs #N` | ссылка на задачу; при webhook — ревизия в Redmine |
| `Fixes #N` | кликабельная ссылка в Gitea (external tracker) |
Ветки: `prod` / `test` / `stage` — см. [Git-flow](../git-flow.md) и [Gitea CI](./gitea-ci.md).
---
## Интеграция Gitea ↔ Redmine
Автоматизация через Gitea API **не включена** — только инструкции:
```bash
./scripts/setup-gitea-redmine-integration.sh
```
Скрипт выводит шаги:
1. **External Issue Tracker** (каждый repo: backend, adminpanel, cabinet, docs)
URL: `http://redmine.sova.local/issues/{index}`
2. **Webhook** (Push → ревизии в задаче)
URL: `http://redmine.sova.local/github_hook?project_id=<id>`
Требует plugin `redmine_github_hook` в custom-образе `sova-redmine/` (опционально, не в базовом деплое).
Базовый test-контур работает без webhook: задачи создаются в UI или через `bootstrap-redmine.sh`, коммиты помечаются `Refs #N` вручную в сообщении.
---
## Troubleshooting
| Проблема | Решение |
|----------|---------|
| `redmine-test` InvalidSpecError (namespace) | Применить `argocd/projects/sova-project.yaml`; проверить ArgoCD app `sova-projects` |
| Redmine ImagePullBackOff | `global.security.allowInsecureImages: true`; образ `bitnamilegacy/redmine` |
| DB connection error | БД `redmine_test` в `sova-data-test`; job `db-init` / SQL в `data/test/` |
| HTTP 502 / pod CrashLoop | `kubectl logs -n redmine deploy/redmine-test`; проверить PostgreSQL |
| REST API 403 | `./scripts/bootstrap-redmine.sh` включает `rest_api_enabled` |
| Письма не приходят | Ожидаемо в test: SMTP → Mailpit, не реальная почта |
Проверка БД:
```bash
kubectl exec -n sova-data-test postgresql-test-0 -- \
env PGPASSWORD=sova_test_pass psql -U sova_test -d redmine_test -c '\dt' | head
```
---
## Файлы в репозитории
| Путь | Назначение |
|------|------------|
| `sova-deploy/apps/redmine/` | Helm chart + `values-test.yaml` |
| `sova-deploy/argocd/apps/platform-tools.yaml` | Application `redmine-test` |
| `sova-deploy/argocd/apps/sova-projects.yaml` | GitOps для AppProject (namespace `redmine`) |
| `scripts/deploy-redmine.sh` | Helm + ingress + ArgoCD |
| `scripts/bootstrap-redmine.sh` | Проект + задача #27 |
| `scripts/setup-gitea-redmine-integration.sh` | Инструкции Gitea ↔ Redmine |
| `sova-redmine/` | Custom image с `redmine_github_hook` (опционально) |
---
## Связанные разделы
- [Grafana / Loki](./monitoring.md) — логи pod'ов (вместо Sentry)
- [Git-flow](../git-flow.md) — ветки и PR
- [Gitea CI](./gitea-ci.md) — pipeline и теги
- [ArgoCD: приложения](./argocd.md) — sync и health
- [Практическое руководство](../../../presentation-practical-guide.md)