ci: правка конфига прокси больше не тянет полный деплой Site Finder (#2916) #2925
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2925
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "ci/2916-caddy-only-deploy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что было
Caddyfileпопадает в фильтрinfra, поэтому правка одной строки allowlist'а радиmeraocenka.ruзапускала:git reset --hardна боевой VM;data/sql/*.sqlв боевой БДgendsgn;--force-recreateбэкенда, воркера, beat и caddy.То есть радиус поражения правки, относящейся к чужому домену, —
gendsgn.ruцеликом,включая миграции продукта, который в этот момент никто катить не собирался.
Быстрый путь
Новый job
deploy-caddy: синхронизирует репозиторий на VM и делаетcaddy reload.Без пересборки, без миграций, без пересоздания контейнеров.
Включается только когда правка не трогает ничего кроме конфига — пара фильтров
caddy+non_caddy(всё остальное), путь идёт приcaddy && !non_caddy. Одногоcaddyмало: онtrueи когда вместе с конфигом приехал бэкенд, а там нужен полныйдеплой.
caddy reload, а неup -d --force-recreate caddy. Полный деплой пересоздаётконтейнер осознанно —
reloadотказался бы принять битый конфиг и оставил бы работатьстарый, что на общем деплое скрыло бы поломку. Здесь ровно наоборот: правится только
конфиг, и отказ применить битый — это то, что нужно. Ненулевой код → job красный, домены
продолжают обслуживаться старым конфигом.
--force-recreateна опечатке увёл быконтейнер в crash-loop и уронил бы все домены сразу.
Безопасные умолчания
github.event_name == 'push'первым множителем вcaddy_only: наworkflow_dispatchу paths-filter нет диффа, и никакой его ответ не должен уметьотключить сборку — ручной прогон обязан оставаться полным.
caddy_onlyвдруг вычислится не в'true'(act ведёт себя иначе, чемGitHub), поведение вырождается в сегодняшнее: полный деплой, быстрый путь не
запускается. Ошибка в эту сторону ничего не ломает.
deploy-statusтеперь принимает любой из двух путей. Требоватьdeploy == successкак раньше значило бы красить каждую правку прокси, которая как раз прошла.
ровно то, что смоук проверяет.
Проверено
caddy reloadпрогнан на проде с текущим конфигом — механизм рабочий, а непредполагаемый:
Смоук периметра сразу после этой перезагрузки — 27 из 27 зелёные.
Семантика фильтров проверена на реальных коммитах, а не на теории. Из последних 400:
Механизм не мёртвый (сработал бы на четверти правок прокси, включая правку периметра
МЕРЫ) и не срабатывает лишний раз:
f30820bb(Caddyfile + docker-compose.prod.yml)даёт
caddy_only=false— компоуз требует полного деплоя и получает его.yaml.safe_load— валиден, состав и зависимости job'ов проверены разборомcaddy reloadна проде — rc=0Что этот PR не делает
Не выносит блок
meraocenka.ruв отдельный файл (второй вариант из задачи). Быстрый путьрешает главное — радиус поражения — и не трогает структуру конфига; разделение файлов
можно сделать позже, оно от этого не зависит.
Closes #2916