CI / changes (push) Successful in 7s
CI / openapi (push) Has been skipped
CI / go (push) Has been skipped
CI / docker-web (push) Failing after 15s
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Successful in 14s
CI / docker-go (push) Successful in 2m36s
- Renamed cache functions for Go and web targets to clarify their purpose and prevent race conditions during parallel builds. - Updated targets to use the new cache export functions, ensuring proper cache management. - Revised README to reflect changes in cache usage and provide guidance on resolving potential CI issues related to cache schema changes.
51 lines
2.5 KiB
Markdown
51 lines
2.5 KiB
Markdown
# Docker-образы EvoBGP
|
||
|
||
## CI (Gitea Actions)
|
||
|
||
Сборка образов — **`docker buildx bake`** (`deploy/docker/docker-bake.hcl`), а не матрица из восьми отдельных `docker build`.
|
||
|
||
| Было | Стало |
|
||
|------|--------|
|
||
| 8× `go mod download` + 8× `go build` (разные BIN) | 1× download + 1× компиляция всех `cmd/*` |
|
||
| 2× сборка BIRD из исходников (api, all) | 1× stage `birdc`, копируется в runtime |
|
||
| 2× `npm ci` (web, web-all) | 1× `web-deps` + 1× `web-build` + два nginx-образа (общий артефакт) |
|
||
| 8 runner'ов с checkout/login | 1 job `docker-go`, 1 job `docker-web` |
|
||
|
||
Кэш registry (переменные bake):
|
||
|
||
- `git.shts.su/<owner>/evobgp-buildcache:go-buildcache` — **запись** только из target `go-build-all`
|
||
- `git.shts.su/<owner>/evobgp-buildcache:web-buildcache` — **запись** только из target `web-build`
|
||
|
||
Остальные bake-target’ы только `cache-from` (чтение). Параллельный `cache-to` в один ref ломает manifest в registry (`content descriptor … not found`).
|
||
|
||
Локально BuildKit также кэширует `/go/pkg/mod` и `~/.cache/go-build` через `RUN --mount=type=cache`.
|
||
|
||
Если CI падает на «not found» после смены схемы кэша — один раз удалите теги `evobgp-buildcache:go-buildcache` и `:web-buildcache` в registry и пересоберите.
|
||
|
||
## Локальная сборка
|
||
|
||
Из корня репозитория:
|
||
|
||
```bash
|
||
cd deploy/docker
|
||
export REGISTRY=git.shts.su/<owner>
|
||
export IMAGE_TAG=latest
|
||
export SHORT_SHA=$(git rev-parse --short HEAD)
|
||
sh write-bake-override.sh
|
||
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl -f docker-bake.override.hcl go-images
|
||
docker buildx bake --allow=fs.read=../.. -f docker-bake.hcl -f docker-bake.override.hcl web-images
|
||
```
|
||
|
||
В `docker-bake.hcl`: `context = "../.."` (корень репо), `dockerfile = "deploy/docker/…"` (путь от корня репо). **CI:** `write-bake-override.sh` + `--allow=fs.read=$GITHUB_WORKSPACE` в `.gitea/workflows/ci.yaml`.
|
||
|
||
Один образ (legacy):
|
||
|
||
```bash
|
||
docker build -f deploy/docker/gobinary/Dockerfile \
|
||
--target build-all \
|
||
--build-arg BIN=evobgp-api \
|
||
-t evobgp-api:local .
|
||
```
|
||
|
||
Runtime-образы в bake ожидают stage `build-all` (через bake contexts), не отдельный `--build-arg BIN` на старый target `build`.
|