SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Как Vagrant и
Chef ускорили
разработку в
несколько раз
Тимур Батыршин
Cinarra Systems
Обо мне
Инженер по эксплуатации в
Cinarra Systems
• Тимур Батыршин
• timur@cinarra.com
• @erthad
Cinarra Systems
• Молодая международная
компания
• Строим платформу для
мобильной рекламы
Ситуация год назад
• Инфраструктурой еще
никто не занимается
• Более 10 сильносвязанных
компонентов приложения
• Много конфигов
• Тесты зависят от данных
Проблемы
• Долгий деплой
• Сложность конфигурации
• Создание окружений
• Синхронизация тестовых
окружений
• Воспроизводимость
Chef
http://chef.io
Шаблоны Chef
• Плохо работают для часто
меняющихся конфигов
• Много лишней работы
для большого числа
параметров
Augeas
http://augeas.net
Augeas
$	
  cat	
  /etc/nginx/nginx.conf	
  
user	
  www-­‐data;	
  
worker_processes	
  4;	
  
events	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  multi_accept	
  on;	
  
}	
  
http	
  {	
  
	
   sendfile	
  on;	
  
	
   tcp_nopush	
  on;	
  
	
   tcp_nodelay	
  on;	
  
	
  	
  	
  	
  	
  	
  	
  	
  gzip	
  on;	
  
}
Augeas
$	
  augtool	
  print	
  /files/etc/nginx/nginx.conf	
  
/files/etc/nginx/nginx.conf	
  
/files/etc/nginx/nginx.conf/user	
  =	
  "www-­‐data"	
  
/files/etc/nginx/nginx.conf/worker_processes	
  =	
  "4"	
  
/files/etc/nginx/nginx.conf/events	
  
/files/etc/nginx/nginx.conf/events/multi_accept	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http	
  
/files/etc/nginx/nginx.conf/http/sendfile	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http/tcp_nopush	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http/tcp_nodelay	
  =	
  "on"	
  
/files/etc/nginx/nginx.conf/http/gzip	
  =	
  "on"	
  
Augeas (ресурс Chef)
augeas_template	
  "/etc/cinarra/cate/cate.conf"	
  do	
  
	
  	
  template	
  "/etc/cinarra/cate/cate.conf.sample"	
  
	
  	
  lens	
  "IniFile"	
  
	
  	
  parameters(	
  
	
  	
  	
  	
  "CATE/logging_lev"	
  =>	
  node.cate.log_level,	
  
	
  	
  	
  	
  "CATE/cmgw_host"	
  =>	
  node.cate.cmgw_host,	
  
	
  	
  	
  	
  "CATE/csync_host"	
  =>	
  node.cate.csync_host,	
  
	
  	
  	
  	
  "CATE/csync_port"	
  =>	
  node.cate.csync_port	
  
	
  	
  )	
  
	
  	
  notifies	
  :run,	
  "execute[supervisorctl	
  restart	
  cate]"	
  
end	
  
Augeas
$	
  cat	
  /etc/cinarra/cate/cate.conf.sample	
  
[CATE]	
  
instance_id	
  =	
  1	
  
logging_lev	
  =	
  6	
  
cate_thread_n	
  =	
  2	
  
cmgw_host	
  =	
  127.0.0.1	
  
cmgw_num	
  =	
  2	
  
csync_enabled	
  =	
  true	
  
csync_host	
  =	
  127.0.0.1	
  
csync_port	
  =	
  1234	
  
Augeas
$	
  cat	
  /etc/cinarra/cate/cate.conf	
  
[CATE]	
  
instance_id	
  =	
  1	
  
logging_lev	
  =	
  3	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  cate.log_level	
  =	
  3	
  
cate_thread_n	
  =	
  2	
  
cmgw_host	
  =	
  10.0.0.2	
  	
  	
  	
  	
  	
  #	
  cate.cmgw_host	
  =	
  10.0.0.2	
  
cmgw_num	
  =	
  2	
  
csync_enabled	
  =	
  true	
  
csync_host	
  =	
  10.0.0.3	
  	
  	
  	
  	
  #	
  cate.csync_host	
  =	
  10.0.0.3	
  
csync_port	
  =	
  1234	
  	
  	
  	
  	
  	
  	
  	
  	
  #	
  cate.csync_port	
  =	
  nil	
  
Плюсы Augeas
• Всеми конфигами
управляем единообразно
• Поддерживает почти все
форматы конфигов
• Строгий — встроенная
валидация синтаксиса
• Можно расширять
Минусы Augeas
• Расширять сложно
• Плохо работает с
нестрогими форматами
• Форматов обычно мало —
теряет смысл
Vagrant
http://vagrantup.com
Образ сервера
• Jenkins ежедневно
собирает AMI при
помощи Packer
• Публикует Vagrant box в
нашем репозитории
Vagrant
Vagrant box
• Packer создает его, если
указан постпроцессор
• Кладем файл .box на
локальный HTTP
• Обновляем JSON с
информацией о версиях
Vagrant box
$	
  cat	
  ~/.vagrant.d/boxes/cinarra-­‐VAGRANTSLASH-­‐baseami-­‐
daily-­‐1.2/1.0.174/aws/Vagrantfile	
  
Vagrant.configure("2")	
  do	
  |config|	
  
	
  	
  config.vm.provider	
  "aws"	
  do	
  |aws|	
  
	
  	
  	
  	
  aws.region_config	
  "eu-­‐west-­‐1",	
  ami:	
  "ami-­‐fb384f8c"	
  
	
  	
  end	
  
end	
  
vagrant box update
Vagrant ищет JSON на
http://vagrantcloud.com/box_name	
  
ubuntu/precise64	
  ⟶	
  	
  
http://vagrantcloud.com/ubuntu/
precise64	
  
Vagrant box
{	
  "name":	
  "orgname/baseami",	
  
	
  	
  "description":	
  "Our	
  brand	
  new	
  vagrant	
  box",	
  
	
  	
  "versions":	
  [	
  
	
  	
  	
  	
  {	
  "version":	
  "1.0.1",	
  
	
  	
  	
  	
  	
  	
  "providers":	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  "name":	
  "aws",	
  "url":	
  "http://
www.example.com/boxes/orgname/baseami/1.0.1/
packer_amazon-­‐ebs_aws.box"	
  }]},	
  
	
  	
  	
  	
  {	
  "version":	
  "1.0.2",	
  
	
  	
  	
  	
  	
  	
  "providers":	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  {	
  "name":	
  "aws",	
  "url":	
  "http://
www.example.com/boxes/orgname/baseami/1.0.2/
packer_amazon-­‐ebs_aws.box"	
  }]}	
  
]}
Vagrant box
• Переопределяем
VAGRANT_SERVER_URL
• Сервер должен отдавать
тип “application/json”
Разработчику
#	
  Делается	
  один	
  раз	
  при	
  добавлении	
  box-­‐а	
  
export	
  	
  
	
  	
  VAGRANT_SERVER_URL="http://www.example.com/boxes"	
  
vagrant	
  box	
  add	
  orgname/baseami	
  
#	
  Перед	
  работой	
  каждый	
  день	
  
vagrant	
  box	
  update	
  
vagrant	
  up	
  
#	
  После	
  работы	
  
vagrant	
  destroy
Jenkins
http://jenkins-ci.org
Jenkins job
Проблемы
• Параметры разбросаны
по всей конфигурации
• Кнопка “Advanced”
• Сложно менять сразу
несколько сборок
• Работать в UI медленно
Jenkins job
Сборка без checkout
Сборка без checkout
В остальном — обычная
сборка
Jenkins job
Центральная сборка
Центральная сборка
• Задает дополнительные
параметры
• Checkout всех git repo
• Запускает сборки с
нужными параметрами
• Достает и публикует
тесты и артефакты
Jenkins job
Вызов сборки
Другие варианты
• Правка config.xml
• Jenkins API
• Workflow plugin

https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin
• Build Flow plugin

https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin
• Job DSL plugin

https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin
Workflow plugin
echo	
  "Building	
  in	
  ${env.BASEDIR}"	
  
parallel	
  cnrMain:	
  {	
  
	
  	
  echo	
  "Building	
  cnr-­‐main"	
  
	
  	
  dir("cnr-­‐main")	
  {	
  
	
  	
  	
  	
  gitCheckout(	
  
	
  	
  	
  	
  	
  	
  "https://github.com/cinarra/cnr-­‐main.git",	
  
	
  	
  	
  	
  	
  	
  "remotes/origin/${CNR_BRANCH}",	
  
	
  	
  	
  	
  	
  	
  CNR_CREDENTIALS,	
  CNR_BUILD_TAG	
  
	
  	
  	
  	
  )	
  
	
  	
  	
  	
  sh	
  "make	
  clean	
  deb"	
  
	
  	
  	
  	
  archive	
  includes:	
  "**/*.deb",	
  fingerprint:	
  true	
  
	
  	
  }	
  
},	
  cnrCWS:	
  {	
  
	
  	
  	
  	
  	
  	
  echo	
  "Building	
  cnr-­‐cws"	
  
	
  	
  	
  	
  	
  	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  .	
  
}
Workflow plugin
Плюсы:
• Храним в Git
• Меняем все сборки сразу
• Легче читать и
отслеживать логику
Workflow plugin
Минусы:
• Пока сыроват
• Не совместим со многими
плагинами
Общий план
Github deb AMI
Devs
Tests
Prod
Preprod
Staging Chef
Vagrant
Спасибо!
Мы ищем программистов
Тимур Батыршин:
• timur@cinarra.com
• @erthad
• http://slideshare.net/erthad

Weitere ähnliche Inhalte

Was ist angesagt?

QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
Provectus
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
Gevent для эмуляции нагрузки
Gevent для эмуляции нагрузкиGevent для эмуляции нагрузки
Gevent для эмуляции нагрузки
m0use
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Ontico
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
2ГИС Технологии
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
Andrey Rebrov
 

Was ist angesagt? (20)

QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
QA MeetUp - Тимур Батыршин: "Тестирование серверной конфигурации"
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
 
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
Переезжаем с Zabbix на Prometheus / Василий Озеров (fevlake)
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
 
Gevent для эмуляции нагрузки
Gevent для эмуляции нагрузкиGevent для эмуляции нагрузки
Gevent для эмуляции нагрузки
 
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
переезд мониторинга
переезд мониторингапереезд мониторинга
переезд мониторинга
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Building deployment pipeline - DevOps way
Building deployment pipeline - DevOps wayBuilding deployment pipeline - DevOps way
Building deployment pipeline - DevOps way
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
Неочевидные детали при запуске HTTPS в OK.Ru / Андрей Домась (Одноклассники)
 

Andere mochten auch

DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 

Andere mochten auch (6)

Использование haproxy/iptables+etcd+confd для автоматического service discove...
Использование haproxy/iptables+etcd+confd для автоматического service discove...Использование haproxy/iptables+etcd+confd для автоматического service discove...
Использование haproxy/iptables+etcd+confd для автоматического service discove...
 
Тестируем инфраструктуру как код / Игорь Курочкин (Express 42)
Тестируем инфраструктуру как код / Игорь Курочкин (Express 42)Тестируем инфраструктуру как код / Игорь Курочкин (Express 42)
Тестируем инфраструктуру как код / Игорь Курочкин (Express 42)
 
Эволюция службы эксплуатации «Spotify» / Лев Попов (Spotify)
Эволюция службы эксплуатации «Spotify» / Лев Попов (Spotify)Эволюция службы эксплуатации «Spotify» / Лев Попов (Spotify)
Эволюция службы эксплуатации «Spotify» / Лев Попов (Spotify)
 
Опыт построения и эксплуатации большого файлового хранилища / Даниил Подольск...
Опыт построения и эксплуатации большого файлового хранилища / Даниил Подольск...Опыт построения и эксплуатации большого файлового хранилища / Даниил Подольск...
Опыт построения и эксплуатации большого файлового хранилища / Даниил Подольск...
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
 

Ähnlich wie Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cinarra Systems)

Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)
Ontico
 
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные измененияCodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
Regn
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
Daria Oreshkina
 
Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестиваль
Nikita Borzykh
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
it-people
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Ontico
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
Alexander Kirillov
 

Ähnlich wie Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cinarra Systems) (20)

Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)Инженерный дзен. Непрерывные изменения (Александр Титов)
Инженерный дзен. Непрерывные изменения (Александр Титов)
 
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные измененияCodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
CodeFest 2012. Титов А. — Инженерный дзен. Непрерывные изменения
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестиваль
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cinarra Systems)

  • 1. Как Vagrant и Chef ускорили разработку в несколько раз Тимур Батыршин Cinarra Systems
  • 2. Обо мне Инженер по эксплуатации в Cinarra Systems • Тимур Батыршин • timur@cinarra.com • @erthad
  • 3. Cinarra Systems • Молодая международная компания • Строим платформу для мобильной рекламы
  • 4. Ситуация год назад • Инфраструктурой еще никто не занимается • Более 10 сильносвязанных компонентов приложения • Много конфигов • Тесты зависят от данных
  • 5. Проблемы • Долгий деплой • Сложность конфигурации • Создание окружений • Синхронизация тестовых окружений • Воспроизводимость
  • 7. Шаблоны Chef • Плохо работают для часто меняющихся конфигов • Много лишней работы для большого числа параметров
  • 9. Augeas $  cat  /etc/nginx/nginx.conf   user  www-­‐data;   worker_processes  4;   events  {                  multi_accept  on;   }   http  {     sendfile  on;     tcp_nopush  on;     tcp_nodelay  on;                  gzip  on;   }
  • 10. Augeas $  augtool  print  /files/etc/nginx/nginx.conf   /files/etc/nginx/nginx.conf   /files/etc/nginx/nginx.conf/user  =  "www-­‐data"   /files/etc/nginx/nginx.conf/worker_processes  =  "4"   /files/etc/nginx/nginx.conf/events   /files/etc/nginx/nginx.conf/events/multi_accept  =  "on"   /files/etc/nginx/nginx.conf/http   /files/etc/nginx/nginx.conf/http/sendfile  =  "on"   /files/etc/nginx/nginx.conf/http/tcp_nopush  =  "on"   /files/etc/nginx/nginx.conf/http/tcp_nodelay  =  "on"   /files/etc/nginx/nginx.conf/http/gzip  =  "on"  
  • 11. Augeas (ресурс Chef) augeas_template  "/etc/cinarra/cate/cate.conf"  do      template  "/etc/cinarra/cate/cate.conf.sample"      lens  "IniFile"      parameters(          "CATE/logging_lev"  =>  node.cate.log_level,          "CATE/cmgw_host"  =>  node.cate.cmgw_host,          "CATE/csync_host"  =>  node.cate.csync_host,          "CATE/csync_port"  =>  node.cate.csync_port      )      notifies  :run,  "execute[supervisorctl  restart  cate]"   end  
  • 12. Augeas $  cat  /etc/cinarra/cate/cate.conf.sample   [CATE]   instance_id  =  1   logging_lev  =  6   cate_thread_n  =  2   cmgw_host  =  127.0.0.1   cmgw_num  =  2   csync_enabled  =  true   csync_host  =  127.0.0.1   csync_port  =  1234  
  • 13. Augeas $  cat  /etc/cinarra/cate/cate.conf   [CATE]   instance_id  =  1   logging_lev  =  3                      #  cate.log_level  =  3   cate_thread_n  =  2   cmgw_host  =  10.0.0.2            #  cate.cmgw_host  =  10.0.0.2   cmgw_num  =  2   csync_enabled  =  true   csync_host  =  10.0.0.3          #  cate.csync_host  =  10.0.0.3   csync_port  =  1234                  #  cate.csync_port  =  nil  
  • 14. Плюсы Augeas • Всеми конфигами управляем единообразно • Поддерживает почти все форматы конфигов • Строгий — встроенная валидация синтаксиса • Можно расширять
  • 15. Минусы Augeas • Расширять сложно • Плохо работает с нестрогими форматами • Форматов обычно мало — теряет смысл
  • 17. Образ сервера • Jenkins ежедневно собирает AMI при помощи Packer • Публикует Vagrant box в нашем репозитории Vagrant
  • 18. Vagrant box • Packer создает его, если указан постпроцессор • Кладем файл .box на локальный HTTP • Обновляем JSON с информацией о версиях
  • 19. Vagrant box $  cat  ~/.vagrant.d/boxes/cinarra-­‐VAGRANTSLASH-­‐baseami-­‐ daily-­‐1.2/1.0.174/aws/Vagrantfile   Vagrant.configure("2")  do  |config|      config.vm.provider  "aws"  do  |aws|          aws.region_config  "eu-­‐west-­‐1",  ami:  "ami-­‐fb384f8c"      end   end  
  • 20. vagrant box update Vagrant ищет JSON на http://vagrantcloud.com/box_name   ubuntu/precise64  ⟶     http://vagrantcloud.com/ubuntu/ precise64  
  • 21. Vagrant box {  "name":  "orgname/baseami",      "description":  "Our  brand  new  vagrant  box",      "versions":  [          {  "version":  "1.0.1",              "providers":  [                  {  "name":  "aws",  "url":  "http:// www.example.com/boxes/orgname/baseami/1.0.1/ packer_amazon-­‐ebs_aws.box"  }]},          {  "version":  "1.0.2",              "providers":  [                  {  "name":  "aws",  "url":  "http:// www.example.com/boxes/orgname/baseami/1.0.2/ packer_amazon-­‐ebs_aws.box"  }]}   ]}
  • 22. Vagrant box • Переопределяем VAGRANT_SERVER_URL • Сервер должен отдавать тип “application/json”
  • 23. Разработчику #  Делается  один  раз  при  добавлении  box-­‐а   export        VAGRANT_SERVER_URL="http://www.example.com/boxes"   vagrant  box  add  orgname/baseami   #  Перед  работой  каждый  день   vagrant  box  update   vagrant  up   #  После  работы   vagrant  destroy
  • 26. Проблемы • Параметры разбросаны по всей конфигурации • Кнопка “Advanced” • Сложно менять сразу несколько сборок • Работать в UI медленно
  • 29. Сборка без checkout В остальном — обычная сборка
  • 32. Центральная сборка • Задает дополнительные параметры • Checkout всех git repo • Запускает сборки с нужными параметрами • Достает и публикует тесты и артефакты
  • 35. Другие варианты • Правка config.xml • Jenkins API • Workflow plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Workflow+Plugin • Build Flow plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin • Job DSL plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin
  • 36. Workflow plugin echo  "Building  in  ${env.BASEDIR}"   parallel  cnrMain:  {      echo  "Building  cnr-­‐main"      dir("cnr-­‐main")  {          gitCheckout(              "https://github.com/cinarra/cnr-­‐main.git",              "remotes/origin/${CNR_BRANCH}",              CNR_CREDENTIALS,  CNR_BUILD_TAG          )          sh  "make  clean  deb"          archive  includes:  "**/*.deb",  fingerprint:  true      }   },  cnrCWS:  {              echo  "Building  cnr-­‐cws"              .  .  .  .  .  .  .  .  .  .  .   }
  • 37. Workflow plugin Плюсы: • Храним в Git • Меняем все сборки сразу • Легче читать и отслеживать логику
  • 38. Workflow plugin Минусы: • Пока сыроват • Не совместим со многими плагинами
  • 39. Общий план Github deb AMI Devs Tests Prod Preprod Staging Chef Vagrant
  • 40. Спасибо! Мы ищем программистов Тимур Батыршин: • timur@cinarra.com • @erthad • http://slideshare.net/erthad