Files
RuvdsTest/docs/CI-CD.md
danamir 0a1407719e
Some checks failed
CI/CD / build-test-deploy (pull_request) Failing after 53s
Install Node.js before Checkout in the CI/CD workflow
Host-mode jobs execute directly on the bare runner container rather
than a per-job container, and actions/checkout is a JS action — it
needs `node` on PATH to run at all, which the runner image doesn't
ship. Failed every run with "Cannot find: node in PATH" before any
other step got a chance to install anything.
2026-08-09 01:00:12 +03:00

54 lines
3.7 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.

# CI/CD (Gitea Actions)
Пайплайн — `.gitea/workflows/ci-cd.yml`. На каждый push/PR: юнит-тесты `Domain.Tests` +
`docker compose build` (проверка, что весь стек собирается). На push в `master` — дополнительно
`docker compose up -d` (реальный редеплой).
Раннер выполняет джобы **прямо на целевом сервере** (`ruvdstest.danamir.site`, тот же, что описан
в `docs/DEPLOY.md`) — это и есть логика деплоя: шаг "Deploy" в workflow просто выполняет
`docker compose up -d` в том же каталоге `/opt/ruvdstests`, поверх уже поднятого стека.
## Регистрация раннера
Выполняется один раз, на целевом сервере (там же, где разворачивали приложение), после того как
шаги 16 из `docs/DEPLOY.md` пройдены.
**1. Убедиться, что Actions включены** на вашем Gitea (Site Administration → пункт "Actions" должен
быть виден; если Gitea развёрнута в докере — переменная `GITEA__actions__ENABLED=true` в её
конфиге/окружении).
**2. Получить токен регистрации**: Site Administration → Actions → Runners → **Create new runner**
(или в настройках именно этого репозитория: Settings → Actions → Runners).
**3. Запустить раннер** (заполните токен и запустите сами — секрет никому больше не передаётся):
```bash
docker volume create gitea-runner-data
docker run -d --name gitea-ci-runner --restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitea-runner-data:/data \
-e GITEA_INSTANCE_URL=https://git.danamir.su \
-e GITEA_RUNNER_REGISTRATION_TOKEN=ВАШ_ТОКЕН_СЮДА \
-e GITEA_RUNNER_NAME=ruvdstest-prod \
-e GITEA_RUNNER_LABELS=host:host \
gitea/runner:latest
```
`host:host` — раннер выполняет джобы напрямую в своём собственном контейнере (никаких вложенных
контейнеров на каждый джоб), у него смонтирован docker.sock хоста — поэтому `docker compose`
внутри джоба управляет реальными контейнерами на этой машине. Джоб сам ставит себе `node`,
`docker-cli` и .NET SDK через `apk`/`dotnet-install.sh` (см. workflow) — образ раннера намеренно
голый, чтобы не поддерживать отдельный кастомный образ. `node` ставится первым шагом, до
`actions/checkout` — этот шаг сам является JS-экшеном и без `node` в PATH падает с `Cannot find:
node in PATH` раньше, чем успевает выполниться что-либо ещё.
Проверить, что раннер подключился: Site Administration → Actions → Runners — должен появиться
`ruvdstest-prod` со статусом Idle/Online.
## Проверка
Сделайте любой коммит и запушьте в `master` — во вкладке **Actions** репозитория должен появиться
запуск, пройти тесты, сборку и деплой. После завершения `https://ruvdstest.danamir.site` уже
обслуживает обновлённую версию.