quality / commitlint (push) Skipped
quality / changes (push) Successful in 20s
quality / docker-check (push) Skipped
quality / openapi (push) Successful in 2m54s
quality / web (push) Successful in 1m22s
quality / go (push) Successful in 3m37s
quality / bird2 (push) Successful in 15s
CD / quality (push) Successful in 8m37s
CD / publish (push) Failing after 1m51s
- Added `@redocly/cli` version 1.34.5 to `package.json` and `pnpm-lock.yaml` for OpenAPI linting. - Updated CI workflows to reflect changes in job names and processes, including adjustments to the `publish` job in the CD workflow. - Enhanced documentation to clarify the new CI/CD processes and Docker build configurations.
70 lines
3.4 KiB
Markdown
70 lines
3.4 KiB
Markdown
# Docker-образы EvoBGP
|
||
|
||
## CI (Gitea Actions)
|
||
|
||
Сборка образов — **`docker buildx bake`** ([docker-bake.hcl](docker-bake.hcl)), не отдельные `docker build`.
|
||
|
||
**Publish:** push в `main` после quality gates — workflow [CD](../../.gitea/workflows/cd.yaml) job **publish**: semantic-release + зеркало base-образов + bake с `VERSION` из релиза.
|
||
|
||
Bake читает переменные из **окружения** (`REGISTRY`, `IMAGE_TAG`, `CACHE_REF_*`, `BASE_*`). Скрипт [write-bake-override.sh](write-bake-override.sh) — опциональный helper для локальной отладки.
|
||
|
||
BuildKit кэширует `/go/pkg/mod`, `~/.cache/go-build` и pnpm store через `RUN --mount=type=cache`. На CI mounts живут, пока named builder `evobgp` не удаляют (`cleanup: false`).
|
||
|
||
### Слои и runtime
|
||
|
||
| Образ | Runtime base | Заметка |
|
||
|-------|----------------|---------|
|
||
| scheduler, ingest, render, deploy, node | `gcr.io/distroless/static-debian12:nonroot` | static Go (`CGO_ENABLED=0`), без shell |
|
||
| api, all | `debian:bookworm-slim` + `birdc` | только клиент birdc, без демона `bird` |
|
||
| agent | тот же Ubuntu+bird2, что bird2 | общие слои с `evobgp-bird2` |
|
||
| bird2 | Ubuntu Noble + пакет bird2 | |
|
||
| web, web-all | `nginx:1.27-alpine` | `worker_processes 1` |
|
||
|
||
Сборка Go: `golang:1.24-alpine`. Context режется корневым [.dockerignore](../../.dockerignore).
|
||
|
||
### Кэш registry
|
||
|
||
- `git.shx.one/<owner>/evobgp-buildcache:go-buildcache` — **запись** только из `go-build-all`
|
||
- `git.shx.one/<owner>/evobgp-buildcache:web-buildcache` — **запись** только из `web-build`
|
||
- `git.shx.one/<owner>/evobgp-buildcache:birdc-buildcache` — **запись** только из `go-birdc`
|
||
- `git.shx.one/<owner>/evobgp-buildcache:base-*` — зеркало FROM-образов (`mirror-base-images.sh`), без rebuild
|
||
|
||
`pull = false` в bake: не перекачивать FROM, если слой уже в builder. Не запускайте `docker system prune -a` на runner.
|
||
|
||
Параллельный `cache-to` в один ref ломает manifest (`content descriptor … not found`).
|
||
|
||
Если CI падает на «not found» после смены схемы кэша — один раз удалите теги `evobgp-buildcache:*` в registry и пересоберите.
|
||
|
||
## Локальная сборка
|
||
|
||
Из корня репозитория:
|
||
|
||
```bash
|
||
cd deploy/docker
|
||
export REGISTRY=git.shx.one/<owner>
|
||
export IMAGE_TAG=latest
|
||
export SHORT_SHA=$(git rev-parse --short HEAD)
|
||
export VERSION=dev
|
||
export BUILD_TIME=
|
||
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl go-images
|
||
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl web-images
|
||
```
|
||
|
||
Проверка манифеста без сборки:
|
||
|
||
```bash
|
||
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl --print default
|
||
```
|
||
|
||
В `docker-bake.hcl`: `context = "../.."` (корень репо), `dockerfile = "deploy/docker/…"` (путь от корня репо).
|
||
|
||
Один образ (legacy, target `build-all`):
|
||
|
||
```bash
|
||
docker build -f deploy/docker/gobinary/Dockerfile \
|
||
--target build-all \
|
||
-t evobgp-build-all:local .
|
||
```
|
||
|
||
Runtime-образы в bake ожидают stage `build-all` (через bake contexts).
|