Коммуникация сборочницы со сторонними сервисами через брокер сообщений RabbitMQ


Егор Игнатов

«Базальт СПО»

Доклад

qr.svg

https://blarse.github.io/girar-amqp/

Вступление

  • Сборочница (girar)
  • Advanced Message Queuing Protocol
    • организация очередей
    • маршрутизация сообщений
    • надежность
    • безопасность

AMQP в Сборочнице

  • Клиент: amqp-publish из пакета rabbitmq-c
  • Сообщения отправляются по событию

Изменение в задании

  • state: смена состояния таска
  • delete: удаление таска
  • deps: изменение в списке зависимостей
  • share: изменение доступа к заданию
  • abort: отмена сборки
  • progress

Изменения в подзадании

  • create
  • delete
  • approve/disapprove
  • progress

Событие 'progress'

  • Поэтапная загрузка таска в базу данных
  • Мониторинг сборки в реальном времени
  • Анализ процесса сборки

Этапы сборки (gb/gb-build-task-stages)

# prepare changes
gb-task-gen-buildrepo
gb-task-setup-remote
gb-task-copy-packages
gb-task-build-prep
gb-task-build
fail_if_task_abort_requested
gb-x-girar task-make-index-html "$id" ||:

gb-x-girar hook-event task update "$id" ||:
for i in $(src_nums); do
    gb-x-girar hook-event subtask update "$id" "$i" ||:
done

# run basic tests
gb-task-check-build
gb-task-check-noarch
gb-task-repo-plan

# gather information about closed bugs and fixed vulns
gb-task-gen-changelog
gb-task-find-closed-bugs
gb-task-find-fixed-vulns

# generate task and "next" repos
gb-task-gen-task-repo "$id"
gb-task-gen-next-repo

# run expensive tests
gb-task-repo-check-provides
gb-task-repo-unmets
gb-task-repo-elfsym
gb-task-check-install

# build and test arepo packages
gb-task-arepo

# run surmountable tests
gb-task-check-girar
gb-task-check-lastchange
gb-task-check-neighbour-version
gb-task-check-acl

# apply local policy enforcement
gb-task-local-policy

# save generated "next" repo for commit
gb-task-gen-ci
gb-task-gen-hash
gb-task-save-repo

Изменения в ACL

  • add
  • del
  • leader
  • replace
  • create
  • delete

RabbitMQ

  • High Availability
    • Кластер из трех узлов
    • Keepalived и VIP
    • Очереди типа quorum
  • Security
    • Все подключения осуществляются через TLS
    • Разграничен доступ к ресурсам между пользователями
    • Свой сервер аутентификации и авторизации
      • Авторизация по Source IP

Сервисы

ALTRepo DB

Сервисы

  • Сервис загрузки тасков
    • Поддержание актуальности базы
    • Обработка случаев сложных для ALTRepo Uploader
    • реализован на python с помощью библиотеки pika
  • Загрузка багов из багзиллы
    • Bugzilla Push
    • TODO: Сервис загрузки багов
  • Использование в тестировании сборочных заданий

sources:

Вопросы

qr.svg

https://blarse.github.io/girar-amqp/