Presentation for QA:Conference held in Moscow, Russia on April 23rd.
Author: Evgeny Antyshev, Virtuozzo
These slide discover some Openstack Infrastructure tools to ease the task of creating generic CI systems. As an illustration, I setup "model" CI stand to test Libvirt project. Important ideas originated from Openstack testing also mentioned: pre-review integration testing, testing infrastructure in a cloud, project gating, etc.
Openstack Third-Party CI and the review of a few Openstack Infrastructure projects
1. Openstack Third-Party CI и
обзор компонент тестовой
инфраструктуры
Евгений Антышев, Virtuozzo
eantyshev@virtuozzo.com
skype: Evgeny.Antyshev
2. Более 600 активных разработчиков(!)
54 команды, у каждой в среднем 10 проектов, от 1 до 138 (Infrastructure)
http://git.openstack.org/cgit/openstack/governance/plain/reference/projects.yaml
1. Основной язык -- Python. Затем: Shell, Puppet. Для данных: Yaml, ini-config, json.
2. Общая структура репозиториев: README.md, testr unittests, tox virtualenv wrapper
3. Общий процесс разработки: git, gerrit review
4. Задачи third-party CI:
1)Верификация входящих патчей на
своем окружении
2)Верификация third-party компонент как
необходимое условие для их принятия
сообществом
3)Стабильность third-party CI создает
хорошую репутацию в сообществе
5. Openstack CI scaling
“Jenkins”:
upstream CI robot
780 проектов
~900 workers
~20k events/day
Virtuozzo CI,
Virtuozzo Storage CI
3 проекта
3-6 workers
150 events/day
6. “Легенда”: удаленное
тестирование кода libvirt
• Разворачивание и обновление
тестовых сред с Ubuntu 14.04 LTS
(nodepool, diskimage-builder)
• Конфигурация тестовых задач для
Jenkins (Jenkins Jobs Builder)
• Управление запуском тестов (gearman)
8. nodepool
Jenkins +
plugins:
ZMQ, Node
and Label,
Gearman
WorkerN
“Trusty-label”
qemu-kvm
ssh
REST API
“Trusty-label”
image
Ubuntu 14.04
(Trusty Tahr)
base image
my-setup.sh
1) Create/update images
2) Deploy nodes for Jenkins
and utilize when it
finishes with them
Gearman
server
Provider cloud
14. Nodepool command line
> nodepool hold 123
> nodepool delete 123
> nodepool image-update all trusty1
15. Nodepool: создание
загрузочных образов
Snapshot images
Base image
Temporary VM
my-setup.sh
Take a snapshot
diskimage-builder
(DIB) images
Base image
qemu-nbd mount
Prep. in chroot
Convert
Upload to provider
16. Преимущества diskimage-
builder:
1) Можно запускать в VM
1) Более структурированный способ задания
конфигурации
1) Легкое добавление готовых элементов в
конфигурацию
17. diskimage-builder: типичные
задачи для автоматизации
■адреса репозиториев
■пользователи, ключи ssh
■установка и конфигурация приложений
■разделы фс, настройки загрузки
(growroot и пр.)
■кеширование git репозиториев и пр.
18. DIB stages & elements
Stages: root.d, extra-data.d, install.d (in
chrooted env.), finalise.d, etc.
Elements:
• ubuntu-minimal: base OS
• vm: preparation to boot in QEMU
• simple-init: boot scripts to enable
DHCP for NICs
• growroot: expand root FS to cover
available disk space
19. DIB element “my-slave”
(derived from my-setup.sh)
/etc/nodepool-elements/my-slave/
package-installs.yaml -- sshd, dev packages
extra-data.d/
50-jenkins-pubkey -- copy key from host to mounted
image
install.d/
50-jenkins-user 60-cache-libvirt
finalise.d/
99-nodepool-dir -- nodepool needs /etc/nodepool
27. Gearman
Сервис распределения задач и
client/worker API
http://gearman.org
“We on Openstack infrastructure team use Jenkins extensively. Our jenkins servers, at peak load,
runs 20,000+ jobs per day. At that load we require many jenkins slaves (900+) to process all of
those build jobs. We have found that our requirement was pushing Jenkins beyond it's limits
therefore we've decided to create the Gearman Plugin to support multiple Jenkins masters. The
gearman plugin was designed to support extra slaves, allow load balancing of build jobs, and
provide redundancy.”
https://wiki.jenkins-ci.org/display/JENKINS/Gearman+Plugin
28. Gearman workflow example
1. Worker registers “reverse” function on Gearman server.
2. Client sends “reverse” request and parameters.
3. Gearman server chooses the worker and assigns the job.
4. Worker sends result to Client via Server.
36. Материалы “libvirt CI”:
https://github.com/eantyshev/libvirt_ci
Полезные ссылки:
http://docs.openstack.org/infra/manual/
http://docs.openstack.org/infra/nodepool/
https://wiki.jenkins-ci.org/display/JENKINS/Gearman+Plugin
http://docs.openstack.org/infra/jenkins-job-builder/
Спасибо за внимание!
Вопросы?
37.
38. Система ревью для git
Робот, управляющий запуском тестов
(gear python client)
Сервис очередей для распределения задач
Jenkins master (Gearman
worker)
Jenkins slave
(рабочие среды)
Создание и удаление рабочих сред,
обновление образов (Gearman queue
monitoring)
45. Что дальше..?
• Как запускать тесты автоматически?
• Как регулировать число тестовых нод в
зависимости от нагрузки?
• Как масштабировать CI на несколько
Jenkins серверов?