fix(ci): гейт Caddyfile не мог прочитать конфиг — -v $PWD из job-контейнера
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Successful in 52s
CI Trade-In / frontend-checks (pull_request) Successful in 1m32s
CI / frontend-tests (pull_request) Successful in 1m36s
CI / openapi-codegen-check (pull_request) Successful in 1m59s
CI Trade-In / backend-tests (pull_request) Successful in 5m10s
CI / backend-tests (pull_request) Successful in 16m46s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI Trade-In / browser-tests (pull_request) Successful in 52s
CI Trade-In / frontend-checks (pull_request) Successful in 1m32s
CI / frontend-tests (pull_request) Successful in 1m36s
CI / openapi-codegen-check (pull_request) Successful in 1m59s
CI Trade-In / backend-tests (pull_request) Successful in 5m10s
CI / backend-tests (pull_request) Successful in 16m46s
Первая версия шага смонтировала `$PWD` внутрь caddy-контейнера и упала на `open /etc/caddy/Caddyfile: no such file or directory`. Причина: job сам исполняется внутри контейнера, а `docker run` создаёт КОНТЕЙНЕР-БРАТ на том же демоне. Путь в `-v` резолвится на ХОСТЕ, тогда как `$PWD` — путь внутри job-контейнера, которого на хосте нет. Классическая ловушка docker-in-docker, и она не зависит от содержимого конфига — смонтируй так что угодно, монтирования просто не произойдёт. Заменено на `docker create -w /work` + `docker cp` + `docker start -a`: копия не зависит от того, как смонтирован workspace. Копируется и каталог `caddy/` — Caddyfile делает `import caddy/users.caddy.snippet`, без него validate падает на импорте. Проверено локально обе стороны: валидный конфиг → `Valid configuration`, exit 0; конфиг с незакрытой скобкой → `unexpected EOF`, exit 1. Без второй проверки гейт мог бы оказаться вечно-зелёным.
This commit is contained in:
parent
56194c606a
commit
eb7ac3d326
1 changed files with 21 additions and 6 deletions
|
|
@ -78,16 +78,31 @@ jobs:
|
||||||
# obsidian, status. То есть цена опечатки в этом файле — полный
|
# obsidian, status. То есть цена опечатки в этом файле — полный
|
||||||
# даунтайм, а гейта на неё не было.
|
# даунтайм, а гейта на неё не было.
|
||||||
#
|
#
|
||||||
# `docker run`, а не установка caddy в раннер: тот же образ `caddy:2`,
|
# `docker cp`, а НЕ `-v "$PWD:/etc/caddy"`. Job сам исполняется внутри
|
||||||
# что стоит в docker-compose.prod.yml — проверяем ровно тем парсером,
|
# контейнера, и `docker run` создаёт КОНТЕЙНЕР-БРАТ на том же демоне:
|
||||||
# который будет читать конфиг на проде. Docker на раннере есть (им же
|
# путь в `-v` резолвится на ХОСТЕ, а `$PWD` — это путь внутри job-
|
||||||
# поднимается Postgres в ci-tradein.yml).
|
# контейнера, которого на хосте нет. Первая версия этого шага так и
|
||||||
|
# упала: `open /etc/caddy/Caddyfile: no such file or directory`.
|
||||||
|
# Копирование не зависит от того, как смонтирован workspace.
|
||||||
|
#
|
||||||
|
# Образ тот же `caddy:2`, что в docker-compose.prod.yml — проверяем ровно
|
||||||
|
# тем парсером, который будет читать конфиг на проде.
|
||||||
|
#
|
||||||
|
# Копируем и `caddy/` — Caddyfile делает `import caddy/users.caddy.snippet`,
|
||||||
|
# и без него validate упадёт на импорте (файл в репозитории есть).
|
||||||
#
|
#
|
||||||
# Плейсхолдеры окружения ({env.*}) при validate резолвятся в пустую
|
# Плейсхолдеры окружения ({env.*}) при validate резолвятся в пустую
|
||||||
# строку — это нормально, синтаксис от их значений не зависит.
|
# строку — это нормально, синтаксис от их значений не зависит.
|
||||||
run: |
|
run: |
|
||||||
docker run --rm -v "$PWD:/etc/caddy" caddy:2 \
|
set -euo pipefail
|
||||||
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
|
cid=$(docker create -w /work caddy:2 \
|
||||||
|
caddy validate --config /work/Caddyfile --adapter caddyfile)
|
||||||
|
docker cp Caddyfile "$cid:/work/Caddyfile"
|
||||||
|
docker cp caddy "$cid:/work/caddy"
|
||||||
|
rc=0
|
||||||
|
docker start -a "$cid" || rc=$?
|
||||||
|
docker rm -f "$cid" >/dev/null
|
||||||
|
exit "$rc"
|
||||||
|
|
||||||
- name: "Guard: блокирующий DDL без lock_timeout (#2752)"
|
- name: "Guard: блокирующий DDL без lock_timeout (#2752)"
|
||||||
# Тем же шагом-соседом и по той же причине: гейт бежит на КАЖДОМ PR,
|
# Тем же шагом-соседом и по той же причине: гейт бежит на КАЖДОМ PR,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue