Интерфейс между API и Saver
API передаёт принятый build request компоненту Saver через RabbitMQ. Формат сообщения:
JSON, content-type application/json, delivery mode persistent.
RabbitMQ
API объявляет durable queue из конфигурации amqp_queue_name, привязывает её к
amqp_exchange с пустым routing key и публикует сообщение в этот же exchange с пустым
routing key.
Если включён DLX, очередь создаётся с аргументами:
x-dead-letter-exchange = <amqp_dlx>
x-overflow = reject-publish-dlx
Saver потребляет эту очередь с manual ack/nack. При успешной записи данных в TrackDB, Secret Manager и публикации события для Distributor сообщение ack'ается. При ошибке сообщение nack'ается без requeue и уходит в DLX.
Payload API -> Saver
API принимает внешний BuildRequest, валидирует его и преобразует в SaverRequest.
image_path разбивается на registry_name и image_name; user, user_gid и ulid
добавляются API автоматически.
{
"image_tag": ["latest", "1.0.0"],
"image_arch": ["amd64", "arm64"],
"config_path": "/path/to/config.yaml",
"registry_name": "registry.example.org",
"image_name": "project/image",
"registry_creds": "registry-login:registry-password",
"git_url": "https://github.com/user/repo.git",
"git_creds": "git-login:git-password",
"build_git_branch": "master",
"build_context_path": ".",
"build_dockerfile_path": "./Dockerfile",
"test_entrypoints": [
["/app/altflow-tests/run"],
["nginx", "-v"]
],
"user_gid": 200,
"user": "alexander",
"ulid": "01JBV2S4PGNV87EGC5WKYA0RND"
}
Поля:
| Поле | Тип | Описание |
|---|---|---|
image_tag | array[string] | Теги образа. Если пользователь не указал тег, API добавляет latest. |
image_arch | array[string] | Нормализованные архитектуры: amd64, arm64, i586, loongarch64, riscv64. |
config_path | string | Опциональный путь к конфигурации сборки. |
registry_name | string | Registry из image_path. |
image_name | string | Имя образа из image_path. |
registry_creds | string | Учётные данные registry в формате login:password. |
git_url | string | HTTPS URL Git-репозитория. |
git_creds | string | Опциональные учётные данные Git в формате login:password. |
build_git_branch | string | Опциональная ветка Git. |
build_context_path | string | Контекст сборки. |
build_dockerfile_path | string | Путь к Dockerfile. |
test_entrypoints | array[array[string]] | Команды для стадии TEST; пустой массив означает пропуск стадии. |
user_gid | number | GID для TrackDB events: в full API используется 200, в lite API 100. |
user | string | Пользователь, определённый API. В lite режиме используется системное значение registry.altlinux.org. |
ulid | string | ULID задачи; в TrackDB пишется как taskId. |
Дальнейшие действия Saver
После получения сообщения Saver:
- Разбирает
git_credsиregistry_credsна парыusername/password. - Сохраняет credentials задачи в Secret Manager по task id.
- Пишет исходное событие
BUILD/NEWв TrackDB таблицуimageEvents. - Публикует stage-event для Distributor в очередь
distributor_queue.
Stage-event для Distributor описан в интерфейсе Stager/Distributor;
Saver использует тот же формат для первичного события BUILD/NEW.