SlideShare a Scribd company logo
1 of 46
Openstack Third-Party CI и
обзор компонент тестовой
инфраструктуры
Евгений Антышев, Virtuozzo
eantyshev@virtuozzo.com
skype: Evgeny.Antyshev
Более 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
Gerrit workflow
Задачи third-party CI:
1)Верификация входящих патчей на
своем окружении
2)Верификация third-party компонент как
необходимое условие для их принятия
сообществом
3)Стабильность third-party CI создает
хорошую репутацию в сообществе
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
“Легенда”: удаленное
тестирование кода libvirt
• Разворачивание и обновление
тестовых сред с Ubuntu 14.04 LTS
(nodepool, diskimage-builder)
• Конфигурация тестовых задач для
Jenkins (Jenkins Jobs Builder)
• Управление запуском тестов (gearman)
Nodepool
Управление пулом тестовых серверов и
загрузочными образами в Openstack
облаке
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
Nodepool: установка
1. PyPi
# pip install nodepool
2. Git sources
# git clone git://git.openstack.org/openstack-infra/nodepool.git
../nodepool # pip install -r requirements.txt
../nodepool # pip install .
3. puppet-nodepool project
# git clone git://git.openstack.org/openstack-infra/puppet-nodepool.git
Use README
Nodepool: конфигурация
/etc/nodepool/secure.conf
1) Создать пользователя jenkins, настроить ssh авторизацию и
sudo
2) apt-get update и установить dev пакеты
3) git clone git://libvirt.org/libvirt.git в /opt/git
/etc/nodepool-scripts/my-setup.sh
/etc/nodepool/nodepool.yaml
[database]
dburi=mysql+pymysql://nodepool:passwd@localhost/nodepooldb
[jenkins "jenkins1"]
user=jenkins
apikey=f828c94dbd53b7e2a055112ebbc90ea8
credentials=28755fdb-244a-4fcf-baee-496031323c12
url=http://10.94.136.33:8080/
Nodepool.yaml: header
script-dir: /etc/nodepool-scripts
elements-dir: /etc/nodepool-elements
images-dir: /opt/nodepool_dib
cron:
check: '*/15 * * * *'
cleanup: '*/1 * * * *'
image-update: '14 2 * * *'
zmq-publishers:
- tcp://localhost:8888
Nodepool.yaml
Jenkins label → image name
labels:
- name: trusty-label
image: trusty1
min-ready: 1
providers:
- name: openstack001-test
nodepool.yaml
Cloud providers
providers:
- name: openstack001-test
username: 'admin'
password: '5fcf6292e9a240e0'
auth-url: 'http://10.94.2.99:5000/v2.0/'
project-name: 'admin'
max-servers: 2
images:
- name: trusty1
base-image: trusty
setup: my-setup.sh
min-ram: 2048
username: jenkins
private-key: /opt/nodepool/jenkins_key
Nodepool command line
> nodepool hold 123
> nodepool delete 123
> nodepool image-update all trusty1
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
Преимущества diskimage-
builder:
1) Можно запускать в VM
1) Более структурированный способ задания
конфигурации
1) Легкое добавление готовых элементов в
конфигурацию
diskimage-builder: типичные
задачи для автоматизации
■адреса репозиториев
■пользователи, ключи ssh
■установка и конфигурация приложений
■разделы фс, настройки загрузки
(growroot и пр.)
■кеширование git репозиториев и пр.
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
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
/etc/nodepool/nodepool.yaml:
diskimages:
- name: ubuntu-trusty
elements:
- ubuntu-minimal
- vm
- simple-init
- growroot
- my-slave
release: trusty
env-vars:
TMPDIR: /opt/dib_tmp
DIB_IMAGE_CACHE: /opt/dib_cache
/var/log/nodepool.log: disk-image-create -x -t qcow2 --no-tmpfs --qemu-img-
options 'compat=0.10' -o /opt/nodepool_dib/42 ubuntu-minimal vm simple-
init growroot my-slave
…
Image file /opt/nodepool_dib/42.qcow2 created…
nodepool.yaml: diskimages
Jenkins Job Builder
Конфигурация как код
Yaml вместо Xml
Шаблоны, группы, макросы
JJB builder: copy-update-source
- builder:
name: copy-update-source
builders:
- shell: |
mv /opt/git/libvirt $WORKSPACE
cd libvirt
git clean -f -x
git fetch -f --recurse-submodules=yes 
origin {branch}
git checkout FETCH_HEAD
JJB builder: test-libvirt
- builder:
name: test-libvirt
builders:
- shell: |
cd libvirt
./autogen.sh --system
make
sudo make install
libvirtd --version
sudo libvirtd -d
virsh list --all
JJB template
- job-template:
name: smoke-libvirt-{branch}
node: trusty-label || dib-trusty-label
builders:
- copy-update-source:
branch: '{branch}'
- test-libvirt
publishers:
- email:
recepients: 'eantyshev@virtuozzo.com'
JJB project
- project:
name: libvirt
branch:
- master
- v1.3.1-maint
jobs:
- smoke-libvirt-{branch}
Jenkins view
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
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.
Ubuntu 14.04:
apt-get install gearman-job-server
/etc/nodepool/nodepool.yaml:
gearman-servers:
- host: localhost
Jenkins -> Configure System -> Enable
Gearman
Установка gearman-server,
Gearman plugin (client)
Gearman interactions
in “libvirt CI”
gearmand
Gearman Client
(Python API)
Jenkins Gearman
plugin (Java API)
Nodepool (status
TCP requests +
images tasks)
Gear worker
Диагностика gearman: status
request
Status line fmt: Function <enqeued> <executing> <Nworkers>
root@test-nodepool:/etc/jenkins_jobs/config# telnet localhost 4730
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
status
build:smoke-libvirt-v1.3.1-maint 0 0 1
set_description:10.94.136.33 0 0 1
build:smoke-libvirt-master 0 0 1
stop:10.94.136.33 0 0 1
build:smoke-libvirt-v1.3.1-maint:dib-trusty-label 0 0 1
build:smoke-libvirt-master:dib-trusty-label 0 0 1
.
^]
telnet> Connection closed.
Job requests via Gear client
Python implementation:
http://pypi.python.org/pypi/gear
https://github.com/zaro0508/gearman-plugin-client
>python gear_client.py -s localhost -p 4730 --function build:smoke-libvirt-master:trusty-label --params
'{"OFFLINE_NODE_WHEN_COMPLETE":"true"}'
Zuul
Планирование тестовых
запусков для per-patch CI,
project gating для gerrit
http://docs.openstack.org/infra/zuul/
Zuul pipelines
Independent
check, post-
merge, periodic
Dependent
gate
HEAD 1
HEAD 2
HEAD 3
HEAD 1
2
3
Independent pipelines Dependent pipeline
http://status.openstack.org/zuul/
Материалы “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/
Спасибо за внимание!
Вопросы?
Система ревью для git
Робот, управляющий запуском тестов
(gear python client)
Сервис очередей для распределения задач
Jenkins master (Gearman
worker)
Jenkins slave
(рабочие среды)
Создание и удаление рабочих сред,
обновление образов (Gearman queue
monitoring)
/etc/jenkins-jobs/config/libvirt.yaml:
- job-template:
name: smoke-{name}-{branch}
node: trusty-label || dib-trusty-label
JJB: node labels
smoke-libvirt job, take 2: split
builders
- job:
name: smoke-libvirt
project-type: freestyle
node: trusty-label
builders:
- shell: |
mv /opt/git/libvirt $WORKSPACE
cd libvirt
git clean -f -x
git fetch -f --recurse-submodules=yes 
origin master
git checkout FETCH_HEAD
- shell: |
./autogen.sh --system
make
sudo make install
libvirtd --version
sudo libvirtd -d
virsh list --all
publishers:
- email:
recepients: 'eantyshev@virtuozzo.com'
● root.d: Download cloud image (qcow2)
mount by qemu-nbd, submounts: /dev, /dev/pts, /sys, /proc + hooks dir
● environment.d: Set default environment vars
● extra-files.d: copy files to mounted image, f.e. ssh keys
Go chroot under mounted path
● pre-install.d, install.d, post-install.d: Executed in chroot
environment: set repo mirrors, install packages, configure apps
Copy root content to temp. Unmount amended image.
Make clean raw image file
● block-device.d: (auxiliary) Partition loopback block device
Create filesystem, mount the image (+/proc,dev,sys submounts), copy rootfs
contents from temp
● finalise.d: install/configure bootloader, other tools
● cleanup.d: cleanup temporary repos, unblock daemons
Unmount, convert from raw to qcow2
DIB stages
smoke-libvirt job, take 1
Недостатки: copy-paste when >1 job
Неструктурированная логика в
builders
1) Макрос copy-update-source с
параметром branch и макрос
test-libvirt
2) Job -> Job Template + Project
3) “project-type: freestyle” ->
defaults.yaml
- job:
name: smoke-libvirt
project-type: freestyle
node: trusty-label
builders:
- shell: |
mv /opt/git/libvirt $WORKSPACE
cd libvirt
git clean -f -x
git fetch -f --recurse-submodules=yes 
origin master
git checkout FETCH_HEAD
./autogen.sh --system
make
sudo make install
libvirtd --version
sudo libvirtd -d
virsh list --all
publishers:
- email:
recepients: 'eantyshev@virtuozzo.com'
JJB defaults
- defaults:
name: global
project-type: freestyle
concurrent: true
wrappers:
- timeout:
timeout: 30
fail: true
- timestamps
logrotate:
daysToKeep: 7
numToKeep: -1
artifactDaysToKeep: -1
artifactNumToKeep: -1
type: patchset-created, patchSet.ref: 'refs/changes/38/307638/1'
type: comment-added, comment: “Looks good overall, couple of ....”
type: patchset-created, patchSet.ref: ‘refs/changes/78/216378/38’
type: comment-added, comment: “blablabla...”
zuul-server (scheduler) zuul-merger (git server)
> gerrit event-stream
Gearman server
merger:merge 0 0 1
merger:update 0 0 1
Job requests:
merger:merge args{gerrit_url, project, ref}*
merger:update args{gerrit_url, project}
Merge job complete:
Zuul ref: commit id
git clone <url> /var/lib/zuul/git/<project>
git merge <ref>
In Jenkins job:
git fetch $ZUUL_URL $ref
Zuul workflow
Что дальше..?
• Как запускать тесты автоматически?
• Как регулировать число тестовых нод в
зависимости от нагрузки?
• Как масштабировать CI на несколько
Jenkins серверов?
- job:
name: test-example
builders:
- shell: ‘echo Success!’
<?xml version="1.0" encoding="utf-8"?>
<project>
<actions/>
<description>&lt;!-- Managed by Jenkins Job Builder --&gt;</description>
<keepDependencies>false</keepDependencies>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<concurrentBuild>false</concurrentBuild>
<canRoam>true</canRoam>
<properties/>
<scm class="hudson.scm.NullSCM"/>
<builders>
<hudson.tasks.Shell>
<command>echo Success!</command>
</hudson.tasks.Shell>
</builders>
<buildWrappers/>
</project>
Yaml to Xml
> jenkins-jobs test sample-job.yaml

More Related Content

What's hot

Hyperledger composer
Hyperledger composerHyperledger composer
Hyperledger composerwonyong hwang
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Ontico
 
Kubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanKubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanMihai Criveti
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...ZeroTurnaround
 
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
파이썬 개발환경 구성하기의 끝판왕 - Docker Composeraccoony
 
Reproducibility of computational workflows is automated using continuous anal...
Reproducibility of computational workflows is automated using continuous anal...Reproducibility of computational workflows is automated using continuous anal...
Reproducibility of computational workflows is automated using continuous anal...Kento Aoyama
 
State of the Jenkins Automation
State of the Jenkins AutomationState of the Jenkins Automation
State of the Jenkins AutomationJulien Pivotto
 
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기raccoony
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDocker, Inc.
 
開放運算&GPU技術研究班
開放運算&GPU技術研究班開放運算&GPU技術研究班
開放運算&GPU技術研究班Paul Chao
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDocker, Inc.
 
Scripting Support in GFv3 Prelude - Full Version
Scripting Support in GFv3 Prelude - Full VersionScripting Support in GFv3 Prelude - Full Version
Scripting Support in GFv3 Prelude - Full VersionEduardo Pelegri-Llopart
 
Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013
Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013
Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013Chris Barber
 
Drupal contrib module maintaining
Drupal contrib module maintainingDrupal contrib module maintaining
Drupal contrib module maintainingAndrii Podanenko
 
Continuous Integration: SaaS vs Jenkins in Cloud
Continuous Integration: SaaS vs Jenkins in CloudContinuous Integration: SaaS vs Jenkins in Cloud
Continuous Integration: SaaS vs Jenkins in CloudIdeato
 
Exploring the Titanium CLI - Codestrong 2012
Exploring the Titanium CLI - Codestrong 2012Exploring the Titanium CLI - Codestrong 2012
Exploring the Titanium CLI - Codestrong 2012Chris Barber
 

What's hot (19)

kubernetes practice
kubernetes practicekubernetes practice
kubernetes practice
 
Hyperledger composer
Hyperledger composerHyperledger composer
Hyperledger composer
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Kubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanKubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with Podman
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
 
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
파이썬 개발환경 구성하기의 끝판왕 - Docker Compose
 
Reproducibility of computational workflows is automated using continuous anal...
Reproducibility of computational workflows is automated using continuous anal...Reproducibility of computational workflows is automated using continuous anal...
Reproducibility of computational workflows is automated using continuous anal...
 
State of the Jenkins Automation
State of the Jenkins AutomationState of the Jenkins Automation
State of the Jenkins Automation
 
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
Django로 만든 웹 애플리케이션 도커라이징하기 + 도커 컴포즈로 개발 환경 구축하기
 
DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best Practices
 
開放運算&GPU技術研究班
開放運算&GPU技術研究班開放運算&GPU技術研究班
開放運算&GPU技術研究班
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
 
sed.pdf
sed.pdfsed.pdf
sed.pdf
 
Scripting Support in GFv3 Prelude - Full Version
Scripting Support in GFv3 Prelude - Full VersionScripting Support in GFv3 Prelude - Full Version
Scripting Support in GFv3 Prelude - Full Version
 
Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013
Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013
Titanium 3.2 CLI - TiAppCamp2 - 11/2/2013
 
Drupal contrib module maintaining
Drupal contrib module maintainingDrupal contrib module maintaining
Drupal contrib module maintaining
 
Continuous Integration: SaaS vs Jenkins in Cloud
Continuous Integration: SaaS vs Jenkins in CloudContinuous Integration: SaaS vs Jenkins in Cloud
Continuous Integration: SaaS vs Jenkins in Cloud
 
Exploring the Titanium CLI - Codestrong 2012
Exploring the Titanium CLI - Codestrong 2012Exploring the Titanium CLI - Codestrong 2012
Exploring the Titanium CLI - Codestrong 2012
 

Viewers also liked

Infrastructure-as-Code and CI Infrastructure at OpenStack
Infrastructure-as-Code and CI Infrastructure at OpenStackInfrastructure-as-Code and CI Infrastructure at OpenStack
Infrastructure-as-Code and CI Infrastructure at OpenStackAndreas Jaeger
 
Kurs Triks tour
Kurs Triks tourKurs Triks tour
Kurs Triks tourNelly Kam
 
Путь в облака. А.Зобов.
Путь в облака. А.Зобов.Путь в облака. А.Зобов.
Путь в облака. А.Зобов.Clouds NN
 
Контроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл БорисовКонтроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл БорисовYandex
 
Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияYandex
 
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС DevDay
 
Дмитрий Пронин – Python для веба
Дмитрий Пронин – Python для вебаДмитрий Пронин – Python для веба
Дмитрий Пронин – Python для вебаYandex
 
jobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптомjobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптомVasilii Chernov
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотекVladimir Sitnikov
 
Непрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeНепрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeVasilii Chernov
 
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...Ontico
 
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)Ontico
 
Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...
Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...
Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...OpenShift Origin
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Ontico
 

Viewers also liked (19)

Infrastructure-as-Code and CI Infrastructure at OpenStack
Infrastructure-as-Code and CI Infrastructure at OpenStackInfrastructure-as-Code and CI Infrastructure at OpenStack
Infrastructure-as-Code and CI Infrastructure at OpenStack
 
Kurs Triks tour
Kurs Triks tourKurs Triks tour
Kurs Triks tour
 
Путь в облака. А.Зобов.
Путь в облака. А.Зобов.Путь в облака. А.Зобов.
Путь в облака. А.Зобов.
 
Контроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл БорисовКонтроль за стилем кода — Кирилл Борисов
Контроль за стилем кода — Кирилл Борисов
 
Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
 
Дмитрий Пронин – Python для веба
Дмитрий Пронин – Python для вебаДмитрий Пронин – Python для веба
Дмитрий Пронин – Python для веба
 
jobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптомjobDSL plugin: настройка jenkins ci скриптом
jobDSL plugin: настройка jenkins ci скриптом
 
Проблемы производительности open source библиотек
Проблемы производительности open source библиотекПроблемы производительности open source библиотек
Проблемы производительности open source библиотек
 
Непрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQubeНепрерывный анализ качества кода с помощью SonarQube
Непрерывный анализ качества кода с помощью SonarQube
 
юкк
юккюкк
юкк
 
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
Highload в ВУЗе идеализм, расчётливый менеджмент или пустые надежды / Артем К...
 
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
Ceph BlueStore - новый тип хранилища в Ceph / Максим Воронцов, (Redsys)
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...
Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...
Build Your Own PaaS, Just like Red Hat's OpenShift from LinuxCon 2013 New Orl...
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 

Similar to Openstack Third-Party CI and the review of a few Openstack Infrastructure projects

Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingHenry Schreiner
 
Exploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in PythonExploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in PythonIvan Ma
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaAutomate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaPantheon
 
Assisted-Installer-DevConf-US-2021
Assisted-Installer-DevConf-US-2021Assisted-Installer-DevConf-US-2021
Assisted-Installer-DevConf-US-2021Nir Magnezi
 
"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021
"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021
"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021Freddy Rolland
 
Ondřej Procházka - Deployment podle Devel.cz
Ondřej Procházka - Deployment podle Devel.czOndřej Procházka - Deployment podle Devel.cz
Ondřej Procházka - Deployment podle Devel.czDevelcz
 
Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Henry Schreiner
 
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Evgeniy Kuzmin
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)DECK36
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyMediafly
 
Gitlab and Lingvokot
Gitlab and LingvokotGitlab and Lingvokot
Gitlab and LingvokotLingvokot
 
Scaffolding for Serverless: lightning talk for AWS Arlington Meetup
Scaffolding for Serverless: lightning talk for AWS Arlington MeetupScaffolding for Serverless: lightning talk for AWS Arlington Meetup
Scaffolding for Serverless: lightning talk for AWS Arlington MeetupChris Shenton
 
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, KyivKubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, KyivAleksey Asiutin
 
Infrastructure as code
Infrastructure as codeInfrastructure as code
Infrastructure as codedaisuke awaji
 
How Honestbee Does CI/CD on Kubernetes - Vincent DeSmet
How Honestbee Does CI/CD on Kubernetes - Vincent DeSmetHow Honestbee Does CI/CD on Kubernetes - Vincent DeSmet
How Honestbee Does CI/CD on Kubernetes - Vincent DeSmetDevOpsDaysJKT
 
Год в Github bugbounty, опыт участия
Год в Github bugbounty, опыт участияГод в Github bugbounty, опыт участия
Год в Github bugbounty, опыт участияdefcon_kz
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Fabrice Bernhard
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment TacticsIan Barber
 
Automação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsAutomação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsRaul Leite
 

Similar to Openstack Third-Party CI and the review of a few Openstack Infrastructure projects (20)

Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
 
Exploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in PythonExploring MySQL Operator for Kubernetes in Python
Exploring MySQL Operator for Kubernetes in Python
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaAutomate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon Vienna
 
Assisted-Installer-DevConf-US-2021
Assisted-Installer-DevConf-US-2021Assisted-Installer-DevConf-US-2021
Assisted-Installer-DevConf-US-2021
 
"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021
"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021
"Look Ma, no hands! Zero Touch Provisioning for OpenShift" DevConf.US 2021
 
Ondřej Procházka - Deployment podle Devel.cz
Ondřej Procházka - Deployment podle Devel.czOndřej Procházka - Deployment podle Devel.cz
Ondřej Procházka - Deployment podle Devel.cz
 
Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023
 
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
Continuous integration / continuous delivery of web applications, Eugen Kuzmi...
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - Mediafly
 
Gitlab and Lingvokot
Gitlab and LingvokotGitlab and Lingvokot
Gitlab and Lingvokot
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Scaffolding for Serverless: lightning talk for AWS Arlington Meetup
Scaffolding for Serverless: lightning talk for AWS Arlington MeetupScaffolding for Serverless: lightning talk for AWS Arlington Meetup
Scaffolding for Serverless: lightning talk for AWS Arlington Meetup
 
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, KyivKubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
 
Infrastructure as code
Infrastructure as codeInfrastructure as code
Infrastructure as code
 
How Honestbee Does CI/CD on Kubernetes - Vincent DeSmet
How Honestbee Does CI/CD on Kubernetes - Vincent DeSmetHow Honestbee Does CI/CD on Kubernetes - Vincent DeSmet
How Honestbee Does CI/CD on Kubernetes - Vincent DeSmet
 
Год в Github bugbounty, опыт участия
Год в Github bugbounty, опыт участияГод в Github bugbounty, опыт участия
Год в Github bugbounty, опыт участия
 
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Automação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOpsAutomação do físico ao NetSecDevOps
Automação do físico ao NetSecDevOps
 

Recently uploaded

Call Girls In Aerocity 🤳 Call Us +919599264170
Call Girls In Aerocity 🤳 Call Us +919599264170Call Girls In Aerocity 🤳 Call Us +919599264170
Call Girls In Aerocity 🤳 Call Us +919599264170Escort Service
 
Dutch Power - 26 maart 2024 - Henk Kras - Circular Plastics
Dutch Power - 26 maart 2024 - Henk Kras - Circular PlasticsDutch Power - 26 maart 2024 - Henk Kras - Circular Plastics
Dutch Power - 26 maart 2024 - Henk Kras - Circular PlasticsDutch Power
 
The Ten Facts About People With Autism Presentation
The Ten Facts About People With Autism PresentationThe Ten Facts About People With Autism Presentation
The Ten Facts About People With Autism PresentationNathan Young
 
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...Salam Al-Karadaghi
 
Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...
Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...
Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...marjmae69
 
Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...
Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...
Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...Krijn Poppe
 
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...NETWAYS
 
call girls in delhi malviya nagar @9811711561@
call girls in delhi malviya nagar @9811711561@call girls in delhi malviya nagar @9811711561@
call girls in delhi malviya nagar @9811711561@vikas rana
 
Philippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.pptPhilippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.pptssuser319dad
 
Work Remotely with Confluence ACE 2.pptx
Work Remotely with Confluence ACE 2.pptxWork Remotely with Confluence ACE 2.pptx
Work Remotely with Confluence ACE 2.pptxmavinoikein
 
Event 4 Introduction to Open Source.pptx
Event 4 Introduction to Open Source.pptxEvent 4 Introduction to Open Source.pptx
Event 4 Introduction to Open Source.pptxaryanv1753
 
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...NETWAYS
 
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...NETWAYS
 
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...NETWAYS
 
PHYSICS PROJECT BY MSC - NANOTECHNOLOGY
PHYSICS PROJECT BY MSC  - NANOTECHNOLOGYPHYSICS PROJECT BY MSC  - NANOTECHNOLOGY
PHYSICS PROJECT BY MSC - NANOTECHNOLOGYpruthirajnayak525
 
Anne Frank A Beacon of Hope amidst darkness ppt.pptx
Anne Frank A Beacon of Hope amidst darkness ppt.pptxAnne Frank A Beacon of Hope amidst darkness ppt.pptx
Anne Frank A Beacon of Hope amidst darkness ppt.pptxnoorehahmad
 
The 3rd Intl. Workshop on NL-based Software Engineering
The 3rd Intl. Workshop on NL-based Software EngineeringThe 3rd Intl. Workshop on NL-based Software Engineering
The 3rd Intl. Workshop on NL-based Software EngineeringSebastiano Panichella
 
SBFT Tool Competition 2024 -- Python Test Case Generation Track
SBFT Tool Competition 2024 -- Python Test Case Generation TrackSBFT Tool Competition 2024 -- Python Test Case Generation Track
SBFT Tool Competition 2024 -- Python Test Case Generation TrackSebastiano Panichella
 
Genshin Impact PPT Template by EaTemp.pptx
Genshin Impact PPT Template by EaTemp.pptxGenshin Impact PPT Template by EaTemp.pptx
Genshin Impact PPT Template by EaTemp.pptxJohnree4
 
miladyskindiseases-200705210221 2.!!pptx
miladyskindiseases-200705210221 2.!!pptxmiladyskindiseases-200705210221 2.!!pptx
miladyskindiseases-200705210221 2.!!pptxCarrieButtitta
 

Recently uploaded (20)

Call Girls In Aerocity 🤳 Call Us +919599264170
Call Girls In Aerocity 🤳 Call Us +919599264170Call Girls In Aerocity 🤳 Call Us +919599264170
Call Girls In Aerocity 🤳 Call Us +919599264170
 
Dutch Power - 26 maart 2024 - Henk Kras - Circular Plastics
Dutch Power - 26 maart 2024 - Henk Kras - Circular PlasticsDutch Power - 26 maart 2024 - Henk Kras - Circular Plastics
Dutch Power - 26 maart 2024 - Henk Kras - Circular Plastics
 
The Ten Facts About People With Autism Presentation
The Ten Facts About People With Autism PresentationThe Ten Facts About People With Autism Presentation
The Ten Facts About People With Autism Presentation
 
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
Exploring protein-protein interactions by Weak Affinity Chromatography (WAC) ...
 
Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...
Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...
Gaps, Issues and Challenges in the Implementation of Mother Tongue Based-Mult...
 
Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...
Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...
Presentation for the Strategic Dialogue on the Future of Agriculture, Brussel...
 
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
Open Source Camp Kubernetes 2024 | Monitoring Kubernetes With Icinga by Eric ...
 
call girls in delhi malviya nagar @9811711561@
call girls in delhi malviya nagar @9811711561@call girls in delhi malviya nagar @9811711561@
call girls in delhi malviya nagar @9811711561@
 
Philippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.pptPhilippine History cavite Mutiny Report.ppt
Philippine History cavite Mutiny Report.ppt
 
Work Remotely with Confluence ACE 2.pptx
Work Remotely with Confluence ACE 2.pptxWork Remotely with Confluence ACE 2.pptx
Work Remotely with Confluence ACE 2.pptx
 
Event 4 Introduction to Open Source.pptx
Event 4 Introduction to Open Source.pptxEvent 4 Introduction to Open Source.pptx
Event 4 Introduction to Open Source.pptx
 
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
OSCamp Kubernetes 2024 | A Tester's Guide to CI_CD as an Automated Quality Co...
 
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
OSCamp Kubernetes 2024 | Zero-Touch OS-Infrastruktur für Container und Kubern...
 
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
Open Source Camp Kubernetes 2024 | Running WebAssembly on Kubernetes by Alex ...
 
PHYSICS PROJECT BY MSC - NANOTECHNOLOGY
PHYSICS PROJECT BY MSC  - NANOTECHNOLOGYPHYSICS PROJECT BY MSC  - NANOTECHNOLOGY
PHYSICS PROJECT BY MSC - NANOTECHNOLOGY
 
Anne Frank A Beacon of Hope amidst darkness ppt.pptx
Anne Frank A Beacon of Hope amidst darkness ppt.pptxAnne Frank A Beacon of Hope amidst darkness ppt.pptx
Anne Frank A Beacon of Hope amidst darkness ppt.pptx
 
The 3rd Intl. Workshop on NL-based Software Engineering
The 3rd Intl. Workshop on NL-based Software EngineeringThe 3rd Intl. Workshop on NL-based Software Engineering
The 3rd Intl. Workshop on NL-based Software Engineering
 
SBFT Tool Competition 2024 -- Python Test Case Generation Track
SBFT Tool Competition 2024 -- Python Test Case Generation TrackSBFT Tool Competition 2024 -- Python Test Case Generation Track
SBFT Tool Competition 2024 -- Python Test Case Generation Track
 
Genshin Impact PPT Template by EaTemp.pptx
Genshin Impact PPT Template by EaTemp.pptxGenshin Impact PPT Template by EaTemp.pptx
Genshin Impact PPT Template by EaTemp.pptx
 
miladyskindiseases-200705210221 2.!!pptx
miladyskindiseases-200705210221 2.!!pptxmiladyskindiseases-200705210221 2.!!pptx
miladyskindiseases-200705210221 2.!!pptx
 

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)
  • 7. Nodepool Управление пулом тестовых серверов и загрузочными образами в Openstack облаке
  • 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
  • 9. Nodepool: установка 1. PyPi # pip install nodepool 2. Git sources # git clone git://git.openstack.org/openstack-infra/nodepool.git ../nodepool # pip install -r requirements.txt ../nodepool # pip install . 3. puppet-nodepool project # git clone git://git.openstack.org/openstack-infra/puppet-nodepool.git Use README
  • 10. Nodepool: конфигурация /etc/nodepool/secure.conf 1) Создать пользователя jenkins, настроить ssh авторизацию и sudo 2) apt-get update и установить dev пакеты 3) git clone git://libvirt.org/libvirt.git в /opt/git /etc/nodepool-scripts/my-setup.sh /etc/nodepool/nodepool.yaml [database] dburi=mysql+pymysql://nodepool:passwd@localhost/nodepooldb [jenkins "jenkins1"] user=jenkins apikey=f828c94dbd53b7e2a055112ebbc90ea8 credentials=28755fdb-244a-4fcf-baee-496031323c12 url=http://10.94.136.33:8080/
  • 11. Nodepool.yaml: header script-dir: /etc/nodepool-scripts elements-dir: /etc/nodepool-elements images-dir: /opt/nodepool_dib cron: check: '*/15 * * * *' cleanup: '*/1 * * * *' image-update: '14 2 * * *' zmq-publishers: - tcp://localhost:8888
  • 12. Nodepool.yaml Jenkins label → image name labels: - name: trusty-label image: trusty1 min-ready: 1 providers: - name: openstack001-test
  • 13. nodepool.yaml Cloud providers providers: - name: openstack001-test username: 'admin' password: '5fcf6292e9a240e0' auth-url: 'http://10.94.2.99:5000/v2.0/' project-name: 'admin' max-servers: 2 images: - name: trusty1 base-image: trusty setup: my-setup.sh min-ram: 2048 username: jenkins private-key: /opt/nodepool/jenkins_key
  • 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
  • 20. /etc/nodepool/nodepool.yaml: diskimages: - name: ubuntu-trusty elements: - ubuntu-minimal - vm - simple-init - growroot - my-slave release: trusty env-vars: TMPDIR: /opt/dib_tmp DIB_IMAGE_CACHE: /opt/dib_cache /var/log/nodepool.log: disk-image-create -x -t qcow2 --no-tmpfs --qemu-img- options 'compat=0.10' -o /opt/nodepool_dib/42 ubuntu-minimal vm simple- init growroot my-slave … Image file /opt/nodepool_dib/42.qcow2 created… nodepool.yaml: diskimages
  • 21. Jenkins Job Builder Конфигурация как код Yaml вместо Xml Шаблоны, группы, макросы
  • 22. JJB builder: copy-update-source - builder: name: copy-update-source builders: - shell: | mv /opt/git/libvirt $WORKSPACE cd libvirt git clean -f -x git fetch -f --recurse-submodules=yes origin {branch} git checkout FETCH_HEAD
  • 23. JJB builder: test-libvirt - builder: name: test-libvirt builders: - shell: | cd libvirt ./autogen.sh --system make sudo make install libvirtd --version sudo libvirtd -d virsh list --all
  • 24. JJB template - job-template: name: smoke-libvirt-{branch} node: trusty-label || dib-trusty-label builders: - copy-update-source: branch: '{branch}' - test-libvirt publishers: - email: recepients: 'eantyshev@virtuozzo.com'
  • 25. JJB project - project: name: libvirt branch: - master - v1.3.1-maint jobs: - smoke-libvirt-{branch}
  • 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.
  • 29. Ubuntu 14.04: apt-get install gearman-job-server /etc/nodepool/nodepool.yaml: gearman-servers: - host: localhost Jenkins -> Configure System -> Enable Gearman Установка gearman-server, Gearman plugin (client)
  • 30. Gearman interactions in “libvirt CI” gearmand Gearman Client (Python API) Jenkins Gearman plugin (Java API) Nodepool (status TCP requests + images tasks) Gear worker
  • 31. Диагностика gearman: status request Status line fmt: Function <enqeued> <executing> <Nworkers> root@test-nodepool:/etc/jenkins_jobs/config# telnet localhost 4730 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. status build:smoke-libvirt-v1.3.1-maint 0 0 1 set_description:10.94.136.33 0 0 1 build:smoke-libvirt-master 0 0 1 stop:10.94.136.33 0 0 1 build:smoke-libvirt-v1.3.1-maint:dib-trusty-label 0 0 1 build:smoke-libvirt-master:dib-trusty-label 0 0 1 . ^] telnet> Connection closed.
  • 32. Job requests via Gear client Python implementation: http://pypi.python.org/pypi/gear https://github.com/zaro0508/gearman-plugin-client >python gear_client.py -s localhost -p 4730 --function build:smoke-libvirt-master:trusty-label --params '{"OFFLINE_NODE_WHEN_COMPLETE":"true"}'
  • 33. Zuul Планирование тестовых запусков для per-patch CI, project gating для gerrit http://docs.openstack.org/infra/zuul/
  • 34. Zuul pipelines Independent check, post- merge, periodic Dependent gate HEAD 1 HEAD 2 HEAD 3 HEAD 1 2 3
  • 35. Independent pipelines Dependent pipeline http://status.openstack.org/zuul/
  • 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)
  • 40. smoke-libvirt job, take 2: split builders - job: name: smoke-libvirt project-type: freestyle node: trusty-label builders: - shell: | mv /opt/git/libvirt $WORKSPACE cd libvirt git clean -f -x git fetch -f --recurse-submodules=yes origin master git checkout FETCH_HEAD - shell: | ./autogen.sh --system make sudo make install libvirtd --version sudo libvirtd -d virsh list --all publishers: - email: recepients: 'eantyshev@virtuozzo.com'
  • 41. ● root.d: Download cloud image (qcow2) mount by qemu-nbd, submounts: /dev, /dev/pts, /sys, /proc + hooks dir ● environment.d: Set default environment vars ● extra-files.d: copy files to mounted image, f.e. ssh keys Go chroot under mounted path ● pre-install.d, install.d, post-install.d: Executed in chroot environment: set repo mirrors, install packages, configure apps Copy root content to temp. Unmount amended image. Make clean raw image file ● block-device.d: (auxiliary) Partition loopback block device Create filesystem, mount the image (+/proc,dev,sys submounts), copy rootfs contents from temp ● finalise.d: install/configure bootloader, other tools ● cleanup.d: cleanup temporary repos, unblock daemons Unmount, convert from raw to qcow2 DIB stages
  • 42. smoke-libvirt job, take 1 Недостатки: copy-paste when >1 job Неструктурированная логика в builders 1) Макрос copy-update-source с параметром branch и макрос test-libvirt 2) Job -> Job Template + Project 3) “project-type: freestyle” -> defaults.yaml - job: name: smoke-libvirt project-type: freestyle node: trusty-label builders: - shell: | mv /opt/git/libvirt $WORKSPACE cd libvirt git clean -f -x git fetch -f --recurse-submodules=yes origin master git checkout FETCH_HEAD ./autogen.sh --system make sudo make install libvirtd --version sudo libvirtd -d virsh list --all publishers: - email: recepients: 'eantyshev@virtuozzo.com'
  • 43. JJB defaults - defaults: name: global project-type: freestyle concurrent: true wrappers: - timeout: timeout: 30 fail: true - timestamps logrotate: daysToKeep: 7 numToKeep: -1 artifactDaysToKeep: -1 artifactNumToKeep: -1
  • 44. type: patchset-created, patchSet.ref: 'refs/changes/38/307638/1' type: comment-added, comment: “Looks good overall, couple of ....” type: patchset-created, patchSet.ref: ‘refs/changes/78/216378/38’ type: comment-added, comment: “blablabla...” zuul-server (scheduler) zuul-merger (git server) > gerrit event-stream Gearman server merger:merge 0 0 1 merger:update 0 0 1 Job requests: merger:merge args{gerrit_url, project, ref}* merger:update args{gerrit_url, project} Merge job complete: Zuul ref: commit id git clone <url> /var/lib/zuul/git/<project> git merge <ref> In Jenkins job: git fetch $ZUUL_URL $ref Zuul workflow
  • 45. Что дальше..? • Как запускать тесты автоматически? • Как регулировать число тестовых нод в зависимости от нагрузки? • Как масштабировать CI на несколько Jenkins серверов?
  • 46. - job: name: test-example builders: - shell: ‘echo Success!’ <?xml version="1.0" encoding="utf-8"?> <project> <actions/> <description>&lt;!-- Managed by Jenkins Job Builder --&gt;</description> <keepDependencies>false</keepDependencies> <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> <concurrentBuild>false</concurrentBuild> <canRoam>true</canRoam> <properties/> <scm class="hudson.scm.NullSCM"/> <builders> <hudson.tasks.Shell> <command>echo Success!</command> </hudson.tasks.Shell> </builders> <buildWrappers/> </project> Yaml to Xml > jenkins-jobs test sample-job.yaml