Интерфейс между Stager и Distributor
Stager передаёт следующую стадию pipeline компоненту Distributor через RabbitMQ.
Тот же формат использует Saver, когда отправляет первичное событие BUILD/NEW.
RabbitMQ
По умолчанию Stager публикует в:
queue: distributor_queue
exchange: distributor
routing_key: ""
Имена задаются переменными:
RABBITMQ_QUEUE_NAME
RABBITMQ_EXCHANGE
RABBITMQ_ROUTING_KEY
Сообщение отправляется как JSON. Distributor потребляет distributor_queue с manual
ack/nack. При transient error сообщение requeue'ится до max_retries; после исчерпания
попыток Distributor пишет FAIL в TrackDB и ack'ает сообщение.
Payload
Сообщение содержит не только taskid, eventStage и eventStageState, но и контекст,
который нужен Distributor для рендера Helm chart values.
{
"taskid": "01JBV2S4PGNV87EGC5WKYA0RND",
"eventStage": "TEST",
"eventStageState": "NEW",
"user": "alexander",
"stageImageName": "project/image",
"stageImageTag": "",
"registryName": "registry.example.org",
"imageId": "",
"errorTypeNum": 0,
"errorMessage": "",
"buildGitURL": "https://github.com/user/repo.git",
"buildDockerfilePath": "./Dockerfile",
"buildContextPath": ".",
"buildGitBranch": "master",
"repoTags": ["latest", "1.0.0"],
"architecture": ["amd64", "arm64"],
"entrypoints": [
["/app/altflow-tests/run"],
["nginx", "-v"]
]
}
Поля:
| Поле | Тип | Описание |
|---|---|---|
taskid | string | ULID задачи. В TrackDB это поле называется taskId. |
eventStage | string | Стадия: BUILD, TEST, SIGN, PUSH, CLEANUP. |
eventStageState | string | Для запуска Distributor ожидает NEW. |
user | string | Пользователь задачи. |
stageImageName | string | Имя образа на текущей стадии. |
stageImageTag | string | Тег образа на текущей стадии, если известен. |
registryName | string | Registry. |
imageId | string | ID образа, если известен. |
errorTypeNum | number | Код ошибки, обычно 0 для NEW. |
errorMessage | string | Сообщение об ошибке, обычно пустое для NEW. |
buildGitURL | string | Git URL исходников. |
buildDockerfilePath | string | Путь к Dockerfile. |
buildContextPath | string | Контекст сборки. |
buildGitBranch | string | Ветка Git. |
repoTags | array[string] | Теги результирующего образа. |
architecture | array[string] | Архитектуры для job package. |
entrypoints | array[array[string]] | Команды для TEST; для остальных стадий обычно пустой массив. |
Действия Distributor
После получения сообщения Distributor:
- По
eventStageполучает из SysDB URL, имя и версию Helm chart. - Для
BUILDиPUSHчитает credentials задачи из Secret Manager. - Выполняет
helm registry loginдля registry с chart packages, если это включено в конфигурации. - Выполняет
helm pull oci://... --untar. - Переписывает
values.yamljob chart:- RabbitMQ callback labels/values:
taskid,eventStage,eventStageState=RUNNING; - Secret Manager credentials для
BUILDилиPUSH; - TrackDB/build context: Git URL, Dockerfile path, context path, branch, registry, image name, tags, architectures;
entrypointsдля стадииTEST.
- RabbitMQ callback labels/values:
- Запускает Kubernetes Job через:
helm upgrade --install <taskid-lowercase>-<stage-lowercase> ./<chart_name>
- Пишет в
imageEventsсостояние:SUSPEND, если Helm release успешно создан;FAIL, если chart не найден, pull/install завершился ошибкой илиTESTвызван без entrypoints.
Фактическое завершение Kubernetes Job (RUNNING, DONE, FAIL) фиксирует Tracker.