Интерфейс между 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"]
  ]
}

Поля:

ПолеТипОписание
taskidstringULID задачи. В TrackDB это поле называется taskId.
eventStagestringСтадия: BUILD, TEST, SIGN, PUSH, CLEANUP.
eventStageStatestringДля запуска Distributor ожидает NEW.
userstringПользователь задачи.
stageImageNamestringИмя образа на текущей стадии.
stageImageTagstringТег образа на текущей стадии, если известен.
registryNamestringRegistry.
imageIdstringID образа, если известен.
errorTypeNumnumberКод ошибки, обычно 0 для NEW.
errorMessagestringСообщение об ошибке, обычно пустое для NEW.
buildGitURLstringGit URL исходников.
buildDockerfilePathstringПуть к Dockerfile.
buildContextPathstringКонтекст сборки.
buildGitBranchstringВетка Git.
repoTagsarray[string]Теги результирующего образа.
architecturearray[string]Архитектуры для job package.
entrypointsarray[array[string]]Команды для TEST; для остальных стадий обычно пустой массив.

Действия Distributor

После получения сообщения Distributor:

  1. По eventStage получает из SysDB URL, имя и версию Helm chart.
  2. Для BUILD и PUSH читает credentials задачи из Secret Manager.
  3. Выполняет helm registry login для registry с chart packages, если это включено в конфигурации.
  4. Выполняет helm pull oci://... --untar.
  5. Переписывает values.yaml job 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.
  6. Запускает Kubernetes Job через:
helm upgrade --install <taskid-lowercase>-<stage-lowercase> ./<chart_name>
  1. Пишет в imageEvents состояние:
    • SUSPEND, если Helm release успешно создан;
    • FAIL, если chart не найден, pull/install завершился ошибкой или TEST вызван без entrypoints.

Фактическое завершение Kubernetes Job (RUNNING, DONE, FAIL) фиксирует Tracker.