Some checks failed
CI/CD / build-test-deploy (pull_request) Failing after 53s
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.
54 lines
3.7 KiB
Markdown
54 lines
3.7 KiB
Markdown
# 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`, поверх уже поднятого стека.
|
||
|
||
## Регистрация раннера
|
||
|
||
Выполняется один раз, на целевом сервере (там же, где разворачивали приложение), после того как
|
||
шаги 1–6 из `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` уже
|
||
обслуживает обновлённую версию.
|