fix: generic ci-cd page, honest about manual redeploy limitation
Deploy contracts-flask / validate (push) Successful in 0s

This commit is contained in:
2026-06-29 11:41:10 +04:00
parent bc002d4cf3
commit c073b5f92c
+24 -23
View File
@@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CI/CD — Gitea Actions для contracts-flask</title> <title>Gitea Actions — настройка CI/CD</title>
<style> <style>
:root { :root {
--bg: #0d1117; --fg: #c9d1d9; --muted: #8b949e; --bg: #0d1117; --fg: #c9d1d9; --muted: #8b949e;
@@ -33,51 +33,52 @@
</head> </head>
<body> <body>
<div class="nav"><a href="/">← Вернуться к загрузке</a> | <a href="/architect">Архитектура</a></div> <div class="nav"><a href="/docs/architect">Архитектура</a></div>
<h1>🔄 CI/CD — Gitea Actions для contracts-flask</h1> <h1>🔄 Gitea Actions — настройка CI/CD</h1>
<p style="color:var(--muted)">Автоматическая валидация при git push. Настроено 2026-06-29.</p>
<blockquote style="border-left-color: #f85149; background: #1a0a0a; color: #f85149;">
<strong>⚠️ Не решает проблему ручного редеплоя managed-сервисов Nubes.</strong><br>
Если сервис деплоится только через Nubes UI — Gitea Actions может максимум валидировать код и синхронизировать VM-часть. Кнопку «Redeploy» всё равно жать руками.
</blockquote>
<hr> <hr>
<h2>Как это работает</h2> <h2>Как это работает</h2>
<p>Gitea Actions — встроенный CI/CD (аналог GitHub Actions), доступен с Gitea 1.19+. При каждом <code>git push</code> в master запускается workflow, который выполняет заданные шаги на <strong>раннере</strong> — отдельной машине, которая слушает задачи.</p> <p>Gitea Actions — встроенный CI/CD (аналог GitHub Actions), доступен с Gitea 1.19+. При <code>git push</code> запускается workflow, который выполняет заданные шаги на <strong>раннере</strong> — отдельной машине, которая слушает задачи.</p>
<table> <table>
<tr><th>Компонент</th><th>Где</th><th>Что делает</th></tr> <tr><th>Компонент</th><th>Где</th><th>Что делает</th></tr>
<tr><td>Workflow-файл</td><td><code>.gitea/workflows/deploy.yaml</code></td><td>Описывает шаги (steps)</td></tr> <tr><td>Workflow-файл</td><td><code>.gitea/workflows/*.yaml</code></td><td>Описывает шаги (steps) при пуше</td></tr>
<tr><td>Act Runner</td><td>Выделенная VM</td><td>Выполняет джобы (systemd-сервис)</td></tr> <tr><td>Act Runner</td><td>Любая машина с доступом к Gitea</td><td>Выполняет джобы (systemd-сервис)</td></tr>
<tr><td>Gitea</td><td>gitea.services.ngcloud.ru</td><td>Отправляет задачи раннеру</td></tr> <tr><td>Gitea</td><td>Ваш инстанс</td><td>Отправляет задачи раннеру при пуше</td></tr>
</table> </table>
<hr> <hr>
<h2>Текущий workflow</h2> <h2>Пример workflow</h2>
<pre>name: Deploy contracts-flask <pre>name: Validate
on: on:
push: push:
branches: [master] branches: [master]
jobs: jobs:
validate: check:
runs-on: linux_amd64 runs-on: linux_amd64
steps: steps:
- name: Test runner - name: Syntax check
run: | run: python3 -m py_compile *.py</pre>
echo "✅ Runner is alive!"
python3 --version</pre>
<p>Workflow срабатывает при каждом пуше в master. Пока делает простую проверку — в будущем можно добавить:</p> <p>Что можно автоматизировать:</p>
<ul> <ul>
<li>Синтаксическую проверку Python (<code>py_compile</code>)</li> <li>Синтаксическую проверку</li>
<li>Синхронизацию кода на VM (<code>deploy/sync.sh</code>)</li> <li>Запуск тестов (<code>pytest</code>)</li>
<li>Уведомление в Telegram о готовности к ручному редеплою</li> <li>Синхронизацию кода на свою VM (<code>rsync</code> / <code>scp</code>)</li>
<li>Уведомления (Telegram, email)</li>
</ul> </ul>
<p><strong>⚠️ Ручной редеплой managed-сервиса (Flask) — через Nubes UI.</strong> Workflow НЕ делает редеплой автоматически — только валидацию и синхронизацию VM-части.</p>
<hr> <hr>
<h2>Как это настраивалось</h2> <h2>Как это настраивалось</h2>
@@ -100,9 +101,9 @@ chmod +x /usr/local/bin/act_runner</pre>
<h3>3. Регистрация раннера</h3> <h3>3. Регистрация раннера</h3>
<pre>act_runner register \ <pre>act_runner register \
--no-interactive \ --no-interactive \
--instance https://gitea.services.ngcloud.ru \ --instance https://&lt;ваш-gitea&gt; \
--token &lt;TOKEN&gt; \ --token &lt;TOKEN&gt; \
--name contracts-vm \ --name &lt;имя-раннера&gt; \
--labels linux_amd64:host</pre> --labels linux_amd64:host</pre>
<p><code>linux_amd64:host</code> — означает host-режим (без Docker). Джобы выполняются прямо на машине.</p> <p><code>linux_amd64:host</code> — означает host-режим (без Docker). Джобы выполняются прямо на машине.</p>
</div> </div>